Nagyon gyors ablakváltáskor felhasználók

És az ötlet annyira. Ahhoz, hogy a gyors felhasználó váltás történt egy lépésben. Megnyomásával egyetlen gyorsbillentyűvel. Keresés az interneten (ne felejtsük, ez volt a 3 évvel ezelőtt) meghozta gyümölcsét, és hasonló megoldásokat találtak. De szabad vagy hibás, vagy igényelhetnek a telepítés egy harmadik féltől származó szoftvert. A díjat, kiváló minőségű, volt egy, és egyedül dolgozott nagyon jól, de eleinte fizettek, másrészt tartalmaz extra funkciókat - megnyomja a gyorsbillentyű nem azonnal kapcsol a felhasználó, és a kijelző (a képen az Alt + Tab), hogy felhasználók számára. Úgy döntöttek, hogy írjon a döntést. A legegyszerűbb, funkcionális minimum: gyorsbillentyű - váltás.
- Ha váltani ülés használatához wtsapi32.dll funkció: WTSEnumerateSessions. WTSConnectSession. WTSDisconnectSession (Most, amikor ránézek egy leírást ezeket a funkciókat, azt mondja, hogy a munka távmunka ülések, és őszintén szólva, én egy kicsit zavaros, de helyben dolgoznak, hibátlanul).
- Gyorsbillentyűk használatra user32.dll funkciók: RegisterHotKey. UnregisterHotKey. Minden egyszerű.
Csak, hogy a foglalás, és akkor dobja rám paradicsom, de írtam ezt a dolgot c #, de profik lenne biztosan jobb, őshonos, stb, stb, stb ... De aztán elkezdtem tanulni a C # és szüksége volt a tapasztalat, és amikor a határozat írták, átírni, hogy nem szükséges, de az átadás nem több, mint egy éjszaka.
Tehát, először ez volt írva egy egyszerű win32 alkalmazás egy gombot, amely a sajtó végzi kódot, mint ez:
A két ülés sessionInfo lesz 3 elemből áll: Services ülés, az ülés az 1. felhasználó, a ülésén a 2. felhasználó. Ennek megfelelően targetSessId activeSessId és egyértelműen meghatározni. Ha több mint két ülés, váltás között alakulnak az aktív, és az utóbbi inaktív.
De aztán szenvedett egy kis visszaesés. Néhány nehéz kitalálni, hogy így nem fog működni. Abban az időben a végrehajtását a kérelem WTSConnectSession letiltása aktív felhasználói történik, de a felvétel egy második felhasználó - nincs. Ie Más szóval, a felhasználói alkalmazás nem tud kezdeményezni egy másik felhasználótól. De ez lehet, hogy szolgáltatást! Igen, sajnálom, de nem rendszer szolgáltatás már semmit. Nos, nézzük olyan rendszert hozzon létre, amely szolgáltatás levetem a kódot. Itt a praktikus C # és .NET, mint a Write, az ilyen technológiákra nagyon, nagyon egyszerű. Most a következő probléma: A szolgáltatásnak nincs felhasználói felület, azaz a felhasználó nem tud közvetlenül befolyásolja a működését a szolgáltatást, és a szolgáltatás nem hallja a felhasználó. Hang a gyorsbillentyű a szolgáltatás lehetetlen.
Szóval, itt van a mi megoldásunk:
A felhasználói alkalmazás a felhasználó meghallgat és észlelésekor gyorsbillentyű, a rendszer küld egy jelet a szolgáltatás, amely elvégzi a váltás.
Továbbra is egy kicsit, de aztán találok valamit megmutatni. Például az a tény, hogy szükségünk van az asztali alkalmazás, aminek nincs ablaka, de megtette a gyorsbillentyűk. Lehetőség van rá, mint minden: elrejtése a főablak, és nem mutatnak. De van egy jobb megoldás. Írjon ApplicationContext. fekete
Például az alábbiak szerint:
Itt használjuk az interneten talált MovablePython.Hotkey interfész user32.dll funkciók RegisterHotKey, UnregisterHotKey.
És egy pár sort arról maga a szolgáltatás.
Felülbírálása esemény OnCustomCommand, és az előkészítő csapatunk végzünk a már ismert funkciót.
Továbbra is regisztrálni és indítsa el a szolgáltatást, és hogy hozzanak autostart minden felhasználói alkalmazás.
Minden. Most, miután a felhasználó lépett be az első számítógép a rajt után, és megnyomta a Win + A, ülésén le van tiltva, és kap egy felhasználói választás ablakban. Belép a második felhasználó megnyomja a Win + A - Megjelenik az első felhasználói munkamenet. És így tovább. D.
GitHubról, láthatjuk a forráskódot. Vagy lehet letölteni a teljes projekt, és összeállított és készen áll a futtatható fájlokat.