tasten hooken
-
Hi,
ich habe eine frage was denn auch sonst :D?
Ich will eine Abfrage machen ob tasten geklickt werden.
Also z.b wenn ich A klicke soll eine MessageBox kommen ABER
das A soll nicht abgefangen werden also das soll dann auch noch geschrieben werden.
Ich habe das erst mit RegisterHotkey gemacht und das sah dann so aus.if(pMsg->wParam==GlobalAddAtom("A"))
unregister();
::keybd_event(0x41, 0, 0, NULL);
::keybd_event(0x41, 0, KEYEVENTF_KEYUP, 0);Aber das problem ist wenn ich den hook dann in einem spiel an habe
also z.b in einem Egoshooter dann kann ich nicht laufen wenn ich auf A klicke
weil wenn ich länger auf a bleibe geht das net.
Desswegen will ich das irgendwie machen das es das A nicht abfängt.
geht das irgendwie?
-
Moin,
ich würd dazu spontan PreTranselateMessage() nehmenBOOL CTextDlg::PreTranslateMessage(MSG *pMsg) { if (pMsg->message == WM_KEYDOWN) { // zur Verhinderung des Schließens über ESC if (pMsg->wParam == 'A') { MessageBox("hallo"); } } return CDialog::PreTranslateMessage(pMsg); }
-
gut danke so habe ich es mir vorgestellt

-
geht doch nicht so wie ich will

wenn der focus auf einem anderen fenster is geht es nicht.
Am anfang ging es irgendwie
-
Versuchs mal mit GetAsyncKeyState().
-
hm geht auch nur wenn mein programm im vordergrund ist

-
nö, bei mir gehts auch so.
-
dann poste bitte mal dein stück code
-
Ups, hatte auch nur den ersten Teil deines ersten beitrages durchgelesen, PreTranselateMessage() funzt so weit ich weiss auch nur wenn, der Focus auf deinem Programm liegt
-
ne bei onhotkey gehts

ich habe jetzt immer noch keine lösunge :((
-
Ist ein konsolenprogramm, must du dir also erst noch ein bischen abändern:
#include <iostream.h> #include <windows.h> void key(int *ScanCode, BOOL *own); void main(void) { for (;;) { int scan = 0; BOOL down = FALSE; key(&scan,&down); if (scan != 0) { if (down == TRUE) cout << "Taste: " << (char)scan << " gedrueckt" << endl; else cout << "Taste: " << (char)scan << " losgelassen" << endl; } } } void key(int *ScanCode, BOOL *own) { BOOL down[256]; for (int i=0;i<256;i++) { down[i] = 0; } static BOOL old[256] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0}; for (i=0;i<256;i++) { SHORT ret = GetAsyncKeyState(i); if (ret != 0) down[i] = TRUE; else down[i] = FALSE; } for (i=0;i<256;i++) { if (old[i] != down[i]) { *own = down[i]; *ScanCode = i; for (i=0;i<256;i++) old[i] = down[i]; return; } } }[ Dieser Beitrag wurde am 03.05.2003 um 21:44 Uhr von newvet editiert. ]
-
das mit dem abändern sagst du echt dem richtigen
vieleicht schaffe ich das in paar jahren
-
kann mir das bitte mal jemand so umschreiben das ich es bei meiner
dialog anwendung geht :/?