Onko DJGPP:n funktio kirjastoilla mitenkään mahdollista toteuttaa C:llä sellaista ohjelmaa, mikä ottaisi käyttäjältä ensin muutaman näppäimenpainalluksen ja sitten ohjelma lähettäisi ne käyttöjärjestelmälle.
Esim.
Ohjelman ikkuna aukeaa ja ohjelma kehottaisi syöttämään näppäinjonon. Käyttäjä painaisi näppäimiä: ALT+F4 ESC CRTL+ALT+DEL CRTL+ALT+DEL ja sitten ohjelma kysyisi näppäinpainallusten loputtua, että haluaako käyttäjä suorittaa kyseisen näppäinjonon ja jos käyttäjä valitsee kyllä niin ohjelman oma ikkuna häviää ja tämän näppäinjonon mukaan (olettaen, että mikään ikkuna Windows:ssa ei ole aktiivinen) Windows yritetään sulkea, mutta perutaankin se ja yritetään sitten tehdä pakko sammutus joka onnistuukin...
No pelkästään oman ohjelman sisälläsi se on hieman helpompaa. Kunhan kirjaat painetut nappulat muistiin.
ctrl+alt+del vaatinee hookin. Näistä linkeistä löytynee tarvittava tieto:
http://www.codeproject.com/system/preventclose.
http://www.codeproject.com/system/KeyHook.asp
http://www.codeproject.com/system/
Joo taidat kyllä tarvita Win32 API:a, jota nuo rutkiksen esimerkki sivut käyttää. Ihmettelen kyllä mihin tarvitset noita CTRL+ALT+DEL juttuja, kun Windowsista löytyy valmiiksi Windowsin-sammutus funktiot? (Juuri tuosta Win32 API:sta)
Tässäpä koneen sammutus XP-koneessa. Anteeksi olematon kommentointi.
#include <windows.h> #include <stdio.h> int main(int argc, char *argv[]) { DWORD ret; HANDLE hProcess; HANDLE hToken; LUID Luid; TOKEN_PRIVILEGES tokenNew,tokenPre; hProcess = GetCurrentProcess(); OpenProcessToken(hProcess, TOKEN_QUERY | TOKEN_ADJUST_PRIVILEGES, &hToken); LookupPrivilegeValue(NULL, SE_SHUTDOWN_NAME, &Luid); tokenNew.PrivilegeCount = 1; tokenNew.Privileges[0].Luid = Luid; tokenNew.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED; AdjustTokenPrivileges(hToken, FALSE, &tokenNew, sizeof(tokenPre), &tokenPre, &ret); int i = ExitWindowsEx(EWX_SHUTDOWN, SHTDN_REASON_MAJOR_APPLICATION); if(i==0){ printf("Eip\x84 onnistunut."); } }
En tiedä sitten onko helpompaa tapaa, koska koodi on kopsittu suoraan netistä aikoinaan.
Windowsin voinee sammuttaa suorittamalla shutdown.exe ohjelman ja logout.exe löytynee myös.
No joo, voihan sen niinkin tehdä :)
CRTL+ALT+DEL oli vain esimerkki näppäinyhdistelmistä...
Ohjelman tarkoitus on siis välittää käyttöjärjestelmään nuo näppäinkomennot.
SendMessage ja PostMessage. Katso vaikka MSDN:stä miten noi toimii. Joku vastaava on näköjään: http://www.codeproject.com/dialog/keystroke.asp
Varmaan tuon sorsista selviää, veikkaan että siellä käytetään just noita apeja, en tosin vaivautunut itse tutkimaan...laiska kun olen...
Aihe on jo aika vanha, joten et voi enää vastata siihen.