Emanuele Mattei

Il blog di Emanuele Mattei.....il suo diario :-)

Blog Amici

Compact Framework

Web e win application

Siti Gratuiti

Siti Vari

Tools per .Net

Chi sono

elenco siti

settembre 2007 - Posts

Visualizzare le finestre del pannello di controllo di Windows

Articolo: Visualizzare le finestre delle proprietà di Windows

Introduzione:

In questo articolo, vedremo come visualizzare alcune finestre di Windows che si avviano dal panello di controllo, in particolare, la finestra per visualizzare le proprietà del video, quella per aggiungere un rete, quella per il pannello di controllo, quella per le impostazioni del suono e quella per la data ed ora.

Si crea un nuovo progetto windows, nel suo interno avremo 5 pulsanti, ogni pulsante avrà il compito di visualizzare una determinata funzionalità del pannello di controllo. Tramite il metodo Start della classe Process, verrà avviato il file rundll32 con il relativo argomento.

 

Per avviare il pannello di controllo:

VB.Net

System.Diagnostics.Process.Start(

"rundll32.exe", "shell32.dll,Control_RunDLL")

C#

System.Diagnostics.

Process.Start("rundll32.exe", "shell32.dll,Control_RunDLL");

Proprietà del desktop

VB.Net

System.Diagnostics.Process.Start(

"rundll32.exe", "shell32.dll,Control_RunDLL desk.cpl")

C#

System.Diagnostics.Process.Start("rundll32.exe", "shell32.dll,Control_RunDLL desk.cpl");

Aggiungere una rete

VB.Net

System.Diagnostics.Process.Start(

"rundll32.exe", "netplwiz.dll,AddNetPlaceRunDll")

C#

System.Diagnostics.

Process.Start("rundll32.exe", "netplwiz.dll,AddNetPlaceRunDll");

Finestra Data/ORa

VB.Net

System.Diagnostics.Process.Start(

"rundll32.exe", "shell32.dll,Control_RunDLL timedate.cpl")

C#

System.Diagnostics.

Process.Start("rundll32.exe", "shell32.dll,Control_RunDLL timedate.cpl");

Finestra dei suoni/multimedia

VB.Net

System.Diagnostics.Process.Start(

"rundll32.exe", "shell32.dll,Control_RunDLL mmsys.cpl")

C#

System.Diagnostics.

Process.Start("rundll32.exe", "shell32.dll,Control_RunDLL mmsys.cpl");

Importare i dati da Access in outlook

Vi segnalo questo mio articolo http://blog.shareoffice.it/emanuele/archive/2007/09/29/9217.aspx riguardante la programmazione vba, in particolare come importare i dati da access in outlook.

Buona lettura.

Emanuele.

 

Posted: set 30 2007, 06:33 by emanuelem | with no comments
Filed under:
Recensione libro: Programming Windows Workflow Foundation

Recensione libro: Programming Windows Workflow Foundation

Scheda libro

Lingua Inglese
Caraterristiche 300 pagine [191mm x 235mm]
ISBN 1904811213
ISBN 13 978-1-904811-21-3
Autore K. Scott Allen
Argomento Technologies Microsoft & .NET
Anno di edizione Dicembre 2006
Prezzo Euro 39

