Hotkey; Anfängerfrage

  • Hallo zusammen

    ich weiss, das ist wohl eine Anfängerfrage, dennoch fand ich auch in anderen Foren leider keine Hinweise aufs Problem und bei der deutschen Hilfe-Übersetzung fehlt leider genau dieser Teil zu Hotkeys.

    Ich will gewisse Tastenkombis wie Ctrl+a, Ctrl+c oder Alt+Tab auf F-Tasten legen, dazu verfasste ich folgendes:

    Nun funktioniert das Ganze aber nicht, das Script scheint kurz zu laufen und beendet dann gleich wieder. Leider ist mein Englisch nicht so gut, aber soweit ich es verstand, sollte dies so funktionieren. In einem anderen Forum sah ich dasselbe Beispiel in einem umfangreicheren Script, nur dass eine andere Funktion als Send aufgerufen wurde. Sehr wahrscheinlich liegt der Fehler sehr nahe, aber ich komme hier nicht weiter, ich versuchte schon, eine if-Abfrage zu setzen, das ging aber auch nicht.

    Code
    #if HotKeySet("{F5}", "Markieren") MsgBox F5 gedrückt
    #if HotKeySet("{F6}", "Kopieren") MsgBox F6 gedrückt
    #if HotKeySet("{F7}", "Fensterwechsel") MsgBox F7 gedrückt

    Wäre äusserst froh, wenn mir jemand weiterhelfen könnte, liegt es vielleicht daran, dass man F-Tasten nicht anders belegen darf? Andererseits gehts auch mit anderen Tasten nicht. Auf jeden Fall schonmal Danke für jeden Tipp.

    Gruss aus der Schweiz

    Daniel

    Roli von Gunten

    << Alles Gute kommt von Gunten >>

  • Hallo Chesstiger

    Danke, jetzt funzt das tatsächlich. Ich hatte sowas in diesem anderen Script schon auch gesehen, ging aber davon aus, dass es nichts mit den Hotkeys zu tun hat. Ich dachte, sonst müssten die Hotkeyaufrufe innerhalb der While-Schleife (anstelle von Sleep (20)) eingefügt sein.

    Wenn ich noch nachfragen darf: Heisst das, die Funktion Hotkeyset gibt True aus, solange sie nicht aktiviert wurde oder steht das True für die Abfrage, ob das Script noch läuft, resp. nun an dieser Stelle angekommen ist?

    Aber auf jeden Fall vielen Dank für die Hilfe!

    Roli von Gunten

    << Alles Gute kommt von Gunten >>

  • Mit HotKeySet() registrierst du eine Funktion als Callback Funktion. Eine Callback Funktion wird immer dann aufgerufen, wenn ein Prozess den Befehl dazu gibt. In dem Fall sagst du deinen Betriebssystem mit HotKeySet(), dass es bitte darauf aufpassen soll ob eine bestimmte Taste gedrückt wurde. Wenn das der Fall ist, soll es eben deine Callback Funktion aufrufen. Also das, was du gemacht hast.

    AutoIt räumt nach der Beendigung des eigenes Skriptes für gewöhnlich alles wieder auf. Deine Callback Funktionen fliegen aus den Speicher und stehen nicht mehr zur Verfügung. Das Folge daraus, die Funktionen in deinem Skript reagieren nicht mehr auf deine Tastenanschläge, da dein Programm schon beendet ist. Für dich heißt das dann nur, dass du dein Programm von der Beendigung abhalten musst. Das machst du, wie chesstiger dir bereits mitgeteilt hat, mit einer Schleife.

    Die While Schleife lässt dein Skript am leben, es verhindert die Beendigung. Eine While Schleife beinhaltet normalerweise immer eine Bedingung. Wenn diese Bedingung nicht zutrifft, wird die Schleife abgebrochen. Deswegen steht als Bedingung in der While Schleife auch ein True dabei. Dieses True sagt deiner Schleife, dass die Bedingung wahr ist und sie weiter durchlaufen werden kann. Du hälst also dein Skript bis ins unendliche am Leben.

    Da jeder Prozess aber auch die CPU benötigt (und wir dessen Rechenzeit nicht mit einer nichts tuenden While Schleife fressen wollen), benutzt man für gewöhnlich ein Sleep() um die Ausführungszeit drastisch zu drosseln. Dies gibt die CPU mehr Zeit für andere Prozesse, welche die CPU benötigen.

    Ich hoffe das war verständlich genug erklärt.

  • Ja, das war verständlich genug.

    Ich bedanke mich bei den Herren für die schnelle und ausführliche Hilfe, wirklich grossartig!

    Roli von Gunten

    << Alles Gute kommt von Gunten >>