Windows zweier Programme zusammenhängen
Moderator: Moderatoren
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Windows zweier Programme zusammenhängen
Hallo, ich würde gerne die Fenster zweier Programme verbinden, wenn man das Hauptfenster bewegt, soll das zweite Programm immer rechts davon platziert werden. Wie kann ich also die Position des Fensters eines anderen Programmes ändern ?
Grüße
Rudolf
Grüße
Rudolf
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
- HaPe
- 1000 working lines a day
- Beiträge: 996
- Registriert: So, 15. Nov 2015 17:44
- Wohnort: 71665 Vaihingen-Enz
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 15 Mal
Re: Windows zweier Programme zusammenhängen
Hallo Rudolf !
Das benötigte Fenster-Handle bekommst du über FindWindow wenn du den Fenster-Titel kennst: https://msdn.microsoft.com/en-us/librar ... s.85).aspx
Die Position eines Fenster kannst du mit SetWindowPos setzen: https://msdn.microsoft.com/en-us/librar ... s.85).aspxich würde gerne die Fenster zweier Programme verbinden, wenn man das Hauptfenster bewegt, soll das zweite Programm immer rechts davon platziert werden. Wie kann ich also die Position des Fensters eines anderen Programmes ändern ?
Das benötigte Fenster-Handle bekommst du über FindWindow wenn du den Fenster-Titel kennst: https://msdn.microsoft.com/en-us/librar ... s.85).aspx
--
Hans-Peter
Hans-Peter
Re: Windows zweier Programme zusammenhängen
Hallo Rudolf
soviel ich weiß kann ein EXE eine EXE nicht (so einfach) direkt beeinflussen.
Dein zweites EXE-Fenster muss selbstständig auf die Bewegungen des ersten EXE-Fensters reagieren. Das habe ich schon gemacht, das funktioniert.
soviel ich weiß kann ein EXE eine EXE nicht (so einfach) direkt beeinflussen.
Dein zweites EXE-Fenster muss selbstständig auf die Bewegungen des ersten EXE-Fensters reagieren. Das habe ich schon gemacht, das funktioniert.
- Herbert
- Der Entwickler von "Deep Thought"
- Beiträge: 1991
- Registriert: Do, 14. Aug 2008 0:22
- Wohnort: Gmunden am Traunsee, Österreich
- Danksagung erhalten: 3 Mal
- Kontaktdaten:
Re: Windows zweier Programme zusammenhängen
Wohl nicht nur beim Bewegen, sondern auch bei WM_MOVE und dem Erstellen des 2. Programms.
Grüsse Herbert
Immer in Bewegung...
Immer in Bewegung...
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Re: Windows zweier Programme zusammenhängen
Hallo, danke für die Antworten, aber ich glaube das wird ein wenig komplzierter. Muss auch reagieren wenn das Programm auf die Taskleiste gelegt, wieder geöffnet und geschlossen wird. Ich schicke jetzt schon Kommandos zwischen den Prgrammen herum, dann kann ich auch ein Kommando für eine neue Position oder auf Taskleiste legen dazuprogrammieren. Mit eXpress++ kann ich die Position des Hauptdialoges sehr einfach ändern.
Grüße
Rudolf
Grüße
Rudolf
Code: Alles auswählen
function ReceiverThread()
******************************************************************
local pMsg
if !oFCSys:lInterprocess
return .t.
endif
pMsg := _xgrab(32)
hWndReceiver := @user32:CreateWindowExA( 0,"_OT4XB_GENERIC_WINDOW_",MY_GUID,0,0,0,0,0,-3,0,AppInstance(),0)
ot4xb_subclasswindow( hWndReceiver , ReceiverHandler() )
while @user32:GetMessageA(pMsg,0,0,0) != 0
@user32:DispatchMessageA(pMsg)
end
_xfree( pMsg)
return NIL
CLASS ReceiverHandler
******************************************************************
EXPORTED:
INLINE CLASS METHOD wndproc(hWnd,nMsg,wp,lp)
local cds,cStr,cStatus := ""
if nMsg == WM_COPYDATA
//altd()
cds := PeekDWord(lp,,3)
cStr := PeekStr(cds[3],,cds[2])
@user32:ReplyMessage(1) // free the sender
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
- Martin Altmann
- Foren-Administrator
- Beiträge: 16508
- Registriert: Fr, 23. Sep 2005 4:58
- Wohnort: Berlin
- Hat sich bedankt: 111 Mal
- Danksagung erhalten: 48 Mal
- Kontaktdaten:
Re: Windows zweier Programme zusammenhängen
Hallo Rudolf,
wenn Du das eh schon machst, ehe ich das Problem nicht? Du brauchst doch nur mit PostAppEvent() die Aktion an das zweite Fenster schicken, die gerade beim ersten ausgelöst wird. Also z.B. WM_MOVE, wenn Deines verschoben wird oder WM_MINIMIZE, wenn es verkleinert wird - etc.
Bei den Koordinaten (bei einigen der Posts in mp1 und mp2 mitgegeben) musst Du halt den Ursprung Deines Fenster nehmen und die eigene Breite addieren (wenn das andere rechts daneben angezeigt werden soll).
Viele Grüße,
Martin
wenn Du das eh schon machst, ehe ich das Problem nicht? Du brauchst doch nur mit PostAppEvent() die Aktion an das zweite Fenster schicken, die gerade beim ersten ausgelöst wird. Also z.B. WM_MOVE, wenn Deines verschoben wird oder WM_MINIMIZE, wenn es verkleinert wird - etc.
Bei den Koordinaten (bei einigen der Posts in mp1 und mp2 mitgegeben) musst Du halt den Ursprung Deines Fenster nehmen und die eigene Breite addieren (wenn das andere rechts daneben angezeigt werden soll).
Viele Grüße,
Martin
Webseite mit XB2.NET und ausschließlich statischem Content in Form von HTML-Dateien: https://www.altem.de/
Webseite mit XB2.NET und ausschließlich dynamischem Content in Form von in-memory-HTML: https://meldungen.altem.de/
Mitglied der XUG Osnabrück
Vorsitzender des Deutschsprachige Xbase-Entwickler e. V.
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Re: Windows zweier Programme zusammenhängen
Hallo Martin,
dachte es geht einfacher, aber sind wie schon geschrieben viele andere Dinge die ich in beiden Programmen berücksichtigen muss. Das geht nicht nur mit den Events. Mit Postappevent kann ich nur Events an XBase Parts im Programm schicken, nicht an andere Programme. Das zweite Programm hat nur ein Taskbarmenü und keinen Hauptdialog, kann also nur angezeigt und verschoben werden wenn ein spezieller Dialog offen ist. Und wenn das zweite Programm nicht mehr genug Platz rechts vom Hauptprogramm hat, musss ich das Hauptprogramm auch nach links verschieben.
Grüße
Rudolf
dachte es geht einfacher, aber sind wie schon geschrieben viele andere Dinge die ich in beiden Programmen berücksichtigen muss. Das geht nicht nur mit den Events. Mit Postappevent kann ich nur Events an XBase Parts im Programm schicken, nicht an andere Programme. Das zweite Programm hat nur ein Taskbarmenü und keinen Hauptdialog, kann also nur angezeigt und verschoben werden wenn ein spezieller Dialog offen ist. Und wenn das zweite Programm nicht mehr genug Platz rechts vom Hauptprogramm hat, musss ich das Hauptprogramm auch nach links verschieben.
Grüße
Rudolf
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
Re: Windows zweier Programme zusammenhängen
Wie machst Du denn die Kommunikation zwischen den EXEs?Rudolf hat geschrieben:Ich schicke jetzt schon Kommandos zwischen den Prgrammen herum, dann kann ich auch ein Kommando für eine neue Position oder auf Taskleiste legen dazuprogrammieren.
Ich benutze eine gemeinsame DBF.
- HaPe
- 1000 working lines a day
- Beiträge: 996
- Registriert: So, 15. Nov 2015 17:44
- Wohnort: 71665 Vaihingen-Enz
- Hat sich bedankt: 17 Mal
- Danksagung erhalten: 15 Mal
Re: Windows zweier Programme zusammenhängen
Hallo Zusammen !
- Mit File-IN/OUT wie Roland das macht und die Ziel-EXE permanent auf Änderungen prüfen muß
- SendMessage mit WM_COPYDATA
- In ein SharedMemory die Daten schreiben und dann mit SendMessage und einem Event-Handler in der Ziel-EXE auf die Anforderung reagieren
Da gibt es mehrere Möglichkeiten:Wie machst Du denn die Kommunikation zwischen den EXEs?
- Mit File-IN/OUT wie Roland das macht und die Ziel-EXE permanent auf Änderungen prüfen muß
- SendMessage mit WM_COPYDATA
- In ein SharedMemory die Daten schreiben und dann mit SendMessage und einem Event-Handler in der Ziel-EXE auf die Anforderung reagieren
--
Hans-Peter
Hans-Peter
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Windows zweier Programme zusammenhängen
ich schätze mal das du kein Handle auf das TaskbarMenu bekommst mit FindWindow().Rudolf hat geschrieben:Das zweite Programm hat nur ein Taskbarmenü
ich "denke" das die Icons im TaskTray "anders" angesprochen werden ... muss mal suche ob ich ein Demo finde.
gruss by OHR
Jimmy
Jimmy
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Re: Windows zweier Programme zusammenhängen
Hallo, im OT4XB Source von mir ist eigentlich alles definiert, ich brauche keine Files, geht direkt über den receiver Thread. In beiden Programmen läuft dieser Thread über den ich dann Messages senden und darauf reagieren kann.
Grüße
Rudolf
Grüße
Rudolf
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
Re: Windows zweier Programme zusammenhängen
OK - wenn ich das richtig verstehe suchst Du einen anderen, einfacheren Weg zwei Fenster zu verbinden, ohne dass Du das ganze Zeugs über Deine Interprozesskommunikation erst einbauen musst
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Re: Windows zweier Programme zusammenhängen
Hallo Roland,
ich dachte genau das am Anfang, aber jetzt sehe ich dass es über die Interprocess Kommunikation doch flexibler und besser ist. Habe es mir einfacher vorgestellt, einfach beim Start die Position rechts neben dem Hauptprogramm anordnen und dann mit dem Hauptfenster verschieben. Aber wie schon geschrieben gibt es ein paar spezielle Situationen die ich auch berücksichtigen muss.
Grüße
Rudolf
ich dachte genau das am Anfang, aber jetzt sehe ich dass es über die Interprocess Kommunikation doch flexibler und besser ist. Habe es mir einfacher vorgestellt, einfach beim Start die Position rechts neben dem Hauptprogramm anordnen und dann mit dem Hauptfenster verschieben. Aber wie schon geschrieben gibt es ein paar spezielle Situationen die ich auch berücksichtigen muss.
Grüße
Rudolf
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Windows zweier Programme zusammenhängen
wenn es sich um ot4xb handelt solltest du bei Pablo die Frage stellen ...Rudolf hat geschrieben:In beiden Programmen läuft dieser Thread über den ich dann Messages senden und darauf reagieren kann.
ich gehe mal davon aus das du WM_COPYDATA meinst ?
gruss by OHR
Jimmy
Jimmy
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Re: Windows zweier Programme zusammenhängen
Hallo Jimmy, siehe Beispielcode den ich gepostet habe.
Grüße
Rudolf
Grüße
Rudolf
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Windows zweier Programme zusammenhängen
habe ich gesehen und frage deshalb ja nach.Rudolf hat geschrieben:siehe Beispielcode den ich gepostet habe.
der Code Snipe sagt gar nichts ... keine CopyData Structure oder sonstige Registrierung sichtbar.
zudem fehlt ja der Callback oher den gar nichts funktioniert.
nun willst du ja etwas im TaskTray aktivieren ...
Code: Alles auswählen
function ReceiverWndProc( hWnd , nMsg , wp , lp )
local aData
if( nMsg == WM_COPYDATA )
...
// SetForegroundWindow() not always work from external threads of
// the destination window so we post a custom Xbase++ event and call
// SetForegroundWindow() from the CRT main loop
ich habe aber noch nicht das Demo dazu gefunden ... ich such weiter
ansonsten wie schon gesagt solltest du Pablo fragen ... das ist kein Xbase++ Level mehr.
gruss by OHR
Jimmy
Jimmy
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Windows zweier Programme zusammenhängen
so ich "denke" das waren die Zeile die ich suchte.
der Trick war beim Anlegen des TaskbarIcon einen Event zu übergeben den man später nutzten kann.In your event loop, you have to check for zbeP_User+30 and show the window again.Code: Alles auswählen
oSysTray := TaskBarIcon():New(xbeP_User+30):Create() oSysTray:AddIcon( 1, SEIKO_ICO, "Seiko label print scanner") SetAppWindow():Hide()
gruss by OHR
Jimmy
Jimmy
- Rudolf
- Programmier-Gott
- Beiträge: 1418
- Registriert: Mo, 02. Jan 2006 23:03
- Wohnort: Salzburg/Österreich
- Kontaktdaten:
Re: Windows zweier Programme zusammenhängen
Hallo Jimmy,
mit Taskbar hab ich kein Problem, wenn ich mehr habe poste ich es hier. Aber die Interprocess Kommunikation funktioniert einwandfrei bei mir.
Grüße
Rudolf
mit Taskbar hab ich kein Problem, wenn ich mehr habe poste ich es hier. Aber die Interprocess Kommunikation funktioniert einwandfrei bei mir.
Grüße
Rudolf
Rudolf Reinthaler
http://www.formcommander.net
http://www.formcommander.net
- AUGE_OHR
- Marvin
- Beiträge: 12906
- Registriert: Do, 16. Mär 2006 7:55
- Wohnort: Hamburg
- Hat sich bedankt: 19 Mal
- Danksagung erhalten: 45 Mal
Re: Windows zweier Programme zusammenhängen
hm ... wie geht das ?Rudolf hat geschrieben:Das zweite Programm hat nur ein Taskbarmenü und keinen Hauptdialog
die Taskbar und nicht der TaskTray rechts unten bei der Uhr ?Rudolf hat geschrieben:mit Taskbar hab ich kein Problem.
dann hab ich das wohl falsch verstanden.
das ist doch "nur" rechnen.Rudolf hat geschrieben:Und wenn das zweite Programm nicht mehr genug Platz rechts vom Hauptprogramm hat, musss ich das Hauptprogramm auch nach links verschieben.
die 2nd App rechts hat doch ein Minimum
Code: Alles auswählen
oDialog:minSize := MyMinSize
gruss by OHR
Jimmy
Jimmy