In certi contesti lavorativi, la gestione del flusso di attività può tornare utile, lo strumento di workflow detto anche flusso di lavoro permette di definire le azioni da intraprendere in certi situazioni. Con il rilascio del framework 3.0 per la tecnologia .Net si possono creare degli opportuni Workflow . Questa nuova tecnologia, che sarà inclusa con la nuova versione di Visual Studio 2008, permette ai programmatori di aggiungere alle proprie applicazioni delle funzionalità avanzate. Il libro Programming Windows Workflow Foundation ( http://www.packtpub.com/windows-workflow-foundation-Csharp/book ) edito della casa editrice Packt Publishing ( http://www.packtpub.com ) illustra tramite tecniche ed esempi con il  linguaggio di programmazione C# e la tecnologia XAML come creare dei Workflow. L'autore Scott Allen è auture di diversi articoli per la rivista MSDN magazine e Dr Dobb's Journal e del libro Building Websites with the ASP.NET Community Starter Kit, Microsoft ha ritenuto la sua professionalità molto valida riconoscendogli il titolo di MVP, inoltre è fondatore del sito http://www.OdeToCode.com .

Il libro è composto da 9 capitoli ed i vari esempi riportati nei capitoli sono scritti con il linguaggio di programmazione C# 2.0 da utilizzare con l'ambiente di sviluppo Visual Studio 2005, inoltre nei vari capitoli si trovano anche delle note di chiarimento riguardante alcune parti dell'argomento che si sta trattando.

Nel libro non è incluso nessun cd-rom o dvd, ma gli esempi utilizzati nel libro si possono scaricare dal seguente sito http://www.packtpub.com/support selezionando il titolo del libro.

Ma vediamo in dettaglio i vari capitoli del libro.

Il primo capitolo  introduce il concetto di workflow, illustrando al lettore come creare un semplice workflow, giusto per dare un introduzione a questa nuova tecnologia, il tutto in ambiente Visual Studio 2005. Viene fatta una panoramica su questa tecnologia, dell'architettura, delle varie parti che lo compongono (activities, XAML, Workflow runtime, ecc)  Il primo capitolo è composto anche da diverse immagini in questo modo si forniscono al lettore le informazioni per non trovarsi disorientato al primo approccio su questa tecnologia.

Nel secondo capitolo viene preso in considerazione la parte riguardante XAML, iniziando il capitolo in modo introduttivo ed informativo. In questo capitolo viene descritto anche i vari modi di compilazione tramite il comando WFC.exe, tramite il WorflowCompiler  e la compilazione con MSBuild.

Il terzo capitolo riguarda la parte delle azioni delle varie fasi di workflow, in esso si trovano varie immagine riguardante la generazione di un flusso tramite la parte designer per la creazione di un flusso dati. Vengono spiegati anche i vari eventi che si possono scatenare, come invocare un metodo e l'implementazione di un WorkFlow.

Il quarto capitolo illustra le basi delle attività ossia la parte che riguarda l'activity. In questo capitolo l'autore propone al lettore una panoramica di com'è struttura questa parte.

Il quinto capitolo riguarda la personalizzazione delle attività, tramite la creazione di una nuovo WorkFlow Activity library. Il capitolo spiega in modo esaustivo come creare una classe Activity personalizzata, illustrando sia la personalizzazione a livello di codice e sia a livello designer.

I capitoli precedenti hanno guidato il lettore alla creazione di workflow, nel capitolo 6 si passa alla parte che riguarda l'esecuzione di un workflow, di come configurarlo adeguatamente per l'avvio. Nel capitolo viene trattata la parte riguardante la connessione al database Sql Server. In questo capitolo si trovano molte informazioni e consigli per configurare un ottima gestione con il database Sql Server.

Il settimo capitolo riguarda la parte degli eventi. Come intraprendere un azione durante la fase del flusso di lavoro.

Il penultimo capitolo, l'ottavo, riguarda la comunicazione del WorkFlow. Nel capitolo vengono prese in considerazioni tecniche per i ruoli e le autorizzazione,  le queue, la trasformazioni in un Web Services e la sua pubblicazione. Il capitolo è dedicato all'aspetto Web Services, una tecnica molto usato in diverse architetture software (Windows application, Web Application e mobile application) inoltre vengono fornite le basi di come creare un WorkFlow di tipo Client Web Services.

Il capitolo conclusivo, il nono, prende in esame la parte dei ruoli e condizioni.  In questo capitolo si cerca di far acquisire al lettore le basi per fronteggiare i ruoli e le condizioni, la struttura del file .rules. In effetti la gestione dei ruoli è un argomento molto importante per far si che il flusso funzioni in modo adeguato da situazione a situazione e da persona a persona.

Elenco dei capitoli

1) Hello, Workflow

2) Authoring Workflows

3) Sequential WorkFlows

4) The Base Activity Library

5) Custom Activities

6) WorkFlow Hosting

7) Event-Driven WorkFlow

8) Communication in WorkFlows

9) Rules and Conditions.

 

Conclusioni

Un libro molto valido sia per le persone che si stanno avvicinando allo sviluppo di Workflow con la tecnologia .Net e sia a coloro che già lo utilizzano. Da considerare che il libro è scritto in inglese, anche se gli esempi di codice e le diverse figure e disegni aiutano molto anche coloro che non conosco bene la lingua, inoltre gli esempi sono tutti con il linguaggio C#.

Si fa presente che tale libro può essere acquistato anche in formato PDF.

