none
Tastatur Makro - programmieren ? RRS feed

  • Frage

  • Mein Vorhaben und gleichzeitig als Übungsprojekt möchte ich eine Art Tastaturmakro-Programm schreiben, das ich dazu verwenden möchte in einer beliebigen "Fremd-Anwendung" Tastatureingaben auszulösen. Z.B. ich drücke in dieser Anwendung die Taste F2 und dies soll z.B. auslösen als ob ich nacheinander die Taste 1 und 2 gedrückt hätte.  (Ich hoffe es ist verständlich was gemeint ist, mit Fremd-Anwendung ist ein Programm gemeint das nicht von mir programmiert wurde, sondern das im Vordergrund läuft)

    Da ich nicht weiß wo ich ansetzen soll, mit welchen Klassen/Methoden etc. ich sowas realisieren könnte, hoffe ich hier auf Hilfe die auch ein VS C++ Anfänger versteht :-), event. mit Beispiel-Code.

     

    Ich hoffe das ich in diesem Forum für mein Anliegen richtig bin, da ich erst seit kurzer Zeit mit Visual C++ (MS VS C++ 2010 Express) angefangen habe, bzw. versuche mit Büchern zu lernen. (Meine bisherigen Programmiererfahrungen liegen weit zurück und dann auch eher im Bereich Cobol, ABAP, oder auch mal Turbo Pascal )

    Herzlichen Dank im Voraus

    Thomas

    Montag, 27. Dezember 2010 16:46

Antworten

  • Du kannst z.B: mit GetAsyncKeyState oder GetKeyboardState den Zustand der Tastatur abfragen und somit Deinen "Hotkey" auslösen.

    Dann kannst Du die Eingaben mittels SendInput an die Anwendung im Vordergrund senden.


    Jochen Kalmbach (MVP VC++)
    Montag, 27. Dezember 2010 17:39
  • Es ist wird Dich nur frusrieren, wenn Du mit C++/CLI anfängst!
    Du macht kein C/C++, sondern C++/CLI!
    Siehe dazu auch:
    http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/

    Fehler 1 error LNK2028: Nicht aufgelöstes Token (0A000011) ""extern "C" short __stdcall GetAsyncKeyState(int)" (?GetAsyncKeyState@@$$J14YGFH@Z<mailto:?GetAsyncKeyState@@$$J14YGFH@Z>)", auf das in Funktion ""int __clrcall main(cli::array<class System::String ^>^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z<mailto:?main@@$$HYMHP$01AP$AAVString@System@@@Z>)" verwiesen wird. C:\Beispiele\Kap04\Tastatureingabe02\Tastatureingabe02.obj
    Fehler 2 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" short __stdcall GetAsyncKeyState(int)" (?GetAsyncKeyState@@$$J14YGFH@Z<mailto:?GetAsyncKeyState@@$$J14YGFH@Z>)" in Funktion ""int __clrcall main(cli::array<class System::String ^>^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z<mailto:?main@@$$HYMHP$01AP$AAVString@System@@@Z>)". C:\Beispiele\Kap04\Tastatureingabe02\Tastatureingabe02.obj
    Fehler 3 error LNK1120: 2 nicht aufgelöste externe Verweise. C:\Beispiele\Kap04\Tastatureingabe02\Debug\Tastatureingabe02.exe 1

    Zu Deinen Fehlern:
    Füge in Deinem Code Folgende Zeile ein:
    #pragma comment(lib, "User32.lib")


    Jochen Kalmbach (MVP VC++)
    Dienstag, 28. Dezember 2010 10:11

Alle Antworten

  • Du kannst z.B: mit GetAsyncKeyState oder GetKeyboardState den Zustand der Tastatur abfragen und somit Deinen "Hotkey" auslösen.

    Dann kannst Du die Eingaben mittels SendInput an die Anwendung im Vordergrund senden.


    Jochen Kalmbach (MVP VC++)
    Montag, 27. Dezember 2010 17:39
  • Hallo Jochen zunächst einmal danke für deine schnelle Antwort.

    Wie ich bereist geschrieben habe, bin ich  Visual C++ Anfänger, und so habe ich einfach deine Methodennamen mit VS C++ 2010 (Express) ein neues Windows Forms-Anwendung kopiert den Cursor darauf positioniert und F1 gedrück.

    Offlinehilfe gabs keine und bei der Onlinehilfe zu z.B. GetAsyncKeyState oder GetKeyboardState, kamen einige Links, aber mit meinem bisherigen Kenntnisstand kann ich da nur raten was da überhaupt zu Visual C++ gehört, oder was nicht. (Oder es gibt einen einfacheren Weg sich bei MSDN oder in MS VS 2010 nach genau dem zu suchen was man braucht und ich verstehe es noch nicht )

    Googeln kann man natürlich auch aber bei fast 20.000 Suchtreffern, empfinde ich das etwas mühsam sich das Richtige auszusuchen.

    Würde mich freuen zu erfahren wie man aus VS heraus optimale Beschreibungen zu Schlüsselwörtern oder Methoden etc. etc. bekommt.

    Im voraus besten Dank

    Thomas

     Mein Code sieht bisher so aus aber leider bekomme ich Fehlermeldungen:

    #include "stdafx.h"
    #include "Form1.h"
    #include <io.h>
    #include <Windows.h>
    #include <WinUser.h>
    using namespace Tastatureingabe02; 
    [STAThreadAttribute]
    int main(array<System::String ^> ^args) 
    {
    // Schleifenanfang - Abfragen ob Taste A gedrückt wurde
    if(GetAsyncKeyState('A') == -32767)
    {
    // Mach etwas
    }
    // Schleifenende
    // Aktivieren visueller Effekte von Windows XP, bevor Steuerelemente erstellt werden
    Application::EnableVisualStyles();
    Application::SetCompatibleTextRenderingDefault(false); 
    // Hauptfenster erstellen und ausführen
    Application::Run(gcnew Form1()); 
    return 0; 
    }

     

    Fehler 1 error LNK2028: Nicht aufgelöstes Token (0A000011) ""extern "C" short __stdcall GetAsyncKeyState(int)" (a href="mailto:?GetAsyncKeyState@@$$J14YGFH@Z">?GetAsyncKeyState@@$$J14YGFH@Z)", auf das in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)" verwiesen wird. C:\Beispiele\Kap04\Tastatureingabe02\Tastatureingabe02.obj
    Fehler 2 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" short __stdcall GetAsyncKeyState(int)" (?GetAsyncKeyState@@$$J14YGFH@Z)" in Funktion ""int __clrcall main(cli::array<class System::String ^ >^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z)". C:\Beispiele\Kap04\Tastatureingabe02\Tastatureingabe02.obj
    FFehler 3 error LNK1120: 2 nicht aufgelöste externe Verweise. C:\Beispiele\Kap04\Tastatureingabe02\Debug\Tastatureingabe02.exe 1

     

    Dienstag, 28. Dezember 2010 07:59
  • Es ist wird Dich nur frusrieren, wenn Du mit C++/CLI anfängst!
    Du macht kein C/C++, sondern C++/CLI!
    Siehe dazu auch:
    http://blog.kalmbach-software.de/de/2010/03/05/ccli-und-winforms-macht-keinen-sinn/

    Fehler 1 error LNK2028: Nicht aufgelöstes Token (0A000011) ""extern "C" short __stdcall GetAsyncKeyState(int)" (?GetAsyncKeyState@@$$J14YGFH@Z<mailto:?GetAsyncKeyState@@$$J14YGFH@Z>)", auf das in Funktion ""int __clrcall main(cli::array<class System::String ^>^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z<mailto:?main@@$$HYMHP$01AP$AAVString@System@@@Z>)" verwiesen wird. C:\Beispiele\Kap04\Tastatureingabe02\Tastatureingabe02.obj
    Fehler 2 error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""extern "C" short __stdcall GetAsyncKeyState(int)" (?GetAsyncKeyState@@$$J14YGFH@Z<mailto:?GetAsyncKeyState@@$$J14YGFH@Z>)" in Funktion ""int __clrcall main(cli::array<class System::String ^>^)" (?main@@$$HYMHP$01AP$AAVString@System@@@Z<mailto:?main@@$$HYMHP$01AP$AAVString@System@@@Z>)". C:\Beispiele\Kap04\Tastatureingabe02\Tastatureingabe02.obj
    Fehler 3 error LNK1120: 2 nicht aufgelöste externe Verweise. C:\Beispiele\Kap04\Tastatureingabe02\Debug\Tastatureingabe02.exe 1

    Zu Deinen Fehlern:
    Füge in Deinem Code Folgende Zeile ein:
    #pragma comment(lib, "User32.lib")


    Jochen Kalmbach (MVP VC++)
    Dienstag, 28. Dezember 2010 10:11