Foarte rapid de comutare utilizatorii Windows

Foarte rapid de comutare utilizatorii Windows
Vreau să împărtășesc cu voi viața hacking-ul, pe care le folosesc pe o bază de zi cu zi timp de mai mulți ani. Functioneaza impecabil, se economisește timp. Așa sa întâmplat că soția mea și cu mine sunt diferite conturi pe un singur computer acasă. Este convenabil: fiecare are propriul desktop, imagine de fundal, preferințele, aplicații, setări, cookie-urile în browser. Nici nu pot imagina acum, cum să lucreze sub un singur uchetki. Dar (fără ea, „dar“, nu ar fi nici o hârtie), există o mică problemă. User Switching. După cum se face de obicei: Start -> un fel de buton, în funcție de sistemul -> User pentru a schimba. Va apărea ecranul de selecție utilizator. Poke utilizatorul respectiv. Da, există o comandă rapidă cheie Win + L. După care este din nou necesar să poke un element de schimbare și o pictogramă. Total de cel puțin 3 etape. În Windows 8, am făcut o îmbunătățire notabilă în acest sens. apăsați Win + pictograma de utilizator și în lista faceți clic pe de altă parte. Dar acest lucru este, fără a lua în considerare faptul că există uchetki parola. Acest lucru este în cazul în care începe deja întârzieri substanțiale. Introduceți parola de fiecare dată când fiecare comutare plictisit foarte repede. O parolă pe uchetku ta a trebuit să pun ca acces de la distanță este necesar. Da, a fost posibil pentru a avea acces la distanță un alt uchetku face, dar viața mea de hacking a fost gata de timp și a lucrat perfect, indiferent dacă există sau nu uchetki parole.

Și ideea a fost atât. Pentru a face comutarea rapidă între utilizatori au avut loc într-un singur pas. Prin apăsarea unui singur hotkey. Caută pe Internet (amintiți-vă, era în urmă cu aproximativ 3 ani) au dat roade și au fost găsite soluții similare. Dar liberă sau buggy, sau necesită instalarea unui software de terță parte. O taxă, de înaltă calitate, a existat una, și a lucrat singur foarte bine, dar, la început, a fost plătită, iar pe de altă parte, conține funcționalități suplimentare - prin apăsarea hotkey nu este pornit imediat pentru utilizator, și fereastra de afișare (în imagine Alt + Tab) pentru a utilizatori. Sa decis să scrie decizia lor. Cel mai simplu, cu minim funcțional: hotkey - comutare.

  • Pentru a comuta sesiuni de a utiliza funcția wtsapi32.dll: WTSEnumerateSessions. WTSConnectSession. WTSDisconnectSession (Acum, când mă uit la o descriere a acestor funcții, se spune că lucrul cu sesiuni de lucru la distanță, și sincer vorbind, eu sunt un pic confuz, dar eu lucrez la nivel local, impecabil).
  • Taste rapide pentru funcții de utilizare User32.dll: RegisterHotKey. UnregisterHotKey. Totul este simplu.

Doar a face o rezervare, și puteți să mă arunci roșii, dar am scris acest lucru pe C #, deși profesioniști, ar fi cu siguranță mai bine, nativ, etc, etc, etc ... Dar apoi am început să învețe C # și este nevoie de experiența, și atunci când decizia a fost scrisă, transcrie nu a fost necesar, cu toate că transferul nu ia mai mult de o noapte.

Deci, în primul rând a fost scris o aplicație win32 simplu, cu un buton de pe care presa execută cod de genul:

Cu două sesiuni sessionInfo vor avea 3 elemente: sesiune de Servicii, sesiunea de primul utilizator, sesiunea a 2-a utilizatorului. Prin urmare targetSessId activeSessId și unic determinat. Atunci când mai mult de două sesiuni, va avea loc comutarea între activ și inactiv din urmă.

Dar apoi am suferit un mic regres. Unii s-ar putea ghici, așa că nu va funcționa. La momentul executării WTSConnectSession de aplicare, dezactivarea utilizator activ are loc, dar includerea unui al doilea utilizator - nr. Ie cu alte cuvinte, o aplicație de utilizator nu poate iniția o altă intrare de utilizator. Dar se poate face de serviciu! Da, îmi pare rău, dar nici un serviciu de sistem nu avem nimic. Ei bine, să creeze un serviciu de sistem care va lăsa în jos codul. Aici e la îndemână și C # .Net, ca serviciul de scriere pe aceste tehnologii este foarte, foarte simplu. Acum, următoarea problemă: Serviciul nu are nici o interfață de utilizator, de exemplu, utilizatorul nu poate afecta în mod direct funcționarea serviciului, iar serviciul nu poate auzi utilizatorul. Hang hotkey la serviciul imposibil.

Deci, aici e soluția noastră:
Aplicația utilizator utilizatorul ascultă și pe hotkey de detectare, sistemul trimite un semnal la serviciu, care efectuează comutarea.

Rămâne destul de un pic, dar atunci eu pot găsi ceva să-ți arăt. De exemplu, faptul că avem nevoie de aplicație desktop, fără ferestre, dar a luat la hotkeys. Este posibil să se facă acest lucru, la fel ca și toate: ascunde fereastra principală și nu arată. Dar există o soluție mai bună. Scrie ApplicationContext tau. cu negru
De exemplu, după cum urmează:

Aici am găsit folosesc pe interfața MovablePython.Hotkey internet a funcțiilor User32.dll RegisterHotKey, UnregisterHotKey.

Și câteva rânduri despre serviciul în sine.

Override eveniment OnCustomCommand, și în pregătirea echipei noastre, vom efectua funcția deja cunoscută.

Rămâne să se înregistreze și să înceapă serviciul și să pună în autostart fiecare aplicație utilizator.

Toate. Acum, după ce utilizatorul a introdus primul computer după începerea și a apăsat Win + A, sesiunea sa este dezactivat și de a primi o fereastra de selectie utilizator. Introduce al doilea utilizator apasă Win + A - apare prima sesiune de utilizator. Și așa mai departe. D.

Pe github, puteți vedea codul sursă. Sau puteți descărca întregul proiect, și fișiere compilate și gata de executabil.