AppFocus auf Word setzen

Einbindung von Office-Komponenten wie Word, Excel usw.

Moderator: Moderatoren

AppFocus auf Word setzen

Beitragvon Koverhage » Mo, 10. Mär 2014 10:07

Unter XP bekommt Word den Focus wenn ich in Xbase++ aufrufe.
Unter Windows 7 bekommt Word nicht den Focus sondern wird in der Taskleiste abgelegt.
Manche Kunden rufen dann an, das Programm hängt, oder ähnliches.
Wir kann ich erreichen, das den Focus erhält und angezeigt wird ?
Gruß
Klaus
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1908
Registriert: Fr, 23. Dez 2005 9:00
Wohnort: Aalen

Re: AppFocus auf Word setzen

Beitragvon brandelh » Mo, 10. Mär 2014 10:23

eigentlich müsste das oWord:visible := .t. (oder so ähnlich machen).

In dem Beispiel von Alaska ...\XPPW32\source\samples\activex\msword\feed.prg
Code: Alles auswählen
*  oDoc:close() // das Dokument nicht schließen
*  oWord:Quit() // Word nicht beenden
oWord:destroy() // Die Xbase++ Referenz auf das ActiveX Objekt von Word schließen.

bei mir erscheint die schwarze CMD Box vor dem Word-Dokument, aber ich kann dort hinein clicken.
Wenn man statt einem CRT / VIO Programm ein normales Fenster hätte, sollte Word automatisch vorne sein (Windows 7 Pro 64Bit ... )

Du kannst aber auch jedes Fenster explizit suchen und nach vorne bringen, hier ist ein Beispiel um ein Fenster zu schließen, aber statt CloseWindow() kannst du was passendes wählen , toFront oder setfocus suchen ;-)

Code: Alles auswählen
*--------------------------------------------------------------------------
// #include "ot4xb.ch"
// #include "dll.ch"
*--------------------------------------------------------------------------
function GetStandardProgramm(cFile, cPath)   // cPath force to EXE
   local cExe := ChrR(0,260) // MAX_PATH is 260
   if empty(cPath)
      cPath := cAppDir()
   endif
   if @shell32:FindExecutableA(cFile, cPath, @cExe) < 32
      cExe := ""
   else
      cExe := TrimZ(cExe)
   end
return cExe
*--------------------------------------------------------------------------
function CloseRunningExe(cTitle)
   local nHWD, lOK := .f.
   nHWD := FindWindow(cTitle)
   if ! empty(nHWD)
      CloseWindow(nHWD)
      sleep(50)
      nHWD := FindWindow(cTitle)
      lOK  := empty(nHWD)
   endif
return lOK
*--------------------------------------------------------------------------
function FindWindow(cTitle)
   local nHWD := 0
   if ! empty(cTitle)
      nHWD := @User32:FindWindowA(0,cTitle)
   endif
return nHWD
*--------------------------------------------------------------------------
#define WM_SYSCOMMAND   0x0112
#define SC_CLOSE        0xF060
function CloseWindow(nHWD)
   @User32:SendMessageA(nHWD, WM_SYSCOMMAND, SC_CLOSE, 0)
return .t. // Erfolg prüfen ?
*--------------------------------------------------------------------------
function GetLastError() // Errorcodes: http://msdn.microsoft.com/en-us/library/windows/desktop/ms681381%28v=vs.85%29.aspx
return @Kernel32:GetLastError()


Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13497
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim

Re: AppFocus auf Word setzen

Beitragvon brandelh » Mo, 10. Mär 2014 10:28

Tom hat es hier auf den Punkt gebracht, einfach beides zusammenbauen ;-)
:arrow: viewtopic.php?f=23&t=4518
Code: Alles auswählen
FUNCTION DlgToFront(oDlg)
LOCAL nDlgHandle:=oDlg:GetHwnd()
BringWindowToTop( nDlgHandle )
SetForegroundWindow( nDlgHandle )
RETURN NIL

DLLFUNCTION BringWindowToTop( nHwnd )           USING STDCALL FROM USER32.DLL
DLLFUNCTION SetForegroundWindow( nHwnd )        USING STDCALL FROM USER32.DLL
Gruß
Hubert
Benutzeravatar
brandelh
Foren-Moderator
Foren-Moderator
 
Beiträge: 13497
Registriert: Mo, 23. Jan 2006 21:54
Wohnort: Germersheim

Re: AppFocus auf Word setzen

Beitragvon AUGE_OHR » Sa, 22. Mär 2014 19:40

Koverhage hat geschrieben:Unter XP bekommt Word den Focus wenn ich in Xbase++ aufrufe.
Unter Windows 7 bekommt Word nicht den Focus sondern wird in der Taskleiste abgelegt.
hm ... "wie" rufst du den Word auf ?

@Hubert
wenn es in der Taskleiste liegt nützen IMHO die beiden Function nichts.
Code: Alles auswählen
#define SW_HIDE             0
#define SW_SHOWNORMAL       1
#define SW_NORMAL           1
#define SW_SHOWMINIMIZED    2
#define SW_SHOWMAXIMIZED    3
#define SW_MAXIMIZE         3
#define SW_SHOWNOACTIVATE   4
#define SW_SHOW             5
#define SW_MINIMIZE         6
#define SW_SHOWMINNOACTIVE  7
#define SW_SHOWNA           8
#define SW_RESTORE          9
#define SW_SHOWDEFAULT      10
#define SW_MAX              10

DLLFUNCTION ShowWindow( nHwnd, nCmdShow ) USING STDCALL FROM USER32.DLL
DLLFUNCTION BringWindowToTop( nHwnd ) USING STDCALL FROM USER32.DLL
DLLFUNCTION SetForegroundWindow( nHwnd ) USING STDCALL FROM USER32.DLL

// wenn minimiert
         ShowWindow( nHwnd, SW_RESTORE )
         ShowWindow( nHwnd, SW_SHOWNORMAL )
// Fenster nach vorne ( Z-Achse ) bringen
         BringWindowToTop( nHwnd )
         SetForegroundWindow( nHwnd )
gruss by OHR
Jimmy
Benutzeravatar
AUGE_OHR
Marvin
Marvin
 
Beiträge: 10315
Registriert: Do, 16. Mär 2006 8:55
Wohnort: Hamburg

Re: AppFocus auf Word setzen

Beitragvon Koverhage » So, 23. Mär 2014 11:07

Hallo Jimmy,

so wie hier beschrieben
viewtopic.php?f=28&t=7586#p84437
Gruß
Klaus
Benutzeravatar
Koverhage
Der Entwickler von "Deep Thought"
Der Entwickler von "Deep Thought"
 
Beiträge: 1908
Registriert: Fr, 23. Dez 2005 9:00
Wohnort: Aalen


Zurück zu MS Office

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast