DoubleClick lässt Programm hängen

  • Guten Tag,

    ich habe ein Programm erstellt, das nach Klicken auf bestimmte Zeichen in einem Label dieses Zeichen nach Notepad sendet. Das funktioniert auch, allerdings bleibt nach Doppelklicken das Programm hängen und muss abgebrochen werden.

    Ich habe verschiedenes probiert: DblClick_For_Each_Ctrl.au3, SendKeyDelay, MouseClickDelay, Timer... ohne Ergebnis.

    Folgend ein Auszug aus dem MessageLoop.

    Weiß jemand Rat? Dieter Janzen

    While 1 ;Message Loop
    $msg = GUIGetMsg(1)
    Select
    Case $msg[0] = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg[0] = $Hilfe1
    MsgBox(0,"","Hilfe: kommt noch / " & $MainApp)
    Case $msg[0] = $Label1
    SendToNotepad($msg[3],$MainApp)
    EndSelect
    WEnd

    Einmal editiert, zuletzt von HDJanzen (31. Januar 2011 um 12:00)

    • Offizieller Beitrag

    Zeig mal bitte dein ganzes Script, mit dem Codeschnipsel kann man nichts anfangen.
    Im Schnipsel liegt der Fehler nicht.

  • Danke für die schnelle Antwort. Ich habe das Programm reduziert, es ist zwar jetzt ziemlich sinnlos, aber es zeigt das Problem. Achtung: zum Testen muss Notepad laufen.

    Dieter Janzen

    AutoItSetOption("MustDeclareVars", 1 )
    #include <GUIConstantsEx.au3>
    #include <StaticConstants.au3>
    #include <WindowsConstants.au3>
    Global $Form1, $Label1, $msg, $MainApp = "Untitled - Notepad", $Mainstring = "1"
    $Form1 = GUICreate("Test", 750, 74, 133, 33, BitOR($GUI_SS_DEFAULT_GUI,$DS_MODALFRAME), BitOR($WS_EX_TOPMOST,$WS_EX_WINDOWEDGE))
    $Label1 = GUICtrlCreateLabel($Mainstring, 20, 16, 700, 24, $SS_SUNKEN)
    GUISetState(@SW_SHOW)
    While 1 ;Message Loop
    $msg = GUIGetMsg(1)
    If $msg[0] = $GUI_EVENT_CLOSE Then
    ExitLoop
    EndIf
    If $msg[0] = $Label1 Then
    SendToNotepad($msg[3],$MainApp)
    endif
    WEnd
    Func SendToNotepad($i,$App)
    Local $j, $s
    $j = ($i-25)/22.129 + 1
    $j = round($j,0)
    $j = $j * 2 - 1
    $s = StringMid($MainString, $j,1)
    WinActivate($App)
    WinWaitActive($App)
    Send($s, 1)
    EndFunc

  • Hi!

    Nutzt du dein OS auf Englisch?
    Wenn nicht änder bitte "Untitled - Notepad" in "Unbenannt - Editor" und in der schleife ExitLoop zu verwenden ist nicht ganz nachvollziehbar.
    Nutz für deine Codedarstellung Spoiler und AutoIt Tag.

    Spoiler anzeigen
    [autoit]

    ; Hir kommt der Code rein ; )

    [/autoit]

    Lg Kleiner

  • Ich denke, der Fehler passiert so:

    Der erste Klick ruft die Funktion auf
    Dann wird das Notepad-Fenster aktiviert
    Der zweite Klick aktiviert wieder das eigene Fenster
    deswegen wartet WinWaitActive vergeblich...

    Probier mal

    [autoit]

    Func SendToNotepad($i, $App)
    Local $j, $s
    $j = ($i - 25) / 22.129 + 1
    $j = Round($j, 0)
    $j = $j * 2 - 1
    $s = StringMid($Mainstring, $j, 1)
    ControlSend($App, "", "Edit1", $s)
    EndFunc

    [/autoit]

    E

  • Hallo

    deine Variable $s enthält keinen Text. Wenn ich deine func so umschreibe:

    [autoit]

    Func SendToNotepad($i, $App)
    Local $j, $s
    $j = ($i - 25) / 22.129 + 1
    $j = Round($j, 0)
    $j = $j * 2 - 1
    $s = StringMid($Mainstring, $j, 1)
    ConsoleWrite($s & @crlf)
    $s = "Test"
    ControlSend("[CLASS:Notepad]","","Edit1",$s)
    EndFunc ;==>SendToNotepad

    [/autoit]

    läuft es bei mir einwandfrei. Üner die Class gehe ich weil mein Editorfenster "Unbenannt - Editor" heisst,

    mfg autoBert

    • Offizieller Beitrag

    1. Post editieren und den Suffix auf gelöst setzen.

  • Hab nochmal ne Komplettversion erstellt, weil ich mich frage, warum du die Daten nicht direkt so sendest - vllt. ists ja hilfreich. ;)

    [autoit]

    #include <GUIConstants.au3>
    #include <StaticConstants.au3>

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

    $gui = GUICreate("Test", 750, 74, 133, 33)
    $label = GUICtrlCreateLabel("A", 20, 16, 700, 24, $SS_SUNKEN)

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

    GUISetState(@SW_SHOW)

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

    While (True)
    $msg = GUIGetMsg()
    Switch $msg
    Case $label
    ControlSend("[CLASS:Notepad]", "", "Edit1", GUICtrlRead($msg))
    Case $GUI_EVENT_CLOSE
    Exit
    EndSwitch
    WEnd

    [/autoit]