Seite 1 von 2

Anwendung von außen über SendMessage() steuern?

Verfasst: 17.01.2009 23:56
von LordK
Hallo Zusammen,

kennte jemand ein gutes Beispiel oder ein Tutorial, wie man sein Programm von außen über die SendMessage Funktion steuern kann, wie es z.B. bei Winamp der Fall ist?

Also das einfach eine bestimmte Funktion im Programm aufgerufen wird, wenn man sendmessage() mit gewissend Parameter darauf aufruft?

Danke & Gruß

LordK

Verfasst: 18.01.2009 00:10
von ts-soft
Simples Beispiel:
Der Empfänger:

Code: Alles auswählen

#MyMessageToShowMsg = #WM_USER + 100

OpenWindow(0, #PB_Ignore, #PB_Ignore, 100, 100, "Empfänger", #PB_Window_SystemMenu)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow : Break
    Case #MyMessageToShowMsg
     Debug EventlParam()
     Debug EventwParam()
     MessageRequester("", "Message Erhalten")
  EndSelect
ForEver
den zuerst starten, dann diesen Sender:

Code: Alles auswählen

#MyMessageToShowMsg = #WM_USER + 100


Define hWnd = FindWindow_(0, @"Empfänger")

If hWnd
  PostMessage_(hWnd, #MyMessageToShowMsg, 10, 20)
EndIf
Ich hoffe damit findeste einen Anfang

Gruß
Thomas

Verfasst: 18.01.2009 00:15
von LordK
Wow,

hätte nicht gedacht, dass so so einfach ist :D

Vielen Dank :allright:

Verfasst: 18.01.2009 00:24
von ts-soft
Bei der #WM_USER aufpassen, das diese nicht evtl. schon von einem
Control (aus Lib oder DLL) verwendet wird.
Strings lassen sich so nicht übermitteln, dafür gibts #WM_COPYDATA
(auf MSDN oder in anderer API-Hilfe suchen)

Gruß
Thomas

Verfasst: 18.01.2009 00:35
von LordK
ts-soft hat geschrieben:Simples Beispiel:

Code: Alles auswählen

If hWnd
  PostMessage_(hWnd, #MyMessageToShowMsg, 10, 20)
EndIf
Kann man diese 10 und 20, die als wparam und lparam übergeben werden auch noch irgendwie verarbeiten?

Ansonsten dachte ich ich könnte es analog Winamp machen und mit #WM_COMMAND und dann custom wparams vergeben.

Gruß

LordK

Verfasst: 18.01.2009 00:41
von ts-soft
#WM_COMMAND würde ich nicht nehmen, das kann Probleme mit
vorhandenen Messages geben.

Ansonsten verstehe ich Deine Frage nicht, meinste sowas?

Code: Alles auswählen

Enumeration
  #minimierdich
  #maximierdich
  #beendedich
  #setzebuttonhight
EndEnumeration

If hWnd
  PostMessage_(hWnd, #MyMessageToShowMsg, #setzebuttonhight, 20)
EndIf
oder sowas:

Code: Alles auswählen

Import ""
  PB_Gadget_SendGadgetCommand(hWnd, EventType)
EndImport

#MyMessageToShowMsg = #WM_USER + 100

OpenWindow(0, #PB_Ignore, #PB_Ignore, 100, 100, "Empfänger", #PB_Window_SystemMenu)

Repeat
  Select WaitWindowEvent()
    Case #PB_Event_CloseWindow : Break
    Case #MyMessageToShowMsg
      PB_Gadget_SendGadgetCommand(EventlParam(), EventwParam())
  EndSelect
ForEver

Verfasst: 18.01.2009 00:49
von LordK
Ahh. Sorry...

Ich hatte den Code eben nur mal überflogen aber noch nicht getestet, daher ist mir das

Code: Alles auswählen

Debug EventlParam()
Debug EventwParam()
irgendwie entgangen. :oops:

Damit hätten sich dann meine Fragen fürs erste beantwort.

Vielen Dank für dein super Unterstützung <)

Verfasst: 18.01.2009 00:52
von ts-soft
> Vielen Dank für dein super Unterstützung
gern geschehen

PS: Hab eben noch ein Beispiel im vorherigen Post abgeschickt, vielleicht
bringt dich das ja noch auf Ideen :wink:

Verfasst: 18.01.2009 01:20
von Little John
Thomas,

aus welcher Datei wird denn etwas importiert, wenn man als Dateiname nur "" angibt, wie in Deinem Beispiel?

Neugierig, Little John

Verfasst: 18.01.2009 01:25
von ts-soft
Little John hat geschrieben:Thomas,

aus welcher Datei wird denn etwas importiert, wenn man als Dateiname nur "" angibt, wie in Deinem Beispiel?

Neugierig, Little John
In diesem Falle aus Gadget.lib
Das geht natürlich nur mit Libs, die sowieso importiert werden, also wenn
hier kein Gadget erstellt wird im Source, dann gibts nen Fehler, aber dann
wäre der Import sowieso sinnlos :mrgreen: