abschlussprojekt makrotool schreiben



  • hallo zusammen,

    ich bin dabei meine erste programmiersprache zu lernen (c++ cli)
    und muss nun mein abschlussprojekt machen.

    dies darf ich auch in c# machen, was ich bevorzugen würde 😉

    aber nun zum eigentl. problem:
    ich bin vermutl. nur zu blöd zum suchen 😃 ich möchte maus- und tastaturereignisse per event aufzeichnen AUCH WENN DAS PROG KEINEN FOKUS HAT.

    supi wäre auch wenn es eine möglichkeit gibt, das windows shortcuts während der "aufzeichnung" nicht ausgeführt werden.

    ich muss dazu sagen dass ich bisher nur ein grobes design der gui hab.
    ich wollte mit dem projekt nicht anfangen wenn es für mich vllt. gar nicht machbar ist (da ich nur 2 wochen zeit habe)

    kann mir jmd helfen?



  • Du suchst nach (und später mit) den Begriffen "Mouse Hook" und "Keyboard Hook".
    Hier ein Beispiel: http://www.codeproject.com/Articles/7294/Processing-Global-Mouse-and-Keyboard-Hooks-in-C



  • super vielen dank für die schnelle hilfe 👍
    ich probier es aus

    wenn ich mal so mit "mouse hook" google und sehen was alles für einen
    doch eher kleinen effekt nötig ist, denke ich dass ich es in 2 wochen nicht schaffe ein ganzes macro tool zu schreiben
    das ist wohl für ein neueinsteiger wie mich noch zu heftig 😞



  • Das ist halt sehr plattformspezifisch und (natürlich) nicht im .NET Framework entahlten, deswegen ist der Aufwand relativ hoch. Man muss sich an die Windows API erstmal gewöhnen. Von dem her würde es sich vielleicht anbieten etwas zu schreiben, wo du erstmal nur die Framework Funktionen benutzt.



  • ja das stimmt wohl
    ich werds ohne die hooks machen, dann muss mein prog zwar den fokus haben
    aber es ist mir erstmal ohne weiteres möglich
    den anfang hab ich schon mal ^^

    wenn mir noch genug zeit bleibt werd ich mich mal ran wagen 😉



  • Ich hab einen Weg gefunden ohne Hooks die Mausposition zu bekommen und zu ändern.

    Hier mal ein Ausschnitt:

    private: void getPosition(System::Windows::Forms::KeyEventArgs^  e)
    {
    	if (e->Modifiers == Keys::Shift)
    	{
    		if (e->KeyCode == Keys::F1)
    		{
    			engine->setPoint(13, Control::MousePosition.X, Control::MousePosition.Y);
    			textBoxLog->AppendText("\n");
    			textBoxLog->AppendText("F13 = " + engine->ToString(13));
    		}
    
    		if (e->KeyCode == Keys::F2)
    		{
    			engine->setPoint(14, Control::MousePosition.X, Control::MousePosition.Y);
    			textBoxLog->AppendText("\n");
    			textBoxLog->AppendText("F14 = " + engine->ToString(14));
    
    		}
    

    Auszug aus der Klasse Engine:

    void setPoint(int fn, int x, int y)
    	{
    		int fncount = fn - 1;
    		Point temp;
    		temp.X = x;
    		temp.Y = y;
    
    		fList24[fncount] = temp;
    
    	}
    
    	String^ ToString(int fn)
    	{
    		int fncount = fn - 1;
    		return fList24[fncount].ToString();
    	}
    
    void mouseMove(int i, Cursor^ cursor)
    	{
    		int x = fList24[i].X;
    		int y = fList24[i].Y;
    
    		cursor = gcnew Cursor(::Cursor::Current->Handle);
    		Cursor::Position = Point(x,y);
    
    		//InputSimulator::SimulateKeyPress(VirtualKeyCode::LBUTTON);
    	}
    

    Jetzt hab ich nur das Problem dass ich keinen Mausklick hinbekomme.
    Ich habe schon diverses ausprobiert dass ich über Google gefunden habe,
    aber nichts hat funktioniert 😞

    hat jemand eine Idee?

    P.S. da ich ja nun doch in c++ geschrieben hab, müsste der thread verschoben werden 😃


  • Administrator

    GuckMaDa schrieb:

    P.S. da ich ja nun doch in c++ geschrieben hab, müsste der thread verschoben werden 😃

    Du meinst C++/CLI, aber die Verschiebung kannst du gerne haben.

    Und kennst du diesen Hinweis schon?
    http://www.c-plusplus.net/forum/263084



  • Dieser Thread wurde von Moderator/in Dravere aus dem Forum C# und .NET in das Forum C++/CLI mit .NET verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Dravere schrieb:

    Du meinst C++/CLI, aber die Verschiebung kannst du gerne haben.

    Und kennst du diesen Hinweis schon?
    http://www.c-plusplus.net/forum/263084

    ja meinte ich ^^
    danke

    nein kannte ich noch nicht, aber ich hab nur eine Form, die so weit funzt 😉
    nur am Mausklick haperts extrem 😞



  • hab nach einige Möglichkeiten ausprobiert und endlich ne Lösung gefunden

    für alle die es interessiert:

    Ich habe den "Windows Input Simulator 1.0.4.0 verwendet.

    Die Verion 1.0.0.0 scheint nicht richtig zu funktionieren, die aktuelle Version kann über NuGet-Packetverwaltung nicht erfolgreich installiert werden.
    Mit einem Trick bin ich dann aber doch an die DLL gekommen:
    - c# Projekt erstellen
    - per NuGet installieren
    - im c++ cli Projekt den Verweis auf die DLL einfügen

    und so sieht dann der Code aus:

    void mouseMove(int i, Cursor^ cursor)
    {
    	int x = fList24[i].X;
    	int y = fList24[i].Y;
    
    	cursor = gcnew Cursor(::Cursor::Current->Handle);
    	Cursor::Position = Point(x, y);
    
    	InputSimulator^ mouse = gcnew InputSimulator;
    	mouse->Mouse->LeftButtonClick();
    }
    

Log in to reply