Tips&Tricks | I trucchi del mestiere |
![]() |
Come validare un indirizzo e-mail con le Regular Expression |
<% Function IsMail(sEmail) Dim objRegExp Set objRegExp = New RegExp objRegExp.Pattern = "^[a-z._-]+\@[a-z._-]+\.[a-z]{2,4}$" objRegExp.IgnoreCase = True IsMail = objRegExp.Test(sEmail) End Function Dim strEmail strEmail = "webmaster@byluciani.com" If IsMail(strEmail) Then Response.Write strEmail & _ " Φ un indirizzo email sintatticamente corretto" Else Response.Write strEmail & _ " NON Φ un indirizzo email sintatticamente corretto" End If %> |
![]() |
Email a Go Go |
'Definizioni per CDO dim cdoSendUsingMethod, cdoSendUsingPort,cdoSMTPServer,cdoSMTPServerPort,cdoSMTPAuthenticate,cdoAnonymous,cdoSuppressNone cdoSendUsingMethod = "http://schemas.microsoft.com/cdo/configuration/sendusing" cdoSendUsingPort = 2 cdoSMTPServer = "http://schemas.microsoft.com/cdo/configuration/smtpserver" cdoSMTPServerPort = "http://schemas.microsoft.com/cdo/configuration/smtpserverport" cdoSMTPAuthenticate = "http://schemas.microsoft.com/cdo/configuration/smtpauthenticate" cdoAnonymous = 0 cdoSuppressNone = 0 ' invio una mail di prova Dim oConf , oMail , oFlds , oAtt Set oMail = CreateObject("CDO.Message") Set oConf = CreateObject("CDO.Configuration") Set oFlds = oConf.Fields oFlds(cdoSendUsingMethod) = cdoSendUsingPort oFlds(cdoSMTPServer) = "mioServerSmtp" oFlds(cdoSMTPServerPort) = 25 oFlds(cdoSMTPAuthenticate) = cdoAnonymous oFlds.Update Set oMail.Configuration = oConf oMail.From = "MioMailer <io@mioprovider.it>" oMail.Subject = "Prova CDO" oMail.CreateMHTMLBody "http://www.itportal.it", cdoSuppressNone oMail.To = "Indirizzo1@provider1.it" oMail.Send oMail.To = "Indirizzo2@provider2.it" oMail.Send ' etc etc etc set oConf = Nothing set oflds = Nothing set oMail = Nothing |
![]() |
Come personalizzare WinAMP |
HWND winamp; winamp = FindWindow("Winamp v1.x",NULL); |
SendMessage(winamp, WM_COMMAND,40045,0); Simula la pressione del tasto "play" di winamp, eseguendo il primo brano della playlist. SendMessage(winamp,WM_WA_IPC,playlistpos,121); Winamp esegue il brano alla posizione specificata dalla variabile 'playlistpos' |
COPYDATASTRUCT cds; cds.dwData = 100; cds.lpData = (void *) "file.mp3"; cds.cbData = strlen((char *) cds.lpData)+1; // include space for null char SendMessage(winamp,WM_COPYDATA,(WPARAM)NULL,(LPARAM)&cds) |
![]() |
La serializzazione XML con C# |
![]() |
Shutdown di Windows...e non solo |
//------------------------------------------- E' necessario includere tra gli header winuser.h void __fastcall TForm1::ShutDown(TObject *Sender) { HANDLE hToken; TOKEN_PRIVILEGES tkp; //definisce una struttura che contiene il settaggio dei privilegi per il token // Prendo un token per questo processo. if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) //"OpenProcessToken" apre l'accesso a un token associato con un processo //"GetCurrentProcess" ritorna un pseudohandle per il processo corrente //"TOKEN_ADJUST_PRIVILEGES" abilita o disabilita i privilegi di accesso del token error("OpenProcessToken"); //o un'altra procedura di gestione errori // Prendo il LUID (Locally Unique IDentifier) per i privilegi di shutdown. LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; //"SE_SHUTDOWN_NAME" Φ il privilegio richiesto per spegnere una macchina locale // Prende i privilegi per questo processo AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0); //"AdjustTokenPrivileges" abilita o disabilita i privilegi di accesso del token if (GetLastError() != ERROR_SUCCESS) error("AdjustTokenPrivileges"); //o un'altra procedura di gestione errori //Chiudo il sistema e forzo la chiusura delle applicazioni if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0)) error(ExitWindowsEx); //o un'altra procedura di gestione errori //"ExitWindowsEx" gestisce l'uscita da un sistema Windows supporta 5 tipi di parametri flag //" bool ExitWindowsEx (UINT flag, DWORD reserved); " //"EWX_FORCE" forza la terminazione dei processi Windows non manda i messaggi di fine // sessione e il sistema termina drasticamente con possibili perdite di dati //"EWX_LOGOFF" termina i processi e fa il Logoff //"EWX_POWEROFF" termina i processi e spegne il computer //"EWX_REBOOT" riavvia //"EWX_SHUTDOWN" termina i processi e mette il computer in attesa di power off } |
Void __fastcall TForm1::ShutDown(TObject *Sender) { HANDLE hToken; TOKEN_PRIVILEGES tkp; //definisce una struttura che contiene il settaggio dei privilegi per il token // Prendo un token per questo processo. if (!OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY, &hToken)) //"OpenProcessToken" apre l'accesso a un token associato con un processo //"GetCurrentProcess" ritorna un pseudohandle per il processo corrente //"TOKEN_ADJUST_PRIVILEGES" abilita o disabilita i privilegi di accesso del token error("OpenProcessToken"); //o un'altra procedura di gestione errori // Prendo il LUID (Locally Unique IDentifier) per i privilegi di shutdown. LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME,&tkp.Privileges[0].Luid); tkp.PrivilegeCount = 1; tkp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; //"SE_SHUTDOWN_NAME" Φ il privilegio richiesto per spegnere una macchina locale // Prende i privilegi per questo processo AdjustTokenPrivileges(hToken, FALSE, &tkp, 0,(PTOKEN_PRIVILEGES)NULL, 0); //"AdjustTokenPrivileges" abilita o disabilita i privilegi di accesso del token if (GetLastError() != ERROR_SUCCESS) error("AdjustTokenPrivileges"); //o un'altra procedura di gestione errori //Chiudo il sistema e forzo la chiusura delle applicazioni if (!ExitWindowsEx(EWX_SHUTDOWN | EWX_FORCE, 0)) error(ExitWindowsEx); //o un'altra procedura di gestione errori //"ExitWindowsEx" gestisce l'uscita da un sistema Windows supporta 5 tipi di parametri flag //" bool ExitWindowsEx (UINT flag, DWORD reserved); " //"EWX_FORCE" forza la terminazione dei processi Windows non manda i messaggi di fine // sessione e il sistema termina drasticamente con possibili perdite di dati //"EWX_LOGOFF" termina i processi e fa il Logoff //"EWX_POWEROFF" termina i processi e spegne il computer //"EWX_REBOOT" riavvia //"EWX_SHUTDOWN" termina i processi e mette il computer in attesa di power off } |
![]() |
Controllare i processi di un PC remoto |
Procedure TForm1.Button1Click(Sender: TObject); Const QUERY = 'Select * From Win32_Process'; COMPUTER = 'SERVER-AT12K'; Var Services : SWbemServices; ObjectSet : ISWbemObjectSet; Enum : IEnumVariant; tempObj : OleVariant; SObject : ISWbemObject; Value : Cardinal; Begin Services := Locator.ConnectServer(COMPUTER, 'root\cimv2', '', '', '', '', 0, nil); ObjectSet := Services.ExecQuery(QUERY, 'WQL', wbemFlagReturnImmediately, nil); Enum := (ObjectSet._NewEnum) As IEnumVariant; While (Enum.Next(1, TempObj, Value) = S_OK) Do Begin SObject := IUnknown(TempObj) As SWBemObject; Memo1.Lines.Add(SObject.GetObjectText_(0)) End; End; |
![]() |
Come personalizzare i componenti Delphi senza scriverne di nuovi |
type TMyEdit = TEdit; TEdit = class(TMyEdit) private function lfFloat : real; procedure lpFloat(lrValue : real); public property AsFloat : real read lfFloat write lpFloat; end; TForm1 = class(TForm) btnSqrt: TButton; edtValue: TEdit; procedure btnSqrtClick(Sender: TObject); end; var Form1: TForm1; implementation function TEdit.lfFloat : real; begin try Result := StrToFloat(Text); except Result := 0; end; end; procedure TEdit.lpFloat(lrValue : real); begin Text := FloatToStr(lrValue); end; {$R *.dfm} procedure TForm1.btnSqrtClick(Sender: TObject); begin edtValue.AsFloat := Sqrt(edtValue.AsFloat); end; |
![]() |
Limitare il movimento del mouse |
procedure Limita_Mouse(Sx,Alto,Dx,Basso:Integer); /* Questi valori rappresentano i punti in alto a sinistra e in basso a destra del rettangolo entro cui si va a confinare il mouse */ var Area: TRect; begin Area.Left:=Sx; Area.Top:=Alto; Area.Right:= Dx; Area.Bottom:= Basso; ClipCursor(@Area); end; |
ClipCursor(nil); |
![]() |
Estrarre da un file ZIP |
//Classe unzipFile class unzipFile { //Stream file sorgente (zip) FileInputStream sorgStream=null; //Stream file di destinazione FileOutputStream destStream=null; //Buffer input BufferedInputStream sorgStreamBuff=null; //Buffer output BufferedOutputStream destStreamBuff=null; //Stream per leggere da un file .zip ZipInputStream zipIn=null; //Zip entry ZipEntry zipEntry=null; //Array dati byte[] data=new byte[2048]; //Stringa destinazione completa String destCompleta=null; //sorg deve essere un percorso del tipo c:\prova.zip; dest deve essere un percorso di tipo c:\unzip\ public void unzipFromTo(String sorg, String dest) { //Apertura stream di lettura try { //Apre stream di lettura sorgStream=new FileInputStream(sorg); //Apre buffer sorgStreamBuff=new BufferedInputStream(sorgStream); } catch (IOException e) { System.out.println("Errore durante l'apertura degli stream"); } //Apertura ZipInputStream zipIn=new ZipInputStream(sorgStreamBuff); //Catch per posizionamento nell'entry da leggere try { //Apre entry ed esce dal ciclo se non ce ne sono pi∙ while((zipEntry=zipIn.getNextEntry())!=null) { //Creazione del percorso del file in cui estrarre l'entry del file zip //concatenando il valore di ritorno di ZipEntry.getName() e la cartella scelta dall'utente destCompleta=dest + zipEntry.getName(); //Apre stream di scrittura destStream=new FileOutputStream(destCompleta); //Apre buffer destStreamBuff=new BufferedOutputStream(destStream); //Lettura zip e scrittura file decompresso int count; //Legge 2048 byte dal file zip e controlla EOF while((count=zipIn.read(data,0,2048))!=-1) { //Scrive su disco i dati decompressi destStreamBuff.write(data,0,count); } //Chiude entry corrente zipIn.closeEntry(); //Chiude file stream di output destStreamBuff.close(); destStream.close(); } } catch(IOException e) { System.out.println("Errore estrazione file."); } try { //Chiusura file stram e zip stream zipIn.close(); sorgStreamBuff.close(); } catch(IOException e) { System.out.println("Errore chiusura"); } } } |
![]() |
Eseguire un comando di sistema in Java |
String [] comando={"cat","nome file.txt"}; Runtime.getRuntime().Exec(comado); |
![]() |
Script in cascata |
<script language="javascript"> document.write("<sc"+"ript LANGUAGE=\"JavaScript\" SRC=\"...\"> </sc"+"ript>"); </script> |
![]() |
Un approfondimento del Tip "Pass-by-Value e Pass-By-Reference" |
import java.rmi.*; public interface Libreria extends Remote { public void cambiaAttributo(MioOggetto mioOggetto) throws RemoteException; àà } àà // fine classe import java.io.Serializable; public class MioOggetto implements Serializable { public String nome; public MioOggetto(String nome) { this.nome = nome; } public void setNome(String nome) { this.nome = nome; } public String getNome() { return this.nome; } } àà // fine classe |
import java.rmi.*; public class Cliente { public static void main(String args[]) { ...... try { MioOggetto mioOggetto = new MioOggetto("Marco"); Libreria libreria = (Libreria) Naming.lookup("rmi://127.0.0.1:1099/istanzalibreria"); // Si suppone un oggetto servente abbia memorizzato nel RMIRegistry un istanza di Libreria con il nome indicato. libreria.cambiaAttributo(mioOggetto); System.out.println("Nome : " + mioOggetto.getNome()); } // end try catch(Exception e) { } } } |
à public void cambiaAttributo(MioOggetto mioOggetto) { mioOggetto.setNome("Pippo"); } à |
Nome : Marco |
public interface Libreria extends Remote { public MioOggetto cambiaAttributo(MioOggetto mioOggetto) throws RemoteException; àà } Ecco anche come modificare il programma Cliente: import java.rmi.*; public class Cliente { public static void main(String args[]) { ...... try { MioOggetto mioOggetto = new MioOggetto("Marco"); Libreria libreria = (Libreria) Naming.lookup("rmi://127.0.0.1:1099/istanzalibreria"); mioOggetto = libreria.cambiaAttributo(mioOggetto); System.out.println("Nome : " + mioOggetto.getNome()); } // end try catch(Exception e) { } } } |
à public MioOggetto cambiaAttributo(MioOggetto mioOggetto) { mioOggetto.setNome("Pippo"); return mioOggetto; } à |
Nome : Pippo |
![]() |
Controllare i processi di un PC remoto |
Procedure TForm1.Button1Click(Sender: TObject); Const QUERY = 'Select * From Win32_Process'; COMPUTER = 'SERVER-AT12K'; Var Services : SWbemServices; ObjectSet : ISWbemObjectSet; Enum : IEnumVariant; tempObj : OleVariant; SObject : ISWbemObject; Value : Cardinal; Begin Services := Locator.ConnectServer(COMPUTER, 'root\cimv2', '', '', '', '', 0, nil); ObjectSet := Services.ExecQuery(QUERY, 'WQL', wbemFlagReturnImmediately, nil); Enum := (ObjectSet._NewEnum) As IEnumVariant; While (Enum.Next(1, TempObj, Value) = S_OK) Do Begin SObject := IUnknown(TempObj) As SWBemObject; Memo1.Lines.Add(SObject.GetObjectText_(0)) End; End; |
![]() |
Visual Basic .NET - Menu facili con XML |
![]() |
File troppo "ingombranti" |