Fenstertittel per Doppelcklick auslesen

  • Hallo zusammen,
    Ich bin recht neu hier und hab gleich mal eine DAU Frage an die Pros.

    Ich möchte den Fensternamen von dem Fenster per Doppelcklick auslesen über dem gerade meine Maus ist.
    Damit ich danach mit einfügen den Namen dann in x beliebige Text Fenster einfügen kann.
    Bis jetzt muss ich immer das "AutoIt v3 Window Info" benutzen und dann den Title rauskopieren voll nervig.

    Das müsste doch irgendwie mit wingettitle funktionieren.
    Könnt Ihr mir weiterhelfen ???

    Danke im voraus

    mfg Rocco

    ;Hier muss irgendwie die Doppelklickfunktion hin(WinGetTitle)

    $fenstername = InputBox("Fenstername","Fenstername eingeben","AutoIt Forum - Deutsch | Portal - Microsoft Internet Explorer","",216, 80,800,200)

    SplashTextOn("Diesen Namen haben sie eingegeben", $fenstername, 216,40,800,200,2, "", 10)

    Sleep(3000)

    SplashOff()

  • doppelklick lässt sich schwer auslesen. Ich habs mal versucht, da wird dann aber auch ein langer Klick als Doppelklick gewertet. Eine Tastenkombination ist sicher besser.

  • Das klingt gut mit der Tastenkombination.
    Vielleicht einfacher als doppelklick.

    Wie muss dann der Script aussehen wenn ich mit der Maus über dem Fenster bin und dann will das der Fenstertitle in den Zwischenscpeicher oder auf die z.B. F2 Taste gelegt wird.

    Kann mir da einer einen Ratschlag geben ?

    mfg Rocco :comp2:

  • sieh dir mal die helpfile an!
    die hat mir schon bei fast allen problemen geholfen, die ist echt gut!

    mfg fisch

    • Offizieller Beitrag

    Hier hast du die Version für Doppelklick:

    Spoiler anzeigen
    [autoit]

    #Include <Misc.au3>
    Global $start
    Global $n = 0
    Global $clickspeed = RegRead("HKEY_CURRENT_USER\Control Panel\Mouse", "DoubleClickSpeed")
    HotKeySet('^e', '_ende')

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

    While 1
    Do
    Sleep(100)
    Until _IsPressed('01')
    $n += 1
    If $n = 2 And (TimerDiff($start) < $clickspeed) Then
    _DblClick()
    $n = 0
    Else
    $start = TimerInit()
    $n = 1
    EndIf
    WEnd

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

    Func _DblClick()
    MsgBox(0, '',(WinGetTitle(''))
    EndFunc

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

    Func _ende()
    Exit
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Nein!
    Wird die in der Registry eingetragene Zeit für Doppelklick überschritten ist es kein Doppelklick.
    - Mausklick -> Zähler+1 -> Zeitmessung starten
    - Wenn Zähler = 2 -> Zeitdifferenz zum ersten Klick feststellen
    - Ist Diff. < Registrywert -> war ein Doppelklick -> Zähler zurücksetzen -> Aufruf Dbl-Klick-Funktion

  • Ja, schon, aber wenn:
    MouseDown
    Check1
    Check2
    MouseUp

    Dann wird das als doppelklick gewertet. (bei mir)


    //Edit: Wenn das Fenster unter dem Mauszeiger nicht aktiv sein soll zum Test, muss man noch ein paar ApiFunktionen verwenden wie hier

    2 Mal editiert, zuletzt von progandy (29. Oktober 2007 um 19:16)

    • Offizieller Beitrag

    Nochmal zum besseren Verständnis.
    Wir nehmen an:
    $clickspeed = 750

    - Maus wird gedrückt -> Zähler+1 ; aktuell 1
    - Prüfe Zähler = 2 -> Nein
    - Else-Zweig -> Starte Zeitmessung -> Zähler = 1

    Schleife von vorn

    - Maus wird gedrückt -> Zähler+1 ; aktuell 2
    - Prüfe Zähler = 2 -> JA
    - Zeitdifferenz ermitteln
    - Differenz < 750 -> das ist ein Doppelklick -> Zähler auf Null
    - Differenz > 750 -> Einfachklick -> Starte Zeitmessung -> Zähler = 1

    Durch das Rücksetzen des Zählers bei Zeitüberschreitung ist garantiert, dass nur 'echte' Doppelklicks gewertet werden.

  • kann ich was dafür, dass das bei mir bei einem langen klick sich so verhält? Also:
    - Maus wird gedrückt -> Zähler+1 ; aktuell 1
    - Prüfe Zähler = 2 -> Nein
    - Else-Zweig -> Starte Zeitmessung -> Zähler = 1

    Schleife von vorn

    - Maus ist immer noch gedrückt -> Zähler+1 ; aktuell 2
    - Prüfe Zähler = 2 -> JA
    - Zeitdifferenz ermitteln
    - Differenz < 750 -> das ist ein Doppelklick -> Zähler auf Null
    - Differenz > 750 -> Einfachklick -> Starte Zeitmessung -> Zähler = 1

    //Ich glaub das wird nichts mehr hier Ich geb mich geschlagen, auch wenns bei mir nicht funktioniert.
    //Edit. Das ist halt die Funktion. Die Checkt, ob gedrückt ist oder war und nicht, ob gedrückt und losgelassen wurde

    //Edit: So, jetzt sollte es gehen. Man muss testen, ob zwischendrin losgelassen wurde:

    Spoiler anzeigen
    [autoit]

    #Include <Misc.au3>
    Global $start
    Global $n = 0
    Global $clickspeed = RegRead("HKEY_CURRENT_USER\Control Panel\Mouse", "DoubleClickSpeed")
    HotKeySet('^e', '_ende')
    Dim $echterDoppel
    While 1
    Do
    If _IsPressed('01') = 0 Then $echterDoppel = True
    Sleep(10)
    Until _IsPressed('01')
    $n += 1
    If $n = 2 And (TimerDiff($start) < $clickspeed) And $echterDoppel Then
    _DblClick()
    $n = 0
    $echterDoppel = False
    Else
    $start = TimerInit()
    $n = 1
    $echterDoppel = False
    EndIf
    WEnd

    Func _DblClick()
    MsgBox(0, '',(WinGetTitle('')))
    EndFunc

    Func _ende()
    Exit
    EndFunc

    [/autoit]

    3 Mal editiert, zuletzt von progandy (29. Oktober 2007 um 19:45)

    • Offizieller Beitrag

    Hallo

    Wo ist das Problem? BugFix's version etwas umgeändert:

    Spoiler anzeigen
    [autoit]

    #Include <Misc.au3>
    Global $start
    Global $n = 0
    Global $clickspeed = RegRead("HKEY_CURRENT_USER\Control Panel\Mouse", "DoubleClickSpeed")
    HotKeySet('^e', '_ende')

    While 1
    IF Not _IsPressed("01") Then ContinueLoop
    While _IsPressed('01')
    Sleep(5);Ist eigentlich unsinnig, da der kleinste Wert 10ms ist (wenn < 10ms dann automatisch auf 10ms schalt)
    WEnd

    $n += 1
    If $n = 2 And (TimerDiff($start) < $clickspeed) Then
    _DblClick()
    $n = 0

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

    $start = TimerInit()
    $n = 1
    EndIf
    WEnd

    Func _DblClick()
    MsgBox(0, '',(WinGetTitle('')))
    EndFunc

    Func _ende()
    Exit
    EndFunc

    [/autoit]

    Mfg Spider

  • Die geht gar net. Ich hab aber gleichzeitig mit dir eine funktionierende geposted aus BugFix's Code. :) Hier nochmal verbessert:

    Spoiler anzeigen
    [autoit]

    #Include <Misc.au3>
    Global $start
    Global $n = 0
    Global $clickspeed = RegRead("HKEY_CURRENT_USER\Control Panel\Mouse", "DoubleClickSpeed")
    HotKeySet('^e', '_ende')
    Dim $echterDoppel
    While 1
    While Not _IsPressed('01')
    $echterDoppel = True
    Sleep(10)
    WEnd
    $n += 1
    If $n = 2 And (TimerDiff($start) < $clickspeed) And $echterDoppel Then
    _DblClick()
    $n = 0
    $echterDoppel = False
    Else
    $start = TimerInit()
    $n = 1
    $echterDoppel = False
    EndIf
    WEnd

    Func _DblClick()
    MsgBox(0, '',(WinGetTitle('')))
    EndFunc

    Func _ende()
    Exit
    EndFunc

    [/autoit]
  • Upps :) Du hast ein Else beim kopieren vergessen. So, dein Code geht doch:

    Spoiler anzeigen
    [autoit]

    #Include <Misc.au3>
    Global $start
    Global $n = 0
    Global $clickspeed = RegRead("HKEY_CURRENT_USER\Control Panel\Mouse", "DoubleClickSpeed")
    HotKeySet('^e', '_ende')

    While 1
    IF Not _IsPressed("01") Then ContinueLoop
    While _IsPressed('01')
    Sleep(5);Ist eigentlich unsinnig, da der kleinste Wert 10ms ist (wenn < 10ms dann automatisch auf 10ms schalt)
    WEnd

    $n += 1
    If $n = 2 And (TimerDiff($start) < $clickspeed) Then
    _DblClick()
    $n = 0
    Else ;; ACHTUNG NICHT VERGESSEN :)
    $start = TimerInit()
    $n = 1
    EndIf
    WEnd

    Func _DblClick()
    MsgBox(0, '',(WinGetTitle('')))
    EndFunc

    Func _ende()
    Exit
    EndFunc

    [/autoit]
  • Hey Leut,
    Ganz dickes Lob an das Forum. :D
    Sau freundlich und sauschnell geholfen.
    Vielen Dank Leute :tongue:

    Ich hoffe ich kann auch in Zukunft mal weiterhelfen.

    So long Rocco

  • Hallo zusammen

    Ich stehe momentan ziemlich auf dem Schlauch...

    Ich versuche das obige Script so zu erweitern, dass es zwischen Einfach-Klick und Doppelklick unterscheidet und entsprechend 2 verschiedene Funktionen aufruft.

    Also : Falls Doppelklick => Aufruf Funktion 1
    Falls Einfach-Klick => Aufruf Funktion 2

    Wie muss ich das Skript abändern, damit bei einem Einfach-Klick die Funktion 1 aufgerufen wird?

    Naja, das tönt jetzt halt ein wenig nach: "Ich-machs-mir-leicht-lass-andere-den-Code-schreiben" aber ich habe momentan wirklich keine Ahnung wie das zu machen ist. :S