Kirjautuminen

Haku

Tehtävät

Keskustelu: Ohjelmointikysymykset: C++: Virtuaali näppäimistö?

Sivun loppuun

dungeon86 [01.02.2005 12:38:42]

#

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...

rutkis [02.02.2005 09:53:47]

#

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.asp
http://www.codeproject.com/system/KeyHook.asp
http://www.codeproject.com/system/alt_control_delete.asp

esakom [02.02.2005 12:33:07]

#

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)

Juice [02.02.2005 18:45:00]

#

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.

Linkku [02.02.2005 19:35:14]

#

Windowsin voinee sammuttaa suorittamalla shutdown.exe ohjelman ja logout.exe löytynee myös.

Juice [03.02.2005 19:13:59]

#

No joo, voihan sen niinkin tehdä :)

dungeon86 [04.02.2005 14:18:00]

#

CRTL+ALT+DEL oli vain esimerkki näppäinyhdistelmistä...
Ohjelman tarkoitus on siis välittää käyttöjärjestelmään nuo näppäinkomennot.

esakom [04.02.2005 14:32:16]

#

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...


Sivun alkuun

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta