Nachricht an anderes Programm

  • Hallo Leute

    Ich brauch wieder mal eure Hilfe.

    Von irgendwo habe ich mal ein Programm geklaut und entsprechen modifiziert.

    Mit der gedrückten Alt- Taste und der Maus kann man einen rechteckigen Rahmen auf den Schirm zeichnen.

    Zusätzlich kann es die Koordinaten an ein anderes Prog. senden.

    Soweit klappt das auch.

    Ich möchte aber auch Daten an das Programm ($Input1) senden können mit:


    Code
    $Text= "Daten"
    $hWnd = WinGetHandle("[REGEXPTITLE:(GTI.*)]")
    WinActivate($hWnd)
    ControlSetText($hWnd,"","[CLASS:Edit; INSTANCE:1]", $Text)
    ToolTip($hWnd)

    Dem Programm "GTI" möchte ich mit dem oben genannten Quellencode Daten übermitteln.

    Programm GTI zum testen

    ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    ;dieses Prog. ist nicht von mir wurde aber von mir modifiziert!!

    ;Silvermoon

    ;____________________________________________________________

    ;Programm 1 von 2

    ; mit drücken der Alt-Taste lässt sich mit der Maus ein rechteckiger Rahmen aufziehen,welcher

    ;über alle anderen Fenster liegt.

    ;zusätzlich können die Rechteck- Koordinaten an ein Fremdprogramm "Form1" senden werden .

    ; die Function " _eigene_hWnd()" kann gelöscht werden so wie dessen Aufruf.

    ;zur zeit kann ich keine Daten (Coordinaten) von Programm2 an das GTI-$Input1 senden. :(((

    ;es werden nochweitere Funktionenen geplant

    ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    ;

    #include <GDIPlus.au3>

    #include <Misc.au3>

    #include <GUIConstantsEx.au3>

    #include <WindowsConstants.au3>

    #include <WinAPI.au3>

    #include <Array.au3>

    #include <GUIConstantsEx.au3>

    #include <StaticConstants.au3>

    HotKeySet("{ESC}", "_Senden")

    Opt("GUIOnEventMode", 1)

    $hGui = GUICreate("GDI", @DesktopWidth, @DesktopHeight, 0, 0,$WS_POPUP, $WS_EX_LAYERED)

    GUISetBkColor(0x000000)

    $Input1 = GUICtrlCreateInput(" ", 102, 5,100, 30)

    GUICtrlSetOnEvent(-1, "Meldung")

    ;GUICtrlSetState($Input1,$GUI_ENABLE )

    _WinAPI_SetLayeredWindowAttributes($hGui,0x000000,255)

    GUISetOnEvent(-3, "_Shut")

    GUISetState()

    _GDIPlus_Startup()

    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)

    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics(@DesktopWidth, @DesktopHeight, $hGraphics)

    Global $Backbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

    Global $hPen = _GDIPlus_PenCreate(0xFFFF0000, 2)

    Global $hPen2 = _GDIPlus_PenCreate(0xFFFFa000, 2)

    WinSetOnTop($hGui, "",1)

    WinSetOnTop($hGraphics, "",1)

    _GDIPlus_GraphicsClear($Backbuffer)

    Sleep(300)

    ;--------------------------------------------------

    While 1

    ;ControlSetText("Form1","","[CLASS:Static; INSTANCE:7]", "Rahmen zeichnen mit Alt+linke Maustaste?")

    $R_pos = MouseGetPos();1. Mauspos

    if _IsPressed("12") Then; Alt-Taste

    While _IsPressed("01")

    $R_pos2 = MouseGetPos(); 2. Mauspos

    _GDIPlus_GraphicsClear($hGraphics)

    _GDIPlus_GraphicsDrawLine($hGraphics, $R_pos[0], $R_pos [1], $R_pos2[0], $R_pos [1], $hPen2);Oben horizontal

    _GDIPlus_GraphicsDrawLine($hGraphics, $R_pos[0], $R_pos2[1], $R_pos2[0], $R_pos2[1], $hPen);Unten horizontal

    _GDIPlus_GraphicsDrawLine($hGraphics, $R_pos[0], $R_pos[1], $R_pos[0], $R_pos2[1], $hPen2);Links vertikal

    _GDIPlus_GraphicsDrawLine($hGraphics, $R_pos2[0], $R_pos[1], $R_pos2[0], $R_pos2[1], $hPen);Rechts vertikal

    ; _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)

    ControlSetText("Form1","","[CLASS:Edit; INSTANCE:1]", $R_pos[0]) ;X

    ControlSetText("Form1","","[CLASS:Edit; INSTANCE:2]", $R_pos[1]) ;Y

    ControlSetText("Form1","","[CLASS:Edit; INSTANCE:3]", $R_pos2[0]) ;X1

    ControlSetText("Form1","","[CLASS:Edit; INSTANCE:4]", $R_pos2[1]) ;Y1

    if not _IsPressed("01") Then

    _eigene_hWnd(); zum testen

    ;ControlSetText("Form1","","[CLASS:Static; INSTANCE:7]", "Bild mit Pausetaste speichen ?")

    EndIf

    WEnd

    EndIf

    ;_GDIPlus_GraphicsClear($hGraphics, 0xFF000000); grafig löschen

    ;Sleep(10)

    WEnd

    ;--------------------------------------------------

    Func _Shut()

    _GDIPlus_GraphicsDispose($hGraphics)

    _GDIPlus_GraphicsDispose($Backbuffer)

    _GDIPlus_BitmapDispose($hBitmap)

    _GDIPlus_PenCreate($hPen)

    _GDIPlus_Shutdown()

    Exit

    EndFunc ;==>_Shut

    ;--------------------------------------------------

    Func _eigene_hWnd()

    ;

    $hWnd = WinGetHandle("[REGEXPTITLE:(GTI.*)]")

    GUICtrlSetData($Input1 ,$hWnd)

    ToolTip("_hWnd von GTI... "&$hWnd)

    ;-----------test

    EndFunc

    ;--------------------------------------------------

    Func Meldung()

    $T=GUICtrlread($Input1)

    ;MsgBox($MB_SYSTEMMODAL, "Rückmeldung")

    MsgBox($MB_SYSTEMMODAL, "Titel", "Rückmeldung "&$T,1 )

    EndFunc

    Func _Senden()

    Exit

    ;ControlSetText("Form1","","[CLASS:Edit; INSTANCE:1]", $R_pos[0])

    ;ControlSetText("Form1","","[CLASS:Edit; INSTANCE:2]", $R_pos[1])

    ;ControlSetText("Form1","","[CLASS:Edit; INSTANCE:3]", $R_pos2[0])

    ;ControlSetText("Form1","","[CLASS:Edit; INSTANCE:4]", $R_pos2[1])

    EndFunc

    Jedoch reagiert das Programm GTI nicht darauf


    Wo liegt der Fehler?

    Danke für eure Hilfe

    Einmal editiert, zuletzt von Silvermoon1 (16. April 2022 um 18:54)

  • Moin,

    ich habe das nur gelesen, aber

    $hWnd = WinGetHandle("[REGEXPTITLE:(GTI.*)]")

    passt für mich nicht so recht zu

    $hGui = GUICreate("GDI", @DesktopWidth, @DesktopHeight, 0, 0,$WS_POPUP, $WS_EX_LAYERED)

  • ich habe das nur gelesen, aber

    $hWnd = WinGetHandle("[REGEXPTITLE:(GTI.*)]")

    passt für mich nicht so recht zu

    $hGui = GUICreate("GDI", @DesktopWidth, @DesktopHeight, 0, 0,$WS_POPUP, $WS_EX_LAYERED)

    Hallo Velted

    Verzeih aber, ohne sich wirklich damit zu befassen ist dein Beitrag „Sinnfrei“ und trägt nicht wirklich etwas zur Unterstützung bei.

    Anmerkung;

    WinGetHandle("[REGEXPTITLE:(GTI.*)]") wurde aus der Help entnommen und ermittelt das Handle eines Fensters.Silvermoon

  • Verzeih aber, ohne sich wirklich damit zu befassen ist dein Beitrag „Sinnfrei“ und trägt nicht wirklich etwas zur Unterstützung bei.

    Aber, aber sinnfrei ist dass du dich nicht damit befasst, denn GDI ist wirklich nicht gleich GTI, ich setze also voraus das dich Velted darauf hinweisen wollte. Solltest du aber wirklich dringend Hilfe suchen, könntest du z.B. Link zum Spiel oder Screenshots zur besseren Verständlichkeit posten.

    mfg (auto)Bert

  • Sorry an für meinen Fehler euch beide,wenn ich was Falsch verstanden habe.


    Hallo Bernt

    Es ist kein Spiel und einen Screenshot gibt es nicht, da das Progr. „GDI“ nicht sichtbar ist.

    Wenn du in meinen ersten Beitrag schaust dann findest du den Code unter

    Programm GTI zum testen.“

    Nach dem Kompilieren und Start erscheint nur ein Input -Feld am Bildschirm (links oben) und in der Titel in der Taskleiste „GDI“.


    Mit einer anderen Form1 versuche ich dieses Input-Feld von GDI ($Input1)anzusprechen.

    Mit Codebeispiel:

    Code
    $Text= "Daten"
    $hWnd = WinGetHandle("[REGEXPTITLE:(GDI.*)]")
    WinActivate($hWnd)
    ControlSetText($hWnd,"","[CLASS:Edit; INSTANCE:1]", $Text)
    ToolTip($hWnd)

    mfg an euch beide

    Silvermoon

  • Progr. „GDI“ nicht sichtbar ist.

    aber vielleicht das Prog "GTI"?

    Dem Programm "GTI" möchte ich mit dem oben genannten Quellencode Daten übermitteln.

    allgemein werden mehr Infos benötigt:

    • Laufen beide Prog's auf dem selben Rechner?
      wenn nein: welche Betriebssysteme, deine jeweiligen Rechte als Benutzer,
    • wenn ja, wo ist dein Problem? Du scheinst ja von beiden Programmen den AutoItsourcecode zu haben
      wenn auch die Herkunft des einen:

    Von irgendwo habe ich mal ein Programm geklaut und entsprechen modifiziert.

    • etwas zweifelhaft.

    Daher mein letzter Tipp, schau mal in die Signaturen von alpines (1. Progr. kann helfen), Andy (kennt meist die richtigen Fragen), oder Raupi .

    mfg (auto)Bert

    Einmal editiert, zuletzt von autoBert (18. April 2022 um 21:24)

  • Also ich glaube wir reden aneinander vorbei.

    Hast du die AutoItsourcecode Programm GTI zum testen gesehen?

    Es sind insgesamt zwei AutoItsourcecode!

    Laufen beide Prog's auf dem selben Rechner?

    ja

    1.) GDI ist unsichtbar und läuft als "GDI.exe" und dass ist auch richtig so.

    Sie ermöglicht einer rechteckigen Rahmen mit "Alt" und Maus ziehen auf dem Bildschirm zu zeichnen.

    Da eine Fehlersuche in der als kompilierte (GTI.exe) nicht möglich ist, hatte ich in meiner ersten Anfrage

    die AutoItsourcecode bereits eingestellt. s.Programm GTI zum testen

    wenn ja, wo ist dein Problem? Du scheinst ja von beiden Programmen den AutoItsourcecode zu haben

    2.)unabhängig von der GDI.exe läuft ein anderer Sourcecode , welcher mit der GDI.exe nichts zu tun hat.

    Dieser Sourcecode sollte es ermöglichen, zusätzliche Daten an die GDI zu senden.

    $Text= "Daten"

    $hWnd = WinGetHandle("[REGEXPTITLE:(GDI.*)]")

    WinActivate($hWnd)

    ControlSetText($hWnd,"","[CLASS:Edit; INSTANCE:1]", $Text)

    ToolTip($hWnd)

    Leider bekomme ich keine Reaktion von der GDI.exe, obwohl es den Handle erkennt.

    ich Sende nochmal die AutoItsourcecode von GDI.au3

    GDI

    ;+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    ;dieses Prog. ist nicht von mir wurde aber von mir modifiziert!!

    ;Silvermoon

    ;____________________________________________________________

    ;Programm 1 von 2

    ; mit drücken der Alt-Taste lässt sich mit der Maus ein rechteckiger Rahmen aufziehen,welcher

    ;über alle anderen Fenster liegt.

    ;zusätzlich können die Rechteck- Koordinaten an ein Fremdprogramm "Form1" senden werden .

    ; die Function " _eigene_hWnd()" kann gelöscht werden so wie dessen Aufruf.

    ;zur zeit kann ich keine Daten (Coordinaten) von Programm2 an das GTI-$Input1 senden. :(((

    ;es werden nochweitere Funktionenen geplant

    ;++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

    ;

    #include <GDIPlus.au3>

    #include <Misc.au3>

    #include <GUIConstantsEx.au3>

    #include <WindowsConstants.au3>

    #include <WinAPI.au3>

    #include <Array.au3>

    #include <GUIConstantsEx.au3>

    #include <StaticConstants.au3>

    HotKeySet("{ESC}", "_Senden")

    Opt("GUIOnEventMode", 1)

    $hGui = GUICreate("GDI", @DesktopWidth, @DesktopHeight, 0, 0,$WS_POPUP, $WS_EX_LAYERED)

    GUISetBkColor(0x000000)

    $Input1 = GUICtrlCreateInput(" ", 102, 5,100, 30)

    GUICtrlSetOnEvent(-1, "Meldung")

    ;GUICtrlSetState($Input1,$GUI_ENABLE )

    _WinAPI_SetLayeredWindowAttributes($hGui,0x000000,255)

    GUISetOnEvent(-3, "_Shut")

    GUISetState()

    _GDIPlus_Startup()

    Global $hGraphics = _GDIPlus_GraphicsCreateFromHWND($hGui)

    Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics(@DesktopWidth, @DesktopHeight, $hGraphics)

    Global $Backbuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)

    Global $hPen = _GDIPlus_PenCreate(0xFFFF0000, 2)

    Global $hPen2 = _GDIPlus_PenCreate(0xFFFFa000, 2)

    WinSetOnTop($hGui, "",1)

    WinSetOnTop($hGraphics, "",1)

    _GDIPlus_GraphicsClear($Backbuffer)

    Sleep(300)

    ;--------------------------------------------------

    While 1

    ;ControlSetText("Form1","","[CLASS:Static; INSTANCE:7]", "Rahmen zeichnen mit Alt+linke Maustaste?")

    $R_pos = MouseGetPos();1. Mauspos

    if _IsPressed("12") Then; Alt-Taste

    While _IsPressed("01")

    $R_pos2 = MouseGetPos(); 2. Mauspos

    _GDIPlus_GraphicsClear($hGraphics)

    _GDIPlus_GraphicsDrawLine($hGraphics, $R_pos[0], $R_pos [1], $R_pos2[0], $R_pos [1], $hPen2);Oben horizontal

    _GDIPlus_GraphicsDrawLine($hGraphics, $R_pos[0], $R_pos2[1], $R_pos2[0], $R_pos2[1], $hPen);Unten horizontal

    _GDIPlus_GraphicsDrawLine($hGraphics, $R_pos[0], $R_pos[1], $R_pos[0], $R_pos2[1], $hPen2);Links vertikal

    _GDIPlus_GraphicsDrawLine($hGraphics, $R_pos2[0], $R_pos[1], $R_pos2[0], $R_pos2[1], $hPen);Rechts vertikal

    ; _GDIPlus_GraphicsDrawImage($hGraphics, $hBitmap, 0, 0)

    ControlSetText("Form1","","[CLASS:Edit; INSTANCE:1]", $R_pos[0]) ;X

    ControlSetText("Form1","","[CLASS:Edit; INSTANCE:2]", $R_pos[1]) ;Y

    ControlSetText("Form1","","[CLASS:Edit; INSTANCE:3]", $R_pos2[0]) ;X1

    ControlSetText("Form1","","[CLASS:Edit; INSTANCE:4]", $R_pos2[1]) ;Y1

    if not _IsPressed("01") Then

    _eigene_hWnd(); zum testen

    ;ControlSetText("Form1","","[CLASS:Static; INSTANCE:7]", "Bild mit Pausetaste speichen ?")

    EndIf

    WEnd

    EndIf

    ;_GDIPlus_GraphicsClear($hGraphics, 0xFF000000); grafig löschen

    ;Sleep(10)

    WEnd

    ;--------------------------------------------------

    Func _Shut()

    _GDIPlus_GraphicsDispose($hGraphics)

    _GDIPlus_GraphicsDispose($Backbuffer)

    _GDIPlus_BitmapDispose($hBitmap)

    _GDIPlus_PenCreate($hPen)

    _GDIPlus_Shutdown()

    Exit

    EndFunc ;==>_Shut

    ;--------------------------------------------------

    Func _eigene_hWnd()

    ;

    $hWnd = WinGetHandle("[REGEXPTITLE:(GTI.*)]")

    GUICtrlSetData($Input1 ,$hWnd)

    ToolTip("_hWnd von GTI... "&$hWnd)

    ;-----------test

    EndFunc

    ;--------------------------------------------------

    Func Meldung()

    $T=GUICtrlread($Input1)

    ;MsgBox($MB_SYSTEMMODAL, "Rückmeldung")

    MsgBox($MB_SYSTEMMODAL, "Titel", "Rückmeldung "&$T,1 )

    EndFunc

    Func _Senden()

    Exit

    ;ControlSetText("Form1","","[CLASS:Edit; INSTANCE:1]", $R_pos[0])

    ;ControlSetText("Form1","","[CLASS:Edit; INSTANCE:2]", $R_pos[1])

    ;ControlSetText("Form1","","[CLASS:Edit; INSTANCE:3]", $R_pos2[0])

    ;ControlSetText("Form1","","[CLASS:Edit; INSTANCE:4]", $R_pos2[1])

    EndFunc

  • Leider bekomme ich keine Reaktion von der GDI.exe, obwohl es den Handle erkennt.

    Ich nehme an, du wartest auf dieses Event:

    $Input1 = GUICtrlCreateInput(" ", 102, 5,100, 30)

    GUICtrlSetOnEvent(-1, "Meldung")

    ControlSetText($hWnd,"","[CLASS:Edit; INSTANCE:1]", $Text) kann m.W. kein synchrones Event auslösen. Es setzt einfach nur den Inhalt. Du müsstest schon zusätzlich eine Msg für das Control absenden.

    EDIT:

    Probier mal so

    Aber es ist eigentlich ein Umweg, einen Wert in ein Inputfeld zu setzen und auf diese Änderung zu reagieren. Ruf doch entsprechend eine Funktion auf, die das tut, was nun folgen soll - denn die MsgBox "Meldung" wird wohl nicht das Ziel sein - oder?

    Einen Nachteil hat die von mir gezeigte Variante: Du bekommst die Nachricht doppelt. Einmal sofort ausgelöst durch _SendMessage und dann wird auch die erfolgte Message $EN_CHANGE verwertet und löst nochmal das Event aus. Das kannst du bei deinem bisherigen Code bereits nachvollziehen durch: Fokus ins Input setzen, danach auf ein anderes Fenster klicken - erst jetzt wird von deinem Fenster die Meldung $EN_CHANGE verwertet.

  • Aber, aber sinnfrei ist dass du dich nicht damit befasst, denn GDI ist wirklich nicht gleich GTI, ich setze also voraus das dich Velted darauf hinweisen wollte.

    autoBert
    Das gleiche hatte ich auch gedacht, habe mich aber zurück gehalten, da ich mich selber nicht mit GDI / GTI nicht aus kenne, außer es ist ein GTI vom deutschen Volkswagenunternehmen (keine Schleichwerbung *fg*).

    :/ Vielleicht sollten wir ein Feld einfügen "Hilfe wurde gelesen". :rtfm:

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Einen großen Dank an Raupi für dein Bemühen.

    Das war genau das, welches ich gesucht habe.

    Auch an die Anderen für eure Geduld, Danke.

    Ich entschuldige mich für den barschen Ton am Anfang, es lag nicht in meiner Absicht jemanden auf den Schlips zu treten.

    Es lag daran, dass ich 6 stunden nach dem Fehler suchte und ziemlich genervt eine genaue Anfrage fürs Forum zusammen stellte.

    Als Antwort war zu lesen

    ich habe das nur gelesen, aber

    $hWnd = WinGetHandle("[REGEXPTITLE:(GTI.*)]")

    passt für mich nicht so recht zu

    $hGui = GUICreate("GDI", @DesktopWidth, @DesktopHeight, 0, 0,$WS_POPUP, $WS_EX_LAYERED)

    Ich habe das als lapidare Meldung abgetan, und nicht weiter darüber nachgedacht. Da mein Problem in einem anderen Bereich war, welches ich ja genau beschrieben habe.

    Also noch mal Entschuldigung

    Silvermoon

  • Also noch mal Entschuldigung

    Respekt, macht nicht jeder.

    Sechs Stunden suchen eines Fehlers oder in der Suchfunktion kann schon einmal etwas die Nerven belasten.

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Moin,

    ich habe mich nicht 'angegriffen' gefühlt. Jeder muss schließlich selbst entscheiden, ob meine Hinweise hilfreich sind, oder auch nicht.

    Dein GDI/GTI-Verwirrspiel ist mir aber immer noch nicht klar. Du hast in den Beiträgen 1 & 7 zweimal Sourcecode mit

    Code
    ;Programm 1 von 2

    eingestellt, das erste als "GTI" und das zweite als "GDI" bezeichnet. Ich habe das nicht Zeichen für Zeichen geprüft, sie sehen für mich aber recht identisch aus.

    Einmal editiert, zuletzt von Velted (20. April 2022 um 10:47)

  • Wenn Du beide Programme selber gescriptet hast, dann sage doch dem einen Programm, das er die Info die für das andere Programm z. B. in der Info.txt schreiben soll.
    Den anderen Programm sagst Du dann wo er die Info.txt findet und liest dann die dort gespeicherten Daten wieder aus.
    Wenn die Info.txt nicht mehr gebraucht wird kannst Du diese dann löschen und hast weniger Speicherplatz verbraucht.

    So denkt mein dunkelblonder Teil auf dem Hals. :S

    Lieben Gruß,
    Alina

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

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl