Daten aus Auswahlliste einzeln mit Mausklick in anderes Programm kopieren

  • Hallo @ all.

    Hab ein Problem und hänge von Anfang an.

    Ich habe mehrere Variable in meinem Prog. Name, VName, Geburtsdatum, Straße, ...

    diese sind als Global verfügbar.

    Ich will nun ein anderes Programm mit der Maus auswählen, in zB das erste Eingabefeld klicken (Links) und mit MausKlick rechts die Auswahlliste öffnen. In der Auswahlliste wähle ich zB. Namen und jetzt soll der Inhalt von Namen in das Eingabefeld kopiert werden.
    Das nächste Feld fülle ich manuell, das übernächste soll wieder aus der Liste ausgewählt werden.
    Kurz, klicke ich ins Eingabefeld mit rechtsklick soll die Auswahl öffnen und der Inhalt der gewählten Variabel eingefügt werden, mit links manuell.
    Hoffe ich habe es verständlich rübergebracht :S
    Liebe Grüße

    p_fekonja

  • Folgende Funktionen dürften dir weiterhelfen:

    [autoit]


    _IsPressed(01) ;Linke-
    _IsPressed(02) ; sowie Rechte Maustaste

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

    WinGetHandle("[ACTIVE]")
    ControlGetFocus(WinGetHandle("[ACTIVE]"))

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

    ControlSend()

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

    WinGetState()
    vielleicht auch
    GUIctrlCreateMenuItem()

    [/autoit]
  • Hallo SEuBo

    Danke für die schnelle Antwort.
    Habe auch an diesen Weg gedacht, und im grundsätzlich läuftes, aber bei RECHTS Klick legt mir WIndows sein Menu drüber ;(

    Wenn ich die mittlere Taste nehme gehts, ist aber nicht so bequem. Werde mal das Prog anhängen (hoffe ich schaffe es)


    Danke

  • Geschafft, man muß nur schauen ;)

    [autoit]

    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #include <Misc.au3>
    Opt('MustDeclareVars', 1)
    Dim $pos[2], $Wpos[2], $dll, $Win
    Local $button3, $button4, $button5, $button6, $button7, $button8, $button9, $button2, $msg
    kopie()
    Func kopie()
    Local $gui, $background, $pic, $basti_stay, $msg2
    Local $sFile = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & "\Examples\GUI\logo4.gif"

    $gui = GUICreate("Background", 400, 100)
    ; background picture
    $background = GUICtrlCreatePic(@SystemDir & "\oobe\images\mslogo.jpg", 0, 0, 400, 100)
    GUISetState(@SW_SHOW)
    Do
    $msg = GUIGetMsg()
    $dll = DllOpen("user32.dll")
    if _IsPressed("04", $dll) then
    $Win=WinGetHandle("[ACTIVE]")
    $Wpos= WinGetPos("[active]")
    $pos = MouseGetPos()
    $gui = GUICreate("Liste", 160, 300, $pos[0]+20, $pos[1]+10)
    ;===== Auswahl
    $Button3 = GUICtrlCreateButton("3 Name ", 4, 3, 150)
    $Button4 = GUICtrlCreateButton("4 Vorname ", 4, 33, 150)
    $Button5 = GUICtrlCreateButton("5 Geburtsdatum ", 4, 63, 150)
    $Button6 = GUICtrlCreateButton("6 Kennnummer", 4, 93, 150)
    $Button7 = GUICtrlCreateButton("7 KennNr. 2 ", 4, 123, 150)
    $Button8 = GUICtrlCreateButton("8 KennNr. Karte ", 4, 153, 150)
    $Button9 = GUICtrlCreateButton("9 Ablaufdatum ", 4, 183, 150)
    GUISetState(@SW_SHOW)
    While 1
    $msg2 = GUIGetMsg()
    Select
    Case $msg2 = $button3
    GUIDelete()
    WinActivate($Win)
    Send("{ESC}")
    Send("MÜLLER")
    ExitLoop
    Case $msg2 = $Button4
    GUIDelete()
    WinActivate($Win)
    Send("{ESC}")
    Send("FRIEDRICH")
    ExitLoop
    Case $msg2 = $Button5
    GUIDelete()
    WinActivate($Win)
    Send("{ESC}")
    Send("21/01/1952")
    ExitLoop
    Case $msg2 = $Button6
    GUIDelete()
    WinActivate($Win)
    Send("{ESC}")
    Send("1833210152")
    ExitLoop
    Case $msg2 = $Button7
    GUIDelete()
    WinActivate($Win)
    Send("{ESC}")
    Send("SSM-556987")
    ExitLoop
    Case $msg2 = $Button8
    GUIDelete()
    WinActivate($Win)
    Send("{ESC}")
    Send("800400000000125847")
    ExitLoop
    Case $msg2 = $Button9
    GUIDelete()
    WinActivate($Win)
    Send("{ESC}")
    Send("30/09/2011")
    ExitLoop
    EndSelect
    WEnd

    endif
    Until $msg = $GUI_EVENT_CLOSE
    DllClose($dll)
    EndFunc

    [/autoit]

    Hoffe Formatierung bleibt jetzt.

    Habe auch nichts gegen Optimierungsvorschläge


    Danke

    p_fekonja

    Einmal editiert, zuletzt von p_fekonja (6. November 2009 um 14:04)

  • na das sieht ja schonmal gut aus. Das deaktivieren des Kontextmenüs geht bestimmt irgendwie über einen DLL aufruf aber von sowas habe ich keine ahnung. Zu deinem Problem mit der rechten Maustaste.. naja
    ich hab mir ein kleines workaround überlegt, aber sehr "sauber" finde ich das nicht. funktionieren tuts trotzdem *g*

    [autoit]


    ...
    if _IsPressed("02", $dll) then
    MouseClick("left",MouseGetPos(0)-10,MouseGetPos(1)) ; <---
    $Win=WinGetHandle("[ACTIVE]")
    $Wpos= WinGetPos("[active]")
    $pos = MouseGetPos()
    ...

    [/autoit]
  • Hallo SEuBo .

    Danke für Deine Hilfe :thumbup: die Lösung funzt (nicht immer) und bis eine andere kommt kann ich damit leben.
    Bin mit dem Ablauf meines Progs noch nicht so ganz schlüssig, vielleicht hast Du ne Idee.

    Ich zeige eine Karteikarte an in welcher die einzelnen Felder stehen. Mit dem Übertragen Button wird die Funktion gestartet und der Anwender kann jetzt mit RECHTS Klick die in der Liste angezeigten Werte in sein Formular kopieren. Da die Formulare sehr unterschiedlich sind, weiss ich nicht wann er/sie fertig ist. Hab jetzt in der Auswahl noch den Button Beenden, aber wenn er/sie nicht beendet und die Funktion ein zweites mal startet stimmen die Daten nicht mehr.


    LG

    p_fekonja

  • Hallo @ alle.

    Danke für eure Hilfe.

    BugFix : das hab ich schon probiert, leider kann ich dann nicht in ein anderes Prog wechseln.

    Sobald ich mit "_MouseSetOnEvent($MOUSE_SECONDARYUP_EVENT, "MouseSecondaryUp_Event")" den rechten Mausklick ausschalte, kann ich nicht mehr das Zielprog auswählen und da will ich ja einfügen, zusätzlich popt mein Menü dann immer nach der Auswahl auf. Ich will aber nur bei RechtsKlick meine Auswahl welche danach wieder verschwinden soll.
    Gibt es nichts so wie _IsPressed() nur halt _IsReleased() ?
    LG
    p_fekonja

  • BugFix



    Selbstverständlich geht das. Du mußt nur zusätzlich das Fensterhandle prüfen und den Hook auf dein Fenster begrenzen.


    wie geht das ? _MouseSetOnEvent($MOUSE_SECONDARYUP_EVENT, "MouseSecondaryUp_Event")


    Danke

    p_fekonja

  • Hallo,

    komme mit hook nicht zurecht.
    Wie kann ich zB. LEFT Klick+SHIFT abfragen? ?(


    Habs gefunden :D . Ist im Moment eine brauchbare Lösung, hab ja noch weitere Probleme.


    p_fekonja

    Einmal editiert, zuletzt von p_fekonja (10. November 2009 um 13:53)

  • komme mit hook nicht zurecht.

    Du musst doch nur den letzen Parameter von MouseSetOnEvent anpassen.
    Ein Beispiel wäre zum beispiel das hier:

    [autoit]


    _MouseSetOnEvent($MOUSE_SECONDARYUP_EVENT, "MouseSecondaryUp_Event","","",WinGetHandle("Titel deines Fensters",""))

    [/autoit]

    musst doch nur noch den Titel deines Fensters eintragen ^^

  • SEuBo

    Danke, werds nochmal probieren. Ich hab es so gemacht:

    [autoit]


    $Splash = GUICreate("dd", 48, 48, @DesktopWidth-55, @DesktopHeight-55, $WS_POPUP, $WS_EX_LAYERED+$WS_EX_TOPMOST+$WS_EX_TOOLWINDOW)
    GUISetbkColor(0xFFFFFF)
    GUICtrlCreatePic($Pfad & "\icons\Computer_mouse.gif",0,0,48,48)
    GUISetState(@SW_SHOW,"dd")
    _MouseSetOnEvent($MOUSE_SECONDARYUP_EVENT, "MouseSecondaryUp_Event","","",$Splash)

    [/autoit]


    komme aber danach nicht mehr in ein anderes Fenster

    und beenden kann ich den modus auch nicht, weiß nicht wo :S

  • Nein, es soll ja nicht auf dein eigenes GUI beschränkt sein, sondern auf das Fenster, in dem der rechtsklick etwas auslösen soll. Wenn ich also einen rechtsklick im Editor abfangen will, mache ich folgendes

    [autoit]

    _MouseSetOnEvent($MOUSE_SECONDARYUP_EVENT, "MouseSecondaryUp_Event","","",WinGetHandle("Unbenannt - Edior",""))

    [/autoit]
    Zitat

    und beenden kann ich den modus auch nicht, weiß nicht wo

    [autoit]


    _MouseSetOnEvent($MOUSE_SECONDARYUP_EVENT,""); Damit wird der Hook aufgehoben

    [/autoit]