Ausführen eines Mausklicks



  • Hallo,

    ich arbeite zur Zeit an einem kleinem Spaß Programm. Es war gedacht meine Maus völlig zu ersetzen. Mit den Pfeiltasten sollte sich die Mausposition steuern lassen und mit Enter ein Klick ausgeführt werden.

    Mein Problem ist nun, das ich es nicht schaffe die aktuelle Position der Maus auszulesen bzw. an die aktuelle Position der Maus einen Klick zu senden.

    Als Anfang hab ich folgenden Code:

    public: void Task_Do() {
            SendMessage(hWnd,WM_LBUTTONDOWN,0,0);
            SendMessage(hWnd,WM_LBUTTONUP,0,0); 
    	}
    

    Doch schon hier hagelt es Meldungen wie nichtdeklarierter Bezeichner etc.
    Ich glaube ich habe hier einen Denkfehler, und bitte euch um mithilfe.

    Danke.



  • Wenn du die Maus ersetzen willst, solltest du SendInput() nehmen.



  • Andere Frage...

    Bewegst Du Dich in der WindowsForms? C++/CLI...

    Dein Code würde gut in die MFC passen.



  • Ja, es ist eine C++ .Net Anwendung und der Code von oben, war halt das einzige was ich gefunden habe.

    Ich habe nun nach der SendInput Funktion gesucht und auch einige Beispiele gefunden, wie z.B.: http://www.codeguru.com/forum/showthread.php?t=377394

    Jedoch ist das nicht .Net und ich finde keine Beispiele bzw. Informationen zu SendInput und .Net. Kann mir das jmd. eine Hilfestellung zum umschreiben geben?



  • SendMessage ist auch nicht .NET sondern native Win32 API.

    Hier die Doku dazu:
    http://msdn.microsoft.com/en-us/library/ms646310(VS.85).aspx

    Das ist auch der Header und die Libbrary angegeben.

    Simon



  • Ok, das Einbinden ist ja kein Problem:

    #pragma comment(lib, "User32.lib")
    #include "Windows.h"
    

    Jedoch hab ich immer noch ein Problem und zwar weiß ich nicht wie ich mit einer WinApi Funktion unter .Net zu Arbeiten habe. Es wird ja folgendes Verlangt:

    UINT SendInput(UINT nInputs, LPINPUT pInputs, int cbSize);
    

    Wie erstelle ich den eine WinAPI variable unter .Net? Bzw. muss ich das überhaupt. Wie gesagt ich kenne mich in der Materie überhaupt nicht aus.



  • Mit C++/CLI kannst du ganz normale C++ Beispiele verwenden. Die Art und Weise wie man da SendInput() aufzurufen hat unterscheidet sich nicht davon, wie man es in "normalen" C++ Programmen machen würde.

    In C# müsstest du PInvoke verwenden, aber wie gesagt: in C++/CLI geht das genau so wie es in C++ auch geht.



  • ok, habs versucht, und es funktioniert, danke nochmal 🙂

    INPUT    Input={0};
    		// left down 
    		Input.type      = INPUT_MOUSE;
    		Input.mi.dwFlags  = MOUSEEVENTF_LEFTDOWN;
    		::SendInput(1,&Input,sizeof(INPUT));
    
    		// left up
    		::ZeroMemory(&Input,sizeof(INPUT));
    		Input.type      = INPUT_MOUSE;
    		Input.mi.dwFlags  = MOUSEEVENTF_LEFTUP;
    		::SendInput(1,&Input,sizeof(INPUT));
    

Anmelden zum Antworten