Posted: set 27 2007, 08:12 by emanuelem | with no comments
Filed under:
Filenet Visualizzare le queue tramite la tecnologia .Net (VB.Net e C#)

Filenet: Visualizzare le queue (code) di Filenet tramite la tecnologia .Net (Vb.Net e C#)

 

Figura 1

Introduzione:

In questo articolo, vediamo come visualizzare i valori delle queue (code) tramite la tecnologia .Net (Vb.Net e C#), in particolare alcuni campi (denominati nome e cognome) creati in precedenza. Si crea una nuova form, nella quale si aggiunge tre label (per i vari titoli) due controlli listbox ed un pulsante, la finestra dovrà avere un aspetto simile alla figura 1.

Per la gestione delle code, utilizzeremo le classi library, per la gestione delle librerie, queue per la gestione delle code, QueueQuerySpecification per effettuare le  operazioni di ricerca ed infine la classe QueueBrowseSet che restituisce il risultato della ricerca.

Gli oggetti dichiarati a livello di form.

Utilizzeremo un solo oggetto, di tipo library a livello di form, il resto degli oggetti (istanze delle classi precedentemente descritte) saranno inseriti nei rispettivi eventi.

Si crea un oggetto di tipo library nella form, subito dopo la dichiarazione della form, come riportato qui di seguito.

Vb.Net

'oggetto libreria

Dim objLibrary As New IDMObjects.Library

 

C#

//oggetto libreria

IDMObjects.Library ObjLibrary = new IDMObjects.Library();

A questo punto, modifichiamo il costruttore della nostra form, in modo che possiamo utilizzare l'oggetto library, utilizzato nella form precedente in cui si è effettuato il login, di seguito si riporta un frammento di codice di esempio.

VB.Net

Sub New(ByVal libreria As IDMObjects.Library)

InitializeComponent()

objLibrary = libreria

End Sub

 

C#

public FrmVisualizzaCode(IDMObjects.Library objlibreria)

{

InitializeComponent();

ObjLibrary = objlibreria;

}

 

Ricerca e visualizzazione delle code

Di seguito si riporta un frammento di codice da utilizzare nell'evento load della form, per la visualizzazione delle queue.  Il metodo Browse dell'oggetto QueueQuerySpecification restituisce un insieme di queuebrowsset, ossia il risultato della ricerca effettuata. In effetti con l'oggetto QueueQuerySpecification, impostando alcune proprietà, possiamo eseguire determinate ricerche, mentre con l'oggetto QueueBrowseSet possiamo gestire le varie informazioni ottenute dalla ricerca, scorrere tra i vari dati, rilevare determinati valori, ed altro ancora sulle queue. Se il metodo Browse non trova nulla, restituisce un errore, ossia –2147208689 in questo caso bisogna gestire tale eccezione, altrimenti se qualora il metodo browse restituisce dei valori, possiamo fare un ciclo, per rilevare tali dati, come riportato nel frammento di codice di esempio.

Vb.Net

Try

'oggetto coda

Dim objQueue As New IDMObjects.Queue

objQueue = objLibrary.GetObject(IDMObjects.idmObjectType.idmObjTypeQueue, "ANAGRAFICA/DATI")

'oggetto per la ricerca delle code

Dim ObjQueueQuerySpecification As New IDMObjects.QueueQuerySpecification()

ObjQueueQuerySpecification = objQueue.CreateQuerySpecification()

''oggetto per la restituzione dei valori

Dim ObjQueueBrowseSet As New IDMObjects.QueueBrowseSet()

'flag per l'accesso al sistema di filenet

ObjQueueQuerySpecification.CheckUser = False

'Indica i valori delle code

ObjQueueQuerySpecification.EvenIfDelayed = False

'permette di impostare o restituire un valore in base allo stato delle queue inserite, ossia se il ritorno della query è incompleta.

ObjQueueQuerySpecification.Incomplete = IDMObjects.idmQueueIncompleteOpt.idmIncompleteOK

ObjQueueQuerySpecification.MinPriority = 0

'restituisce tutti gli entry anche se sono loccati ossia bloccati

ObjQueueQuerySpecification.Status = IDMObjects.idmQueueBusyOpt.idmBusyOK

'imposto l'oggetto per la ricerca

ObjQueueBrowseSet = ObjQueueQuerySpecification.Browse()

'ciclo per i valori

For intConta As Integer = 1 To ObjQueueBrowseSet.RecordCount

lstbNome.Items.Add(ObjQueueBrowseSet.Entry.Properties("Nome").Value)

lstCognome.Items.Add(ObjQueueBrowseSet.Entry.Properties("Cognome").Value)

'verifico la fine

If ObjQueueBrowseSet.MoreResults = True Then

ObjQueueBrowseSet.MoveNext()

End If

Next

 

Catch ex As Exception

Dim ObjErrorManager As New IDMError.ErrorManager

Dim ObjErrori As IDMError.Errors

Dim StrTestoErrore As String = ""

Dim objErrore As IDMError.Error

If ObjErrorManager.Errors.Count > 0 Then

ObjErrori = ObjErrorManager.Errors

'ciclo per tutti gli errori

For Each objErrore In ObjErrori

If objErrore.Number = -2147208689 Then

    StrTestoErrore = "Non ci sono code"

Else

    StrTestoErrore = objErrore.Description

End If

Next

Else

StrTestoErrore = ex.Message

End If

MsgBox(StrTestoErrore)

End Try

C#

try

{

//oggetto coda

IDMObjects.Queue objQueue = new IDMObjects.Queue ();

objQueue = (IDMObjects.Queue) ObjLibrary.GetObject(IDMObjects.idmObjectType.idmObjTypeQueue, "ANAGRAFICA/DATI",null,null,null);

//oggetto per la ricerca delle code

IDMObjects.QueueQuerySpecification ObjQueueQuerySpecification = new IDMObjects.QueueQuerySpecification();

ObjQueueQuerySpecification = objQueue.CreateQuerySpecification();

//oggetto per la restituzione dei valori

IDMObjects.QueueBrowseSet ObjQueueBrowseSet = new IDMObjects.QueueBrowseSet();

//flag per l'accesso al sistema di filenet

ObjQueueQuerySpecification.CheckUser = false;

//Indica i valori delle code

ObjQueueQuerySpecification.EvenIfDelayed =false ;

//permette di impostare o restituire un valore in base allo stato delle queue inserite, ossia se il ritorno della query è incompleta.

ObjQueueQuerySpecification.Incomplete = IDMObjects.idmQueueIncompleteOpt.idmIncompleteOK ;

ObjQueueQuerySpecification.MinPriority = 0;

//restituisce tutti gli entry anche se sono loccati ossia bloccati

ObjQueueQuerySpecification.Status = IDMObjects.idmQueueBusyOpt.idmBusyOK;

//imposto l'oggetto per la ricerca

ObjQueueBrowseSet = ObjQueueQuerySpecification.Browse();

//ciclo per i valori

for (int intconta = 1; intconta <= ObjQueueBrowseSet.RecordCount; intconta++ )

{

lstbNome.Items.Add(ObjQueueBrowseSet.Entry.Properties["Nome"].Value );

lstCognome.Items.Add(ObjQueueBrowseSet.Entry.Properties["Cognome"].Value);

//verifico la fine

if (ObjQueueBrowseSet.MoreResults == true)

{

ObjQueueBrowseSet.MoveNext();

}

}

 

 

}

catch (Exception ex)

{

IDMError.ErrorManager ObjErrorManager = new IDMError.ErrorManager();

IDMError.Errors ObjErrori;

string StrTestoErrore = "";

IDMError.Error ObjErrore;

//verifico che in filenet ci siano errori

if (ObjErrorManager.Errors.Count > 0)

{

ObjErrori = ObjErrorManager.Errors;

//ciclo per tutti gli errori

foreach (IDMError.Error objErrore in ObjErrori)

{

if (objErrore.Number = -2147208689)

{

StrTestoErrore ="Non ci sono code");

}

else

{

StrTestoErrore = objErrore.Description;

}

 

}

}

else

{

StrTestoErrore = ex.Message;

}

MessageBox.Show(StrTestoErrore, "FileNet");

}

 

Conclusioni:

In questo articolo, si è visto come visualizzare in un controllo listbox i valori delle queue, informazioni importanti relativi ai documenti, gli oggetti utilizzati (queue, QueueQuerySpecification e QueueBrowseSet) sono gli oggetti da utilizzare per la gestione delle queue. Tramite la parola download è possibile scaricare il progetto di esempio utilizzato nell'articolo.

Download esempio

Siti web di riferimento:

http://www.filenet.com/Italiano/index.asp  Italia

http://www.filenetinfo.com/mk/get/feis_ita_reg Per richiedere gratuitamente il cd "FileNet is Essential"

http://www.filenet.com/  (Inglese)

Posted: set 16 2007, 12:33 by emanuelem | with no comments
Filed under:
Asp Inviare un email tramite CDO

Questo frammento di codice, permette di inviare in una pagina Asp tradizionale (VBscript) un email, tramite le funzionalità di CDO (dll del sistema Windows). Si fa presente che la dichiarazione e valorizzazione di alcune variabili è stata omessa (ma è facilmente deducibile).

 

'oggetto per l'invio dell'email

Dim CDOMsg

'oggetto per la configurazione

Dim CDOConf

'oggetto per i campi di configurazione

Dim Flds

'testo html da invniare via email

Dim strHTML

'parametro di sendusing

Const cdoSendUsingPort = 2

set CDOMsg = CreateObject("CDO.Message")

set CDOConf = CreateObject("CDO.Configuration")

Set Flds = CDOConf.Fields

'imposto i parametri del web server (sistemare per la lettura del registro di windows

With Flds

.Item("http://schemas.microsoft.com/cdo/configuration/sendusing") = cdoSendUsingPort

' parametri mail server.

.Item("http://schemas.microsoft.com/cdo/configuration/smtpserver") = Mail_Server

.Item("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25

'autenticazione

.Item("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 1

.Item("http://schemas.microsoft.com/cdo/configuration/sendusername") = User_Email

.Item("http://schemas.microsoft.com/cdo/configuration/sendpassword") = PSW_Email

.Update

End With

'imposto il percorso del file

PathFile = Server.MapPath(".") & "\CartellaFile\MioFile.doc"

' Imposto il testo

strHTML = "<HTML>"

strHTML = strHTML & "<HEAD>"

strHTML = strHTML & "<BODY>"

strHTML = strHTML & "<b> testo </b></br>"

strHTML = strHTML & "</BODY>"

strHTML = strHTML & "</HTML>"

' Invio

With CDOMsg

Set .Configuration = CDOConf

'destinatario.

.To = EmailDestinatari

'Mittente

.From = EmailMittente

'oggetto

.Subject = "oggetto"

'testo html

.HTMLBody = strHTML

'allego il file appena generato

.AddAttachment PathFile

.Send

End With

'cancello le variabili

Set CDOMsg = Nothing

Set CDOConf = Nothing

Set Flds = Nothing

Javascript validare un indirizzo email (regular Expression)

Il frammento di codice riportato qui di seguito, verifica che l'indirizzo email digitato in una casella di testo sia corretto.

  var email = document.forms[0].emailField.value;       if (!email.match(/^([a-zA-Z0-9_\.\-])+\@(([a-zA-Z0-9\-])+\.)+([a-zA-Z0-9]{2,4})$/)){         return false;      }
segnalazione sito: pinvoke - frammenti di codice delle API

Da questo sito http://www.pinvoke.net/index.aspx si trova un ottima risorsa per la programmazione .Net, tramite l'utilizzo di API. I vari frammenti di codice di API, sono sia per l'ambiente Windows e sia per l'ambiente Mobile. Inoltre è possibile scaricare gratuitamente un plug-in per Visual Studio Net (2003 o 2005).

Che dirvi..... buona programmazione :-))).

Posted: set 10 2007, 10:35 by emanuelem | with no comments
Filed under:
C# effettuare il beep del computer

Trucco C#: Simulare il beep del sistema operativo

Se vogliamo simulare il suono beep, del computer, dobbiamo utilizzare delle Api.

Inserire lo spazio dei nomi interopservices per gestire l'interoperabilità

using System.Runtime.InteropServices;

 

Dichiare nella classe form, la seguente dichiarazione di api:

[DllImport("Kernel32.dll")]

public static extern bool Beep(UInt32 frequency, UInt32 duration);

Per eseguire il suono utilizzare la funzione beep, come riportata qui di seguito:

Beep(1000, 300);

 

Tools gratuito su Linq

Dal seguente blog http://blogs.msdn.com/socaldevgal/archive/2007/09/04/download-linqpad-a-free-linq-query-expression-tool.aspx ho trovato interessato questo tools http://www.albahari.com/linqpad.html per il linguaggio Linq.

Mi sembra un ottimo strumento per la gestione e creazione delle query expression in Linq, una nuova funzionalità del Framework 3.0.

Per download ed informazioni visitate il seguente sito http://www.albahari.com/linqpad.html 

Posted: set 04 2007, 11:19 by emanuelem | with no comments
Filed under:
impostare un numero massimo di carattere in un controllo html textarea (maxlength)

Il controllo html TextArea non ha una proprietà maxlength come il controllo text, per tanto per limitare l'inserimento dei caratteri in tale controllo, dobbiamo utilizzare uno script.

Nell'evento keypress, del controllo TextArea, utilizziamo una funzione che permette limitare l'inserimento dei caratteri.


< textarea name="note" onkeypress="return MaxCaratteri(this, 499);" style="width:100%">

mentre la funzione javascript, sarà la seguente.

<script language="javascript">
function MaxCaratteri(Object, MaxLen)

{

      return (Object.value.length <= MaxLen);

}

</script>