Word in Vordergrund holen [ERLEDIGT]

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Word in Vordergrund holen [ERLEDIGT]

Beitrag von AUGE_OHR »

Koverhage hat geschrieben: Mo, 01. Apr 2019 14:54 warum nicht gleich in die Wissensbasis oder Xbase++ Wiki ?
tja ... bei mir funktioniert es nicht :!:
statt Word holt er Outlook bzw. versucht es ... so klappt das nicht [-X
No_Word_but_Outlook.jpg
No_Word_but_Outlook.jpg (34.61 KiB) 11837 mal betrachtet
"OpusApp" ist der allgemeine Classname der Office Apps während der Classname von Word "_WwG" ist.
den findet man aber nicht im Taskmanager , wo man die Title der Fenster hat, sondern in der Processlist (s.h. 1st Antwort)
gruss by OHR
Jimmy
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Word in Vordergrund holen [ERLEDIGT]

Beitrag von Koverhage »

Jimmy,
da machst Du was falsch. Es ist überall beschrieben, dass der Klassenname OpusApp ist.
Hier funktioniert es einwandfrei, was Hubert ja bestätigt hat.
Ich starte das auch nicht über Dos / Shell sonderne als Xbase++ GUI (activeX) Anwendung.
Habe es allerdings nur mit Xbase++ 1.9 probiert, wenn Du es mit der 2.0 probiert hast und es da nicht
funktioniert...
Gruß
Klaus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Word in Vordergrund holen [ERLEDIGT]

Beitrag von brandelh »

Ich habe es mit der 2.0 kompiliert und getestet, ich habe hier Word 2010 ... habe ich auch Outlook, mal schnell nachsehen :?

Ja, ich habe das Office 2010 mit Outlook installiert, nutze aber Thunderbird als eMail Programm, dennoch hier hat es funktioniert.
Gruß
Hubert
Benutzeravatar
mikehoffmann
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 133
Registriert: Mo, 21. Sep 2015 16:22
Hat sich bedankt: 1 Mal
Danksagung erhalten: 18 Mal

Re: Word in Vordergrund holen [ERLEDIGT]

Beitrag von mikehoffmann »

Wenn das Fenster minmiert ist, dann wird es nicht nach vorne geholt. Deswegen habe ich ja die Mini-Mieze eingebaut.
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Word in Vordergrund holen [ERLEDIGT]

Beitrag von brandelh »

Ich habe mein Word minimiert (mit System Menü oben rechts der kleine Balken neben dem Vollbild und Schließen), und es kommt nach vorne.
Eventuell ist es aber auch von Windows Version zu Version unterschiedlich. Ich habe Win 7
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Word in Vordergrund holen [ERLEDIGT]

Beitrag von AUGE_OHR »

Koverhage hat geschrieben: Di, 02. Apr 2019 7:08da machst Du was falsch.
[-X
Koverhage hat geschrieben: Di, 02. Apr 2019 7:08 Es ist überall beschrieben, dass der Klassenname OpusApp ist.
das hab ich durchaus auf dem Zettel aber es gibt ebne noch andere Sachen die eine Rolle spielen.
Koverhage hat geschrieben: Di, 02. Apr 2019 7:08 Hier funktioniert es einwandfrei, was Hubert ja bestätigt hat.
ich zweifel ja nicht daran das es mit dem Classnamen funktioniet aber es gibt den gleiche "Super" Classnamen "OpusApp" für Word und Outlook :!:

der eigentliche Classname von Word ist wie schon gesagt "_WwG"
Koverhage hat geschrieben: Di, 02. Apr 2019 7:08 Ich starte das auch nicht über Dos / Shell sonderne als Xbase++ GUI (activeX) Anwendung.
Habe es allerdings nur mit Xbase++ 1.9 probiert, wenn Du es mit der 2.0 probiert hast und es da nicht
funktioniert...
das ist kein DOS Fenster sondern VIO sonst würde oben links "cmd" stehen

---

mich wundert

Code: Alles auswählen

ShowWindow(nHwnd, SW_SHOW)
denn wir sprechen doch von dem Icon was in die Taskleiste "minimiert" wurde, oder :?:

Code: Alles auswählen

SW_RESTORE         9 Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position. An application should specify this flag when restoring a minimized window.
SW_SHOW            5 Activates the window and displays it in its current size and position.
der Hinweis von Mike und meine Antwort bezogen sich darauf das man das Icon erst mal wieder "restore"n muss :!:
ein SW_SHOW sollte das nicht tun und alle Aktionen gehen ins leere [-X
gruss by OHR
Jimmy
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Word in Vordergrund holen [ERLEDIGT]

Beitrag von Koverhage »

Dann muss es an Deiner Windows / Word Version liegen.
Ich habe viele Lösungen gesehen die mit OpusApp arbeiten, die Programmierer scheinen alle keine Ahnung zu haben oder was meinst Du ?
Wenn ein Show das Gleiche bewirkt wie ein Klick auf das Icon in der Taskleiste, warum soll ich da noch ein Restore machen ?
Info: Windows 7 Ultimate, Office/Word 2007
Werde es nachher mit Win10 probieren und berichten.
Gruß
Klaus
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Word in Vordergrund holen [ERLEDIGT]

Beitrag von Koverhage »

Windows 7 Prof. Word 2010 -> OK
Gruß
Klaus
Benutzeravatar
HaPe
1000 working lines a day
1000 working lines a day
Beiträge: 995
Registriert: So, 15. Nov 2015 17:44
Wohnort: 71665 Vaihingen-Enz
Hat sich bedankt: 17 Mal
Danksagung erhalten: 15 Mal

Re: Word in Vordergrund holen [ERLEDIGT]

Beitrag von HaPe »

Windows 10 x64 und WinWord 2016 mit Xbase++ 2.0 => geht sowohl minimiertes wie hinter einem anderen Fenster "verstecktes" Word. 8)
--
Hans-Peter
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Word in Vordergrund holen [ERLEDIGT]

Beitrag von AUGE_OHR »

Koverhage hat geschrieben: Di, 02. Apr 2019 8:49 Ich habe viele Lösungen gesehen die mit OpusApp arbeiten, die Programmierer scheinen alle keine Ahnung zu haben oder was meinst Du ?
hast du eine Xbase++ Lösung die "OpusApp" enthält gefunden :?:

es gibt viele Quellen mit unterschiedlichen Niveau.
Wenn man viel (Demo) Source Code gesehen hat kommt man schon dahinter auf welchem Niveau der Code geschrieben wurde.

ist starte meine Suche bei Google dann immer mit "+MSDN +Begriff" wobei ich meisten zunächst nach Konstanten suche die ALLE verwenden. über den "Sinn" der Konstanten komme ich dann dahinter was die API Function machen sollte wenn man die Konstanten verwendet.

wenn eure Word / Outlook / Excel / Access / Powerpoint & Co auf SW_SHOW so reagiert das es die App auch aus der Taskleiste holt und "normal" anzeigt dann ist das "nicht normal" [-X .

natürlich ist so eine Erweiterung ganz einfach und vielleicht dachte ein Programmier(in) bei M$ das es doch "ganz praktisch sei" wenn man SW_SHOW auf SW_RESTORE erweitert weil "viele falsche Anfragen" deshalb kommen und man nicht immer auf SW_RESTORE verweisen muss was dazu gedacht ist [-o<

btw.
bitte mal testen : jeweils Vollbild und dann minimieren und Test App starten. welche Grösse hat dann Word & Co :?:

---

leider funktioniert Code aus anderen Sprachen unter Xbase++ nicht immer so wie erhofft.

sogar ot4xb verhält sich anders (besser :thumbright: ) als DllCall() :pukeleft:

Code: Alles auswählen

/************************************************************
* warum versagt SysSysColors ?
* DLLFUNCTION SetSysColors(n,@s,@v) USING STDCALL FROM USER32.DLL
* DLLFUNCTION GetSysColor(n) USING STDCALL FROM USER32.DLL
************************************************************/
   // fail  
   * SetSysColors(1,aNew,aRGB)
   // work
   @USER32:SetSysColors(1,aNew,aRGB)
Koverhage hat geschrieben:Wenn ein Show das Gleiche bewirkt wie ein Klick auf das Icon in der Taskleiste, warum soll ich da noch ein Restore machen
wie schon gesagt ist die Aussage von Mike und mir gemäss Windows wo jede Windows App drauf reagiert.
Es gibt eben die beiden Konstanten wobei
SW_SHOW 5 Activates the window and displays it in its current size and position.
bei einer minimierten App, in der Taskleiste, sind Size und Pos 0

für diesen Fall ist nun SW_RESTORE gedacht
SW_RESTORE 9 Activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position.

An application should specify this flag when restoring a minimized window.
wie schon gesagt "so" steht es da bei MSDN


! Note : die ganzen SW_ Konstanten funktionieren dann wenn es ein Menu gibt wenn man "normal" auf das Icon oben links klickt. wenn das Menu nicht existiert oder gesperrt ist funktionieren die Konstanten nicht mehr.

der eigentliche Windows Befehl währe

Code: Alles auswählen

      rc := {0,0,0,0}
      @user32:GetClientRect(hWnd,@rc)
      @user32:SetWindowPos(::hControl,0,0,0,rc[3],rc[4],nOr(SWP_NOACTIVATE,SWP_NOCOPYBITS,SWP_NOREPOSITION,SWP_NOSENDCHANGING,SWP_NOZORDER))
welcher ausgeführt wird wenn der WM_SIZE Event vom Control empfangen wird.


---

für das Thema ist die Lösung ausreichend wenn eure Word-Version so reagieren ...
aber wie der Snapshot zeigt hab ich eine Kombination erwischt die völlig versagen kann
gruss by OHR
Jimmy
Benutzeravatar
mikehoffmann
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 133
Registriert: Mo, 21. Sep 2015 16:22
Hat sich bedankt: 1 Mal
Danksagung erhalten: 18 Mal

Re: Word in Vordergrund holen [ERLEDIGT]

Beitrag von mikehoffmann »

Die korrekte Variante ist die mit dem SW_RESTORE. Alles andere kann funktionieren, muss aber nicht.
Das BringWindowToTop ist nicht erforderlich, würde ich behaupten. Bei mir klappt es wie erwartet ohne. Windows 7 und Word 2013.
SetForegroundWindow macht auch SetActiveWindow und das zerrt das gute Stück damit schon nach vorne. Lustigerweise sogar, wenn es das nicht sollte. Ich wäre mit der Behauptung sehr vorsichtig, dass es damit immer funktioniert.
Gibt es gegenteilige Testergebnisse?
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Word in Vordergrund holen [ERLEDIGT]

Beitrag von Koverhage »

@Mike
Außer von Jimmy nicht (aber in Bezug auf OpusApp).
@Jimmy
Meistens schaue ich in Delphi oder C Foren. Delphi ist meiner Meinung nach am besten für Infos geeignet.
hast du eine Xbase++ Lösung die "OpusApp" enthält gefunden :?:
Ja meine, aber ansonsten siehe meinen vorherigen Satz.
Mal ehrlich: Was hat Dein Beispiel mit SetSysColor mit Office/Word zu tun ?
es gibt viele Quellen mit unterschiedlichen Niveau.
Deswegen nehme ich ein Niveau welches für mich verständlich ist, eben Delphi und C.
Gruß
Klaus
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Word in Vordergrund holen [ERLEDIGT]

Beitrag von AUGE_OHR »

Koverhage hat geschrieben: Di, 02. Apr 2019 17:40 Was hat Dein Beispiel mit SetSysColor mit Office/Word zu tun ?
das war ein Beispiel das die Xbase++ DllCall Function eben auch versagt und ich deshalb ot4xb verwende.

Mike und ich sagen dir nur wie es sein sollte und es würde auch mit SW_RESTORE funktionieren und das dann Universell.
gruss by OHR
Jimmy
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
Beiträge: 2470
Registriert: Fr, 23. Dez 2005 8:00
Wohnort: Aalen
Hat sich bedankt: 102 Mal
Danksagung erhalten: 3 Mal
Kontaktdaten:

Re: Word in Vordergrund holen [ERLEDIGT]

Beitrag von Koverhage »

Mit SHow funktioniert es auch universell, nur bei Dir nciht. Bei Di kommt ja auch Outlook anstatt Word.
Gruß
Klaus
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
Beiträge: 15689
Registriert: Mo, 23. Jan 2006 20:54
Wohnort: Germersheim
Hat sich bedankt: 65 Mal
Danksagung erhalten: 33 Mal
Kontaktdaten:

Re: Word in Vordergrund holen [ERLEDIGT]

Beitrag von brandelh »

Streitet euch doch nicht ;-)

Laut der API Beschreibung ist es wohl schon richtig SW_RESTORE zu nutzen, aber wo liegt das Problem, sind nur 2 Zeilen zu ändern ;-)
Auch dies funktioniert bei mir.

Code: Alles auswählen

#define SW_SHOW      5
#define SW_RESTORE  9
...
      ShowWindow( nHwnd, SW_RESTORE ) // SW_SHOW)
...
Gruß
Hubert
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12903
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 44 Mal

Re: Word in Vordergrund holen [ERLEDIGT]

Beitrag von AUGE_OHR »

moin,
Koverhage hat geschrieben: Mi, 03. Apr 2019 8:42 Mit SHow funktioniert es auch universell,
hm ... Win 10/8/7/XP/2K :?:

---

es gibt ja in Xbase++ o:Hide() und o:Show()

Code: Alles auswählen

ShowWindow(nHandle,SW_HIDE)
ShowWindow(nHandle,SW_SHOW)
Frage : wenn eine Xbase++ App in die Taskleiste minimiert wurde bekommt man die App dann mit o:Show() :?:

NEIN, denn das ist "nicht so vom Erfinder gedacht", da es dafür SW_RESTORE gibt was selbstverständlich in JEDER Windows Version funktioniert.
Koverhage hat geschrieben:nur bei Dir nciht. Bei Di kommt ja auch Outlook anstatt Word.
bei entsprechend vielen Test Szenarien, unter verschiedene OS, kommt man auch zu so einem Resultat.

---

es über den Classnamen "alleine" ist, bei weitere Instanzen, nicht eindeutig und er nimmt die "erste die er findet".
dafür gibt es dann den 2nd Parameter "Title" ... und auch das ist nicht eindeutig da ich 2 Fenster (XbpDialog) mit dem selben Titel habe wenn ich eine weiter Instanz starte.

wie ich schon sagte ist die Tasklist und FindWindow() nur begrenzt einsetzbar.
Die erste Antwort mit der ProcessID wäre nun die Lösung... aber die liegt eben noch eine Stufe höher.
gruss by OHR
Jimmy
Antworten