tastendruck aufzeichen
-
um die Tastendrücke in der fremden Anwendung aufzuzeichenen brauchst du wohl einen Keyboard-Hook - "abspielen" sollte sich dann mit keybd_event bzw. SendInput o.ä. machen lassen

-
flenders schrieb:
um die Tastendrücke in der fremden Anwendung aufzuzeichenen brauchst du wohl einen Keyboard-Hook - "abspielen" sollte sich dann mit keybd_event bzw. SendInput o.ä. machen lassen

oh das ist genau was ich brauch;-) kannst du mir vielleicht zeigen wie man die cursor links bzw cursor rechts tasten überprüfen kann wie lange sie gedrückt werden, die leertaste brauch ich auch noch bitte!? das wäre eine große hilfe!
cu

-
Hast du denn schon einen Keyboard-Hook eingerichtet oder zumindest mal das Abfragen innerhalb deiner eigenen Anwendung ausprobiert
-
flenders schrieb:
Hast du denn schon einen Keyboard-Hook eingerichtet oder zumindest mal das Abfragen innerhalb deiner eigenen Anwendung ausprobiert
nö hab ich no nicht!
könnt ihr mir da etwas weiter helfen? was der code für cursor recht u links u leertaste???
ich hab das gefunden aber ich glaub mir fehlt da noch was: ???
http://www.c-plusplus.net/forum/viewtopic.php?t=39383
eine dll fehlt??? kann man das auch ohne dll machen, dass heißt den code von der dll ins programm includieren??? bitte um tipps!!!byebye kornspitz!

-
kornspitz schrieb:
eine dll fehlt???
Nö, deren Code ist auf der von dir verlinkten Seite auffindbar.
kornspitz schrieb:
kann man das auch ohne dll machen, dass heißt den code von der dll ins programm includieren???
Nein, das geht nicht, da sich die DLL in jeden Prozess, der Keyboardnachrichten empfängt "reinschleichen" muss. Sowas geht nur mit DLLs.
-
Nö, deren Code ist auf der von dir verlinkten Seite auffindbar.
aso, ok.......wie schaut dann so ein hauptprogramm aus, der die dll verwendet?
ich bin noch immer auf der suche nach den codes für cursor recht und links bzw leertaste?Nein, das geht nicht, da sich die DLL in jeden Prozess, der Keyboardnachrichten empfängt "reinschleichen" muss. Sowas geht nur mit DLLs.
ok, bäuchte ich ja nicht aber egal, da ich nur die keyboardnachrichten eines bestimmten fensters verarbeite....aber ich lass das lieber mal so wies ist!
bye

-
cursor links: 37
cursor rechts: 39
leertaste: 32
das weiß ich schon!!!aber ich brauch noch ne hilfe beim hauptprogramm!!! wie ich da die nachrichten aus der dll empfangen kann? ist das hauptprogramm aus von der dll irgendwo hier versteckt?
bye
-
kornspitz schrieb:
cursor links: 37
cursor rechts: 39
leertaste: 32
das weiß ich schon!!!aber ich brauch noch ne hilfe beim hauptprogramm!!! wie ich da die nachrichten aus der dll empfangen kann? ist das hauptprogramm aus von der dll irgendwo hier versteckt?
bye
du bekommst jedes mal wenn eine taste gedrückt die nachricht (WM_USER + 2) an dein prog gesendet, in wParam steht dann der Tastencode der gedrückten taste.
-
du bekommst jedes mal wenn eine taste gedrückt die nachricht (WM_USER + 2) an dein prog gesendet, in wParam steht dann der Tastencode der gedrückten taste.
aha, danke der info! wo findet man das hautprogramm von der dll in der faq?? das würd ich noch gerne habn, als anhaltspunkt!!! sonst danke!!
bye
-
http://www.winapi.net/index.php?inhalt=tipp1
Und dann in WndProc einfach noch WM_USER + 2 abfangen

-
flenders schrieb:
http://www.winapi.net/index.php?inhalt=tipp1
Und dann in WndProc einfach noch WM_USER + 2 abfangen

oh danke;-) das ist das main programm von der dll? hast du dich vielleicht verpostet?*g*
bye
-
Nein, dass ist der Code für die exe - aber du solltest dich wohl besser zuerst mal etwas mit den Grundlagen beschäftigen

-
flenders schrieb:
Nein, dass ist der Code für die exe - aber du solltest dich wohl besser zuerst mal etwas mit den Grundlagen beschäftigen

code für exe? eher code irgendeines winapi programmes wie man ein fenster erstellen kann! glaub mir die grundlagen für das zum programmieren hab ich, vielleicht fehlen mir die grundlagen zu hook, wenn du das meinst!??
ok als nextes muss ich wissen, wie man eine "keymessage" zu einem beliebigen fenster schicken kann, damit der skifahrer automatisch gelenkt wird.....kannst du mir da paar tipps geben??
bye

-
kornspitz schrieb:
code für exe? eher code irgendeines winapi programmes wie man ein fenster erstellen kann! glaub mir die grundlagen für das zum programmieren hab ich, vielleicht fehlen mir die grundlagen zu hook, wenn du das meinst!??
Du brauchst ja eigentlich auch nur ein WinAPI-Programm mit einer MessageProc in der du die genannte Nachricht abfängst - ist ja ansonsten nichts besonderes

kornspitz schrieb:
ok als nextes muss ich wissen, wie man eine "keymessage" zu einem beliebigen fenster schicken kann, damit der skifahrer automatisch gelenkt wird.....kannst du mir da paar tipps geben??
flenders schrieb:
"abspielen" sollte sich dann mit keybd_event bzw. SendInput o.ä. machen lassen

Du musst vorher wohl noch den Fokus auf das entsprechende Fenster setzen bzw. dieses in den Vordergrund holen (sollte mit SetForegroundWindow o.ä. machbar sein)
-
ich komm da nit ganz zurecht;-(
#include <windows.h> LRESULT CALLBACK WndProc (HWND, UINT, WPARAM, LPARAM); int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow) { // gdiplus.dll laden: HINSTANCE hLib = LoadLibrary("hookdll.dll"); if(hLib == NULL) { MessageBox(NULL,"Fehler: hookdll.dll konnte nicht geladen werden !","error", 0); return 0; } static TCHAR szAppName[] = TEXT ("Klassenname"); HWND hwnd; MSG msg; WNDCLASSEX wndclassex = {0}; wndclassex.cbSize = sizeof(WNDCLASSEX); wndclassex.style = CS_HREDRAW | CS_VREDRAW; wndclassex.lpfnWndProc = WndProc; wndclassex.cbClsExtra = 0; wndclassex.cbWndExtra = 0; wndclassex.hInstance = hInstance; wndclassex.hIcon = LoadIcon (NULL, IDI_APPLICATION); wndclassex.hCursor = LoadCursor (NULL, IDC_ARROW); wndclassex.hbrBackground = (HBRUSH) GetStockObject (WHITE_BRUSH); wndclassex.lpszMenuName = NULL; wndclassex.lpszClassName = szAppName; wndclassex.hIconSm = wndclassex.hIcon; if (!RegisterClassEx (&wndclassex)) { MessageBox (NULL, TEXT ("RegisterClassEx fehlgeschlagen!"), szAppName, MB_ICONERROR); return 0; } hwnd = CreateWindowEx (WS_EX_OVERLAPPEDWINDOW, // erweiterter Fensterstil szAppName, // Name der Fensterklasse TEXT ("Fenstertitel"), // Fenstertitel WS_OVERLAPPEDWINDOW, // Fensterstil CW_USEDEFAULT, // X-Position des Fensters CW_USEDEFAULT, // Y-Position des Fensters CW_USEDEFAULT, // Fensterbreite CW_USEDEFAULT, // Fensterhöhe NULL, // übergeordnetes Fenster NULL, // Menü hInstance, // Programm-Kopiezähler (Programm-ID) NULL); // zusätzliche Parameter ShowWindow (hwnd, iCmdShow); UpdateWindow (hwnd); while (GetMessage (&msg, NULL, 0, 0)) { TranslateMessage (&msg); DispatchMessage (&msg); } // Aufräumen: FreeLibrary(hLib); return msg.wParam; } // Die Hauptnachrichtenschleife LRESULT CALLBACK WndProc (HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; switch (message) { case WM_CREATE: return (0); case WM_PAINT: hdc = BeginPaint (hwnd, &ps); TextOut (hdc, 0, 0, "Hallo, ich bin ein Fenster!", 27); EndPaint (hwnd, &ps); return (0); case WM_DESTROY: PostQuitMessage (0); return (0); } return DefWindowProc (hwnd, message, wParam, lParam); }wie kann ich die Tastencode der gedrückten taste da hier? das soll in wParam stehn aber wo kann ich das holen? wie kann ich eigentlich dann die zeit wie lange auf eine bestimmte taste gedrückt wird messen???
byeeee

-
Um die Message zum Hook abzufangen must du ein case WM_USER+2 einfügen und dort die Message bearbeiten - an die Zeit kommst du so direkt gar nicht!
Außerdem musst du zuerst noch den Hook mit SetupHook einrichten - dazu am einfachsten die lib der dll mit linken.
-
flenders schrieb:
Um die Message zum Hook abzufangen must du ein case WM_USER+2 einfügen und dort die Message bearbeiten - an die Zeit kommst du so direkt gar nicht!
Außerdem musst du zuerst noch den Hook mit SetupHook einrichten - dazu am einfachsten die lib der dll mit linken.wo frage ich case WM_USER+2 ab??? hilf mir mal da!!! das ich dann auf die gedrückte taste komme!??
Reicht das nicht wenn ich die dll lade??? wie mach ich das mit setupHook???

bye
-
kornspitz schrieb:
wo frage ich case WM_USER+2 ab???
in switch (message)
kornspitz schrieb:
Reicht das nicht wenn ich die dll lade??? wie mach ich das mit setupHook???
Nein, du musst den Hook über die in der DLL exportierte Funktion erst einrichten

-
@flenders: kannst du mittn einrichten mir mal helfen!! ich schaff das glaubi net *g* verdammt!! so ein grundgerüst wär fein!
bye
-
1.) Adresse zu der SetupHook-Funktion aus der DLL (entweder über linken der lib von der dll und einbinden des header-files, oder LoadLibrary/GetProcAddress) besorgen
2.) Window-Handle, des zu überwachenden Fensters ermitteln - FindWindow(Ex)
3.) SetupHook mit dem ermittelten Fenster-Handle aufrufen
4.) in deiner WndProc (WM_USER+2) abfangen - so wie WM_CREATE oder WM_DESTROY
5.) Wenn du den Hook nicht mehr benötigst mit UninstallHook lösen