Drag and Drop Symbol, um Position herauszufinden

  • Hallo Zusammen,

    ich schreibe Momentan ein kleines Programm, das mir die Arbeit in der Firma etwas erleichtern soll. Dabei sollen simple Mausklicks automatisiert werden. Leider ist die zu "drückende Position" immer anders, daher möchte ich gerne mit einem Screenshot arbeiten, auf dem ich die Position markiere und dann die Klicks an dieser Stelle ausführe.

    Leider weiß ich nicht genau, wie ich die "Drag and Drop" Geschichte angehen soll.
    Könnt ihr mir da eine UDF empfehlen oder ist da schon eine Integriert und ich bin nur zu blöd diese zu finden?

    Einmal editiert, zuletzt von MiracelVip (5. November 2014 um 04:07)

  • also wenn das bild immer so aussieht könntest du ja für jede einzelne station ein pic machen und das dann per imagesearch suchen lassen...
    dann sagst ihm suche nach station_1, oder station_5 etc.


    €: auch wäre denkbar das du direkt auf dem bildschirm, nicht auf dem screenshot, die position die gedrückt werden soll anfährst mit der maus, dann mittels hotkey die x und y pos aufnimmst und dann sagst wie oft auf dieser pos gedrückt werden soll...

    noob aus erfahrung

  • Leider ändert sich das Bild immer wieder daher wird es sehr schwierig. Im AutoItWindowInfo Programm gibt es ja genau die Funktion die ich brauchen würde - Das Finder Tool... Wie wurde es da umgesetzt? Oder ist das nicht mit AutoIt programmiert?

  • doch, das is scho mit autoit gemacht... also meine skills reichen nich aus um das nachzuproggen. da hier ja nicht nur die pos aufgenommen wird sondern auch das fadenkreuz weitergeschoben wird.

    aber mit hotkeyset sollte das auch gehen...wenn du auf das fadenkreuz verzichten kannst und stattdessen nur mit der maus arbeitest is das relativ easy. machst eine funktion die x und y pos aufnimmt, dann diese funktion mittels hotkeyset einer taste zuweisen, und dann eine unendlich schleife laufen lassen. wenn du dann eine neue position geklickt haben willst, fährst mit dem mauscursor darüber, drückst die zugewiesene taste und schon sollte das laufen...

    noob aus erfahrung

  • Thema abonniert.

    Geht das abonieren nicht auch ohne das ein Beitrag verfaßt wird. Wo ist die Funktion?
    Übersehen?

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Da ich das Programm gerne verteilen wollte würde ich mich schon über eine elegante Lösung freuen :) Wenn jemand eine Idee hat würde ich mich sehr freuen. BTW ich brauche keinen fertigen Code, ich brauche nur einen Funktionsnamen oder was ähnliches um einen Anfang zu finden

    Gruß
    MiracelVip

  • Danke für die Links, werde mich da mal einlesen

    Programmablauf:

    1. Programm starten ;)
    2. Ein anderes Fenster auswählen und F7 drücken
    -> Screenshot wird erstellt
    -> Screenshot wird im GUI angezeigt
    -> Fenstername wird in GUI übertragen <-- Bis hier hin alles fertig

    3. "Drag and Drop Pointer" auf eine Position ziehen (im Screenshot)
    -> Position wird ins GUI übertragen
    z.B. eins der Grünen Dreiecke im oberen Screenshot

    ---> Ab hier alles fertig
    4. Start [F5] drücken
    -> das Fenster mit dem gespeicherten Namen wird in den Vordergrund geholt und die Maus an die Position des "Drag and Drop Pointers" geschoben
    -> es wird ein Rechtsklick ausgefür
    -> 2x Pfeiltaste nach unten
    -> Return
    -> Warten
    -> Rechtsklick
    -> 1x Pfeiltaste nach unten
    -> Return
    ->Warten
    ... und wieder von vorne....

    2 Mal editiert, zuletzt von MiracelVip (5. November 2014 um 04:07)

    • Offizieller Beitrag

    Durch die Sicherheitsbestimmungen können das meine Elektriker nicht direkt implementieren.


    Das würde mich aber nachdenklich machen. Die Sicherheitsbestimmungen erlauben keine automatisierten Abläufe, diese sollen vom Anlagenfahrer ausgelöst werden. Das ist verständlich und schützt vor Gefahren.
    Wenn du jetzt per Software einen Anlagenfahrer simulierst, wird doch diese Sicherheitsvorgabe ad absurdum geführt. 8|
    Oder habe ich da etwas missverstanden?

  • also ich schließ mich da voll bugfix an, diese hürden wurden vom hersteller absichtlich eingesetzt. im fall des falles wird hier sichergestellt das eine 2te person anwesend ist und den not-aus drücken kann...das zu umgehen is ne heiße sache!

    wenn überhaupt dann würd ich da eher an eine fernsteuerung (zb. mitm handy o.ä.) denken wo du die jeweiligen schritte/mausklicks/etc. abschicken kannst, aber halt immer einzeln und nicht voll-automatisch den ganzen ablauf...man stelle sich vor einer (du zb.) hat die hand irgendwo drin und die "pneumatische Bewegung" löst aus oO

    noob aus erfahrung

  • Und ich möchte hier mal darauf hinweisen, das wenn etwas passiert
    es ja nicht nur arbeitsrechtliche Folgen mit sich tragen kann. Wenn
    durch eine Automatisierung die Sicherheit gefährdet werden kann oder
    gefährdet ist und dann ein Arbeitsunfall passiert, dann gnade Gott dem,
    der die Automatisierung genehmigt hat. Gibst Du ohne Genehmigung
    oder weil Du meinst das Du dazu berechtigt bist, eine solche Auto-
    matiesierung zu schreiben und zur Verfügung zu stellen, an andere
    weiter und es passiert etwas, wird die Unfallversicherung / Berufs-
    genossenschaft auf DICH zukommen und das sicherlich nicht gerade zum
    Kaffee trinken. Und Unwissenheit schütz vor Strafe nicht, würde auch
    Deine Situation nicht verbessern, weil Du alleine schon hier im Forum
    über die Risiken nun ja informiert bist. Ab besten immer von möglichst
    hocher Stelle eine schriftliche Genehmigung holen.
    .
    Sollte jetzt nicht kluggerede gewesen sein. Sondern sehe es als einen
    hilfreichen Warnhinweis an. Wo Leben im Spiel ist und die Sicherheit
    gefährdet ist, dürfen Sicherheitseinrichtungen nicht umgangen werden!

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Ich gehöre zum Anlagenhersteller, wir machen die Erstinbetriebnahme... Daher ist das ok... Leider gibts bei uns Softwaretechnisch keine Unterscheidung zwischen Kunden und Inbetriebnehmer -> wenn ich das Implementieren lasse wird es der Kunde später auch nutzen, auch wenn er nicht weiß was er da macht

    Aber danke für euren Hinweis, ich hätte es nie so ausführlich beschreiben sollen :whistling:


    So ich habe es inzwischen etwas anders gelöst aber hier für die Nachwelt:

    Screenshot erstellen:

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    Func function_screenshot()
    ;## get window name
    $win_name = WinGetTitle("")
    ;## put window name in input box
    _GUICtrlEdit_SetText ($input_window_name, $win_name)
    ;## make Screenshot
    $pic_path = @ScriptDir & "\screenshot.jpg"
    _ScreenCapture_CaptureWnd($pic_path, $win_name)
    ;## get Picture size
    _GDIPlus_Startup()
    $IMG = _GDIPlus_ImageLoadFromFile($pic_path)

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

    $h = _GDIPlus_ImageGetHeight($IMG)
    $w = _GDIPlus_ImageGetWidth($IMG)
    _GDIPlus_ImageDispose($IMG)
    _GDIPlus_Shutdown()
    ;## change picture in GUI
    GUICtrlSetPos ($screenshot, 200, 64, $w, $h)
    GUICtrlSetImage($screenshot,$pic_path)
    ;## enable Pointer
    GUICtrlSetState($button_pointer, $GUI_ENABLE)
    WinActivate("Auf-Zu")

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

    EndFunc

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

    Pointer auf Bild setzen

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    Func function_pointer()
    ;## Schleife starten
    $exit = 0
    ;## Alten Pointer löschen
    if $pic_drag_and_drop > 0 Then
    GUICtrlDelete ( $pic_drag_and_drop )
    EndIf

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

    ;## change Cursor
    GUICtrlSetCursor ( $screenshot, 3)

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

    ;## Schleife bis Maus gedrückt wird
    Local $hDLL = DllOpen("user32.dll")
    While $exit = 0
    Sleep(10) ; This enough to prevent CPU overload <<<<<<<<<<<<<<<<<<<<<<<<

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

    ;## Nimmt die Aktuelle Position auf
    If _IsPressed("01", $hDLL) Then
    $MousePos = MouseGetPos()
    ConsoleWrite("Mouse Button Pressed" & @CRLF & "X=" & $MousePos[0] & @CRLF & "Y=" & $MousePos[1] & @CRLF)

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

    ;## Schleife beenden
    $exit = 1
    ;## Koordinaten in Textfelder schreiben
    _GUICtrlEdit_SetText ($input_pointer_x, $MousePos[0]-204)
    _GUICtrlEdit_SetText ($input_pointer_y, $MousePos[1]-90)

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

    ;## Corser zurücksetzen
    GUICtrlSetCursor ( $screenshot, 2)
    ;## Pointer einsetzen
    $pic_drag_and_drop = GUICtrlCreatePic( @ScriptDir & "\1.gif", $MousePos[0]-35, $MousePos[1]-56, 65, 65)
    GUICtrlSetState($screenshot, $GUI_HIDE)
    GUICtrlSetState($screenshot, $GUI_SHOW)

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

    While _IsPressed("01", $hDLL)
    Sleep(10)
    WEnd
    EndIf

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

    WEnd

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

    ;## enable Start
    GUICtrlSetState($button_start, $GUI_ENABLE)

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

    EndFunc

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

    Ist halt kein Drag and Drop geworden aber auch noch ok

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

    2 Mal editiert, zuletzt von MiracelVip (5. November 2014 um 04:06)