tastendruck aufzeichen



  • 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


Anmelden zum Antworten