Script mit Tasten STARTEN und beenden...

  • [autoit][/autoit][autoit][/autoit][autoit]

    HotKeySet("{ESC}", "Programmbeenden")

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    sleep("5000")

    [/autoit][autoit][/autoit][autoit]

    while 1

    [/autoit][autoit][/autoit][autoit]

    ; blabla...

    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    Func Programmbeenden()
    Exit
    EndFunc

    [/autoit][autoit][/autoit][autoit][/autoit]

    1.) Also das obrige Schema funktioniert leider NUR wenn ich mich auf dem Destop befinde... also wenn ich eine Anwedung wie office aktiv habe dann funktioniert das mit dem abbrechen mit der Taste nicht mehr... kann man das irgendwie " global " machen das er immer abbricht z.b mit der F5 taste egal in welchen Programm er ist.

    2.) Es wäre auch sehr nett wenn man mit der Taste F6 ein script starten kann ( was ich vorgebe ) und zwar auch wieder wenn ich eine x beliebige aktiv habe...

  • vielen dank für die antworten, ich würde das gern alles im Autoit lösen wenns geht ohne noch ein weiteres Programm zu verwenden aber danke für den tip,

    zum 2

    läuft super thx ;) das sollte eigentlich standartmässig mit dem hotkey so funktionieren finde ich...

    Jetzt fehlt dann noch immer der teil wie man ein autoit script mit einer tastendruck startet... ;) hat wer vl auch ne Lösund dazu ?

    Einmal editiert, zuletzt von Bullz (29. Februar 2008 um 22:44)

  • Hallo

    Schau dir mal HotKeySet in der Hilfe an.

    Mfg Spider

    ja habe ich gelesen, da steht aber nie was davon wie man ein Script startet aus Tastendruck sondern nur das man bei laufenden Programm mit einem Tastendruck etwas auslösen kann

  • Spoiler anzeigen
    [autoit]

    HotKeySet("{F1}", "_run")

    [/autoit] [autoit][/autoit] [autoit]

    Func _run()
    run("SCRIPTPFAD", "", @SW_SHOW)
    EndFunc

    [/autoit]

    Damit kannste halt aus einem Script ein anderes starten.

    1.) diese Idee kam mir auch, aber dieses hotkeyset funktioniert bei mir nicht wenn ich gerade eine Anwendung aktiv habe... das _ispressed funktioniert immer.. kann man das Programm so umschreiben das es mit ispressed geschrieben ist ? Dann würde neamlich alles passen

    2.)

    [autoit][/autoit][autoit][/autoit][autoit]

    #include <Misc.au3>
    $dll = DllOpen("user32.dll")

    [/autoit][autoit][/autoit][autoit]

    while _IsPressed("1B", $dll)
    sleep(1000000)
    wend

    [/autoit][autoit][/autoit][autoit][/autoit]

    so wies hier steht ist die Bedienung ja genau so lange erfüllt solange ich die ESC Taste dauegedrückt halte, wie kann ihm aber sagen das er EBEN es genau negieren soll. Bei einem Druck auf die ESC soll er aus der while schleife gehen und damit das Programm beenden...

  • zu 1.)

    [autoit][/autoit][autoit][/autoit][autoit]

    while 1
    if _IsPressed("1B", $dll) Then
    run("script", "", @SW_SHOW)
    sleep(2000)
    EndIf

    if _IsPressed("20", $dll) Then
    ;zerstöre das script das oben gestartet wurde
    ;ka wie man das kann ausser auf das x klicken ;)
    EndIf

    WEnd

    [/autoit][autoit][/autoit][autoit][/autoit]

    das ding würde immer funktionieren... leider weiss ich nicht wie ich ein anderes autoitscript das lauft terminieren kann... wenn das funktioniert dann bräuchte ich Punkt 2 gar nicht mehr, will es aber trotzdem wissen. Will nicht dumm sterben hehe

  • z.b. mit processclose oder winkill kannst du programme terminaten ;)

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>
    $dll = DllOpen("user32.dll")
    $scriptrun = "yep"

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    sleep(100)
    If _IsPressed("1B", $dll) and $scriptrun = "yep" Then
    $scriptrun = "no"
    run("script", "", @SW_SHOW)
    EndIf

    If _IsPressed("20", $dll) Then
    ProcessClose("programmname.exe")
    EndIf
    wend

    [/autoit]

    IsPressed drückt die taste ja 11325235 tausend mal wie du ja vermutlich schon gemerkt hast beim starten eines scripts ;). So kannst du es z.b. simpel umgehen, das ers nur 1x startet, ohne einen sleep von 2000 zu verwenden. :)

    p.s. mit exitloop geht man aus der schleife ;)

  • Das hier wäre auch noch eine Alternative zum setzen des Start-Hotkey ... ;)

    [autoit]

    ; Sets a shortcut with ctrl+alt+t hotkey
    FileCreateShortcut(@ScriptDir & '\Script.exe', _ ; Pfad zu deiner *.exe
    @DesktopDir & '\Script.lnk', _ ; Name der Verknüpfung
    @ScriptDir, _ ; Working Dir (optional)
    '', _ ; zusätzliche Argumente (optional)
    'Dies ist mein Hotkey-Hook;-)', _ ; Kommentar (optional)
    @ScriptDir & '\Script.exe', _ ; Icon (optional)
    '^!t', _ ; HotKey !!! (optional)
    '0', _ ; Iconnummer (optional)
    @SW_MINIMIZE) ; Fensterstatus (optional)

    [/autoit]

    Gruß
    Greenhorn


  • uiia ;) bin mittlerweile selber auf die Lösung draufgekomme aber schön das sich hier Leute so um einen bemühen...

    ja ich habe Probleme mit dem Tastendrücken da das ganz komisch ist, und das habe ich dann auch mit nem sleep(2000 ) befehl entschärft, werd jetzt mal das reinstellen was ich fabriziert habe...

    [autoit]


    #include <Misc.au3>
    $dll = DllOpen("user32.dll")
    sleep(1000)

    [/autoit][autoit][/autoit][autoit]

    while 1
    if _IsPressed("70", $dll) Then
    run("nekrodamreg.exe", "", @SW_SHOW)
    sleep(2000)
    EndIf

    [/autoit][autoit][/autoit][autoit]

    if _IsPressed("71", $dll) Then
    ProcessClose("nekrodamreg.exe")
    $PID = ProcessExists("nekrodamreg.exe")
    If $PID Then ProcessClose($PID)
    ;sleep(2000)
    EndIf

    [/autoit][autoit][/autoit][autoit][/autoit]

    edit:

    blubbstar

    Deine idee ist genial, werde das gleich mal testen

    Greenhorn

    Ich habe echt keine Ahnung was ich mit diesem Monster anfangen soll, filecreateshortcut habe ich in der hilfe nachgeschlagen, keine Ahnung was man damit machen kann und was das bezwecken soll...

    1. ) Was natürlich mich ein wenig nerft ist das ein script laufen muss das dann andere scripte aufruft und terminiert... würde das nicht in ein normales autoitscript passen ? Das wäre doch nen hit, wieviele Leute verwenden das script als arbeitserleichterung und wenn man per Knopfdruck easy aus und einschalten kann hat sicher jeder was davon....

    2.)

    [autoit]

    while _IsPressed("1B", $dll) Then
    ;XXX
    Wend

    [/autoit]

    die Frage ist noch nebenher offen, wie negiere ich die bedindung das er nur bei Knopfdruck rausgeht ?

    edit:2

    wollte nur mein Programm hier posten, das rennt wie schwein ;) perfekt da kannst drücken wie du willst hehe. Die oberen 2 Punkte stehen aber trotzdem noch

    [autoit]


    #include <Misc.au3>
    $dll = DllOpen("user32.dll")
    $scriptrun = "yes"
    sleep(1000)

    [/autoit][autoit][/autoit][autoit]

    while 1
    if _IsPressed("70", $dll) AND $scriptrun = "yes" Then
    $scriptrun = "no"
    run("nekrodamreg.exe", "", @SW_SHOW)

    [/autoit][autoit][/autoit][autoit]

    EndIf

    [/autoit][autoit][/autoit][autoit]

    if _IsPressed("71", $dll) Then
    $scriptrun = "yes"
    $Zeit = TimerInit()
    $a = 0
    while $a < 1000
    $a = TimerDiff($Zeit)
    ProcessClose("nekrodamreg.exe")
    $PID = ProcessExists("nekrodamreg.exe")
    If $PID Then ProcessClose($PID)
    WEnd

    [/autoit][autoit][/autoit][autoit]

    EndIf

    [/autoit][autoit][/autoit][autoit]

    WEnd

    [/autoit]

    4 Mal editiert, zuletzt von Bullz (1. März 2008 um 01:43)

  • Zitat

    Greenhorn

    Ich habe echt keine Ahnung was ich mit diesem Monster anfangen soll, filecreateshortcut habe ich in der hilfe nachgeschlagen, keine Ahnung was man damit machen kann und was das bezwecken soll...


    Wer lesen kann ist klar im Vorteil ... :D
    Damit setzt Du einen Hotkey global für dein Script, egal welches Fenster gerade aktiv ist !
    Das ist doch das was Du wolltest, oder etwa nicht !?

    Wenn Du aus den While-Schleifen den Sleep einfach herausnimmst, dann solltest Du deine CPU-Auslastung im Auge behalten ... ;)

    Gruß


  • danke für den Tipp für die CPU Auslastung, deswegen hat mein notebook bei den Lüftern so viel Gas geben... habe bei 0 sleeptime eine CPU Ausleistung von 100 % auf beiden Core, heilige Schesie. Selbst wenn ich 300ms Sleep einbaue komme ich noch immer af 55 % auf beiden Cores. Das darf nicht sein, damit hat sich das Script für mich verabschiedet. Ich meine da gibt es Games im 3d modus die weniger Leistung fressen wie mein 10 Zeiler im Autoit lol ...

    warum ich das Zeugs in der Hilfe nicht verstanden habe ist weil es in Englisch geschrieben ist und ich nie ein Genie in dieser Sprache war, werde es nun mal so probieren, klingt ja so ob das genau das ist was ich suchte...

    nebener punkt2 im oberen Post wäre noch nett, das nerft mich, da fehlt sicher nur irgendwo ein Zeichen das es so klappt wie ich will..

  • Ist sicher auch ne Möglichkeit ;). Aber soweit ich weiss kannst du dann z.b. keinen Hotkey auf "a" o.ä. setzten.

    Zu der Frage ob man das Script ohne anderes Programm starte kann. Z.z. ist mir da keine Lösung bekannt, aber ich denke das wäre auch zu aufwendig.
    Gib deinem Programm einfach ein #notrayicon (nicht mehr unten rechts sichtbar) und setz es in den Autostart (Festplatte:\Dokumente und Einstellungen\Computername\Startmenü\Programme\Autostart). Dann hast du einen Prozess mehr, ich denke den kannst du verkraften ;).


    Edit: Das mit der Auslastung ist wirklich etwas, nunja. Ich komme auch auf 50% Auslastung ohne sleeps. Aber ich habe deutlich größere Programme mit einer Whileschleife, wo mehr IsPressed vorkommen als bei dir. Da komme ich auch 0% Auslastung. Ist etwas seltsam.

    Edit2: Evtl hast du ja den sleep nach Then reingehauen ;). So läufts bei mir mit Auslastung 0%:

    Spoiler anzeigen
    [autoit]


    #include <Misc.au3>
    $dll = DllOpen("user32.dll")
    $scriptrun = "yes"
    sleep(1000)

    [/autoit] [autoit][/autoit] [autoit]

    while 1
    sleep(100)
    if _IsPressed("70", $dll) AND $scriptrun = "yes" Then
    $scriptrun = "no"
    run("nekrodamreg.exe", "", @SW_SHOW)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    if _IsPressed("71", $dll) Then
    $scriptrun = "yes"
    $Zeit = TimerInit()
    $a = 0
    while $a < 1000
    $a = TimerDiff($Zeit)
    ProcessClose("nekrodamreg.exe")
    $PID = ProcessExists("nekrodamreg.exe")
    If $PID Then ProcessClose($PID)
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    WEnd

    [/autoit]
  • Zitat

    nebener punkt2 im oberen Post wäre noch nett, das nerft mich, da fehlt sicher nur irgendwo ein Zeichen das es so klappt wie ich will..

    While ... Then gibt es nicht. If _IsPressed Then ... . ;)

    Gruß