Home | Chi sono | Contattami
 

Progr. lineare

Delphi
 
Componenti
  Database
 
Miei articoli

Windows

Miei articoli 

 

RegJump: aprire Regedit e posizionarsi su una chiave di registro


A tutti Ŕ capitato di usare il RegMon e a molti sarÓ sicuramente capitato di far doppio click su una delle voci elencate e vedere come venga aperto Regedit e ci si posizioni per magia sulla chiave di registro in questione. E' proprio questo quello che voglio fare: una procedura semplice semplice che prenda in input una stringa che mi definisce una chiave di registro e vada ad aprire Regedit posizionandosi alla fine sulla chiave di registro in questione. Il trucco sta tutto nell'utilizzo dei tasti della tastiera e nella simulazione a livello di programmazione della loro pressione.

procedure RegeditJump(RegPath: string); var regeditHwnd, regeditMainHwnd: Cardinal; vk: Cardinal; i: Cardinal; begin //vediamo se regedit Ŕ giÓ aperto regeditMainHwnd := FindWindow('RegEdit_RegEdit', nil); if regeditMainHwnd = 0 then //se regedit non Ŕ aperto begin //lancio regedit.exe ed aspetto che sia disponibile per l'invio di input if ExecuteProcess('regedit.exe', False, True) <> 0 then Exit; end; regeditMainHwnd := FindWindow('RegEdit_RegEdit', nil); ShowWindow(regeditMainHwnd, SW_SHOW); SetForegroundWindow(regeditMainHwnd); //metto in primo piano regedit // Get treeview regeditHwnd := FindWindowEx(regeditMainHwnd, 0, 'SysTreeView32', nil); SetForegroundWindow(regeditHwnd); SetFocus(regeditHwnd); //Collasso il tutto con una raffica di 30 frecce sinistre; //ogni freccia sinistra collassa la chiave padre della chiave //attualmente col focus for i := 0 to 30 do begin vk := VK_LEFT; SendMessage(regeditHwnd, WM_KEYDOWN, vk, 0); end; //ora che ho collassato tutto (vedo solo il nodo "Risorse del Computer"), //premo la freccia destra per aprire l'elenco iniziale (HKEY_CLASSES_ROOT, ...) vk := VK_RIGHT; SendMessage(regeditHwnd, WM_KEYDOWN, vk, 0); //ora esamino il percorso completo su cui devo andare for i := 1 to Length(RegPath) do begin if RegPath[i] = '\' then begin //devo aprire la chiave corrente per ottenere le sottochiavi; //per fare questo premo la freccia destra; la freccia destra //espande la chiave attualmente col focus vk := VK_RIGHT; SendMessage(regeditHwnd, WM_KEYDOWN, vk, 0); //mi fermo un attimo: utile nel caso di chiave con molte sottochiavi Sleep(750); end else begin //premo in sequenza i caratteri che costituiscono il nome della chiave //su cui posizionarsi vk := Ord(RegPath[i]); SendMessage(regeditHwnd, WM_CHAR, vk, 0); end; end; end;

Esempio

 

 
 
Your Ad Here