mouse_event und SetPixel greifen auf verschiedene positionen zu?



  • hi leute
    ich hab ein problem und zwar dass ich hier verschiedene x und y werte eingeben kann, und mein mauszeiger und der gezeichnete pixel stimmen nicht überein, wo liegt der fehler?

    HWND hwin;
        RECT ausmas;
        HDC dc;
        int screenX, screenY;
    
        USHORT x=90, y=90;
        COLORREF col = 0x0;
    
        hwin = FindWindow(NULL,"Rechner");
        dc = GetDC(hwin);
        GetWindowRect(hwin, &ausmas);
    
        screenX=GetSystemMetrics(SM_CXSCREEN);
        screenY=GetSystemMetrics(SM_CYSCREEN);
    
        unsigned int nx=(ausmas.left + x) * (65535 / screenX),
                    ny=(ausmas.top + y) * (65535 / screenY);
    
        mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, nx, ny, 0, 0);
        Sleep(1000);
    
        mouse_event(MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE, 0,0, 0, 0);
        Sleep(1000);
    
        SetPixel(dc,x,y,col);
    

    vielen vielen dank



  • verwende lieber SetCursorPos um den Cursor auf eine bestimmte Position zu bringen.


  • Mod

    Ein DC arbeitet auf Fenster Korrdinaten. Deine Maus auf Bildschirmkoordinaten.
    Du musst also umrechnen. ClientToScreen, ScreenToClient!

    Ansonsten hör auf Melan. Warum den Holzhammer mouse_event benutzen?



  • zum umrechnen fon bildschirmkoordinaten hab ich ausmas genommen

    GetWindowRect(hwin, &ausmas);
    

    und mit

    unsigned int nx=(ausmas.left + x) * (65535 / screenX),
                    ny=(ausmas.top + y) * (65535 / screenY);
    

    es auf das fenster bezogen.

    macht ClientToScreen bzw ScreenToClient nicht das selbe?
    hmm ich hab diese 2 funktionen nur in der mfc gefunden, ich muss mal versuchen ob es nicht ohne auch geht

    vielen dank euch 🙂



  • Martin Richter schrieb:

    Ein DC arbeitet auf Fenster Korrdinaten. Deine Maus auf Bildschirmkoordinaten.
    Du musst also umrechnen. ClientToScreen, ScreenToClient!

    Ansonsten hör auf Melan. Warum den Holzhammer mouse_event benutzen?

    Wer es sich leisten kann, einen Thread für 1 Sekunde auf den Bauch zu legen:
    Nur ein Zuhälter!

    Ein Programmierer nicht. 😮


Anmelden zum Antworten