Variablen einlesen, trotz verstecktem Fenster



  • Hi Forum-Community,

    folgendes Problem:
    Ich möchte ein Programm schreiben (in C++) welches es ermöglicht eine Variable einzulesen, wobei das Konsolenfenster allerdings nicht sichtbar sein sollte.
    Das ganze soll so funktionieren, dass das Programm eine erleichterte Bedienung ermöglichen soll. D.h. ich möchte z.B. ein Backupprogramm (oder was auch immer) einfach über ein Tastenkürzel oder eine art "codewort" aufrufen.
    Ist so etwas möglich und wenn ja wie?

    mfg
    dachristoph 😕



  • Ja, keyboard hooks.
    Simon


  • Administrator

    Nicht mit Standard C++. Da musst du dich einer platformspezifischen API bedienen. Auf Windows über die WinAPI, entweder, wie theta schrieb, über einen Keyboard Hook oder womöglich über Hotkeys.
    Auf Linux oder Mac wüsste ich nicht, wie man sowas macht.

    Wie auch immer, in allen Fällen definitiv im falschen Forum gefragt 😉

    Grüssli



  • mh, ok danke erst mal. sry, wusst ich vorher nicht.
    Hab allerdings irgendwo gelesen, dass es auch möglich ist in bestimmten Intervallen zu überprüfen welche Tasten gerade gedrückt sind und welche nicht. Habe dazu leider bis jetzt nicht mehr gefunden. Wisst ihr da etwas darüber?


  • Administrator

    dachristoph schrieb:

    Hab allerdings irgendwo gelesen, dass es auch möglich ist in bestimmten Intervallen zu überprüfen welche Tasten gerade gedrückt sind und welche nicht. Habe dazu leider bis jetzt nicht mehr gefunden. Wisst ihr da etwas darüber?

    Solche Möglichkeiten gibt es allerdings, dass nennt man im grossen und ganzen allerdings Polling. Und Polling ist ein sehr schlechtes Verfahren, da man unnötige Ressourcen verschwendet. Es macht ja auch viel mehr Sinn, wenn man dem OS mitteilt, dass es einem benachrichtigen soll, wenn etwas passiert, statt es immer zu fragen 😉

    Aber auch diese Möglichkeit ist Platformabhängig. Standard C++ hat keine Ahnung was eine Tastatur oder sonstige Eingabegeräte sind 😉

    Grüssli



  • ok...ne Frage:

    das müsste doch funktionieren...

    SHORT GetKeyState(int nVirtKey); 
    
    int main(int argc, char *argv[])
    {
    
    char var;
    
    int nVirtKey=97;
    int blub;
    
    blub = GetKeyState(nVirtKey);
    printf("%d", blub);
    system("PAUSE");
    return 0;
    }
    

    Also das Programm müsste mir doch ausgeben ob, wenn es ausgeführt wird gerade die Taste a (=97 in ASCII) gedrückt wird...oder nicht?



  • also laut msdn sollte bei dieser Funktion bei einem KEY_DOWN, also wenn die entsprechende Taste gedrückt wird 1 zurück gegeben werden und ansonst 0. Bei mir wird jedoch immer 0 zurückgegeben. Fehlermeldung gibt es keine.
    Oder hab ich da was falsch verstanden??



  • Hallo

    Dein Programm überprüft nur genau einmal beim Programmstart, ob die Taste gedrückt wird. Da du sicher nicht exakt diesen Moment erwischt, gibt dein Programm immer 0 aus.
    Du must immer wieder die Überprüfung ausführen (Endloschleife, Thread), und genau dieses Verhalten wurde ja schon als ineffizient genannt.

    Wenn du wirklich so ein Tool brauchst dnan nimm ein bereits schon vorhandenes. Google findet bestimmt 100e von passenden.
    Wenn du dagegen programmieren lernen willst, dann lern lieber erstmal die Grundlagen. Das was du vorhast ist nicht mit ein paar kopierten Zeilen gelöst.

    bis bald
    akari


Anmelden zum Antworten