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

Windowsspezifisches Forum , API ,..
Beiträge, die plattformübergreifend sind, gehören ins 'Allgemein'-Forum.
LordK
Beiträge: 28
Registriert: 01.03.2006 21:18

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

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
LordK
Beiträge: 28
Registriert: 01.03.2006 21:18

Beitrag von LordK »

Wow,

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

Vielen Dank :allright:
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
LordK
Beiträge: 28
Registriert: 01.03.2006 21:18

Beitrag 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
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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
Zuletzt geändert von ts-soft am 18.01.2009 00:50, insgesamt 1-mal geändert.
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
LordK
Beiträge: 28
Registriert: 01.03.2006 21:18

Beitrag 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 <)
Zuletzt geändert von LordK am 18.01.2009 01:07, insgesamt 1-mal geändert.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Little John

Beitrag von Little John »

Thomas,

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

Neugierig, Little John
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag 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:
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Antworten