_ispressed problem mit while schleife

  • Hallo,
    ich habe folgendes Problem mein Script unten der wichtige Teil aufgeführt soll beim Tastendruck von I den Internetexplorer öffnen und beim Tastendruck von M den Mozilla Firefox
    Ich will kein Hotkeyset verwenden!
    theoretisch müsste es doch auch mit _ispressed möglich sein.

    Das Problem das auftritt: Die while schleife überprüft dauerhaft ob die taste gedrückt wird wenn das der fall ist öffnet sich der ie oder mozilla firefox und dann überprüft die while schleife logischerweise weiter nun geht das so schnell das wenn die taste gedrückt wird die schleife 10 mal durchläuft und deshalb das Programm 10 mal startet.
    (das programm starten ist nur ein beispiel ich suche nach einer generellen lösung für dieses problem)

    [autoit]

    #include <Misc.au3>
    $dll = DllOpen("user32.dll")
    While 1
    if _IsPressed("49", $dll) Then
    run("C:\Programme\Internet Explorer\iexplore.exe")
    elseif _IsPressed("4D", $dll) Then
    run("C:\Programme\Mozilla Firefox\firefox.exe")
    endif
    WEnd
    DllClose($dll)

    [/autoit]

    Edit* eine anmerkung
    Ein sleep nach bzw vor dem starten des programmes habe ich schon bedacht nur ist das script länger und dann bekommt es andere _ispressed befehle in dieser zeit nicht mit wenn ich jetzt zum beispiel schnell m,i,t,z schreibe wo bei jeder buchstabe ein neues programm öffnet.

    2 Mal editiert, zuletzt von XNeoX (1. April 2009 um 12:13)

  • hallo erstmal ich würde es so machen:

    [autoit]

    #include <Misc.au3>
    #include <file.au3>
    $dll = DllOpen("user32.dll")
    While 1
    if _IsPressed("49", $dll) Then
    run("C:\Programme\Internet Explorer\iexplore.exe")
    sleep(400)
    elseif _IsPressed("4D", $dll) Then
    run("C:\Programme\Mozilla Firefox\firefox.exe")
    sleep(400)
    endif
    WEnd
    DllClose($dll)

    [/autoit]

    edit...
    wofür hast du eig. file.au3 includet?

  • eine anmerkung
    Ein sleep nach bzw vor dem starten des programmes habe ich schon bedacht nur ist das script länger und dann bekommt es andere _ispressed befehle in dieser zeit nicht mit wenn ich jetzt zum beispiel schnell m,i,t,z schreibe wo bei jeder buchstabe ein neues programm öffnet.

    das ist nur ein teilbereich des scripts drum file include

  • [autoit]

    #include <Misc.au3>
    $dll = DllOpen("user32.dll")
    $time1 = 1
    $time2 = 1
    While 1
    if _IsPressed("49", $dll) Then
    f Timerdiff($time1) < 1000 then
    run("C:\Programme\Internet Explorer\iexplore.exe")
    $time1 = TimerInit()
    endif
    elseif _IsPressed("4D", $dll) Then
    if Timerdiff($time1) < 1000 then
    run("C:\Programme\Mozilla Firefox\firefox.exe")
    $time1 = TimerInit()
    endif
    endif
    WEnd
    DllClose($dll)

    [/autoit]


    nich getestet aber so kann jedes programm nur jede sec starten

  • funktioniert bei mir überhaupt nicht aber da ist das problem ja wieder das wenn ich schnell m,i hintereinander drücke er das i nicht mitbekommt

  • ohh ich hab mich ja auch verschrieben....
    beim ersten $time1 aber beim zweiten muss $time2 hin sry

  • du musst das so machen glaub ich zumindest

    Code
    #include <Misc.au3>
    If _IsPressed ('49') = 1 Then
    run("C:\Programme\Internet Explorer\iexplore.exe")
    While _IsPressed ('49') = 1
    Sleep(1)
    WEnd
    endif


    ich hab jetzt grad ncih genug zeit das für alle deine dinge zu machen aber so mpsste es funktionieren

    sry ich hatte nen kleinen schreibfehler das while _IsPressed ('41') = 1 muss natürlich While _IsPressed ('49') = 1 heißen habs jetzt verbessert

    Einmal editiert, zuletzt von Sithlord95 (1. April 2009 um 13:01)

  • Was hast du ausgebessert? Die Groß-/Kleinschreibung? Die ist AutoIt egal!

    MfG. tobi_girst

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »tobi_girst« (Morgen, 25:63)

  • denke bis jetzt auch dass Sithlord95s Lösungsweg weiterhelfen sollte, hatte auch schon

    [autoit]

    if _isPressed() then
    ;skript
    while _isPressed()
    sleep(10)
    wend
    endif

    [/autoit]

    geschrieben bis ich dann beim scrollen entdeckt hab, dass er die idee auch schon hatte ... das =1 ist übrigens überflüssig bei seinem weg ;)
    so wird (zumindest theoretisch) das programm pro tastendruck nur einmal aufgerufen. wundert mich aber sowieso, dass autoit nicht erkennt, dass es noch der selbe tastendruck ist.

  • das sollte es sein ^^
    habs hier im forum gebastelt also ned wundern wegen gross klein und hässlichem design ;)

    mfg

    Spoiler anzeigen
    [autoit]

    #include <Misc.au3>
    $dll = DllOpen("user32.dll")
    While 1
    Sleep(1)
    if _IsPressed("49", $dll) Then
    run("C:\Programme\Internet Explorer\iexplore.exe")
    While _IsPressed("49", $dll)
    sleep(1)
    Wend
    elseif _IsPressed("4D", $dll) Then
    run("C:\Programme\Mozilla Firefox\firefox.exe")
    While _IsPressed("4D", $dll)
    sleep(1)
    Wend
    endif
    WEnd
    DllClose($dll)

    [/autoit]
  • aber warum net so?:

    [autoit]

    #include <Misc.au3>
    $dll = DllOpen("user32.dll")
    $time1 = 1
    $time2 = 1
    While 1
    if _IsPressed("49", $dll) Then
    f Timerdiff($time1) < 1000 then
    run("C:\Programme\Internet Explorer\iexplore.exe")
    $time1 = TimerInit()
    endif
    elseif _IsPressed("4D", $dll) Then
    if Timerdiff($time2) < 1000 then
    run("C:\Programme\Mozilla Firefox\firefox.exe")
    $time2 = TimerInit()
    endif
    endif
    WEnd
    DllClose($dll)


    [/autoit]
  • omg

    weill wenn ich bei dir die taste gedrückt behalte der sich tausend mal öffnet! meiner öffnet sich pro klick 1 mal drauf bleibst. naja ned klick eher druck ^^