Tips&Tricks | I trucchi del mestiere |
![]() |
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 } |