Moin,
Grundfrage: Ist es möglich ein Window-Handle eines unsichtbaren Fensters abzufragen? Oder existiert das Fenster wenn es Invisible gesetzt wird gar nicht mehr und jegliche Abfragen ala WinGet...() sind unmöglich?
Hintergrund: Möchte Word möglichst sauber in eine GUI einbetten. Das Problem ist das für das einbetten ein Window-Handle benötigt wird welches ich nicht mehr Abfragen kann wenn ich _Word_Create() mit den Parameter "Visible=False" aufrufe.
Nach dem Abfragen des Handle die Word Anwendung Invisible zu setzen dauert zu lange und sieht dementsprechend unsauber aus.
AutoIt: Testskript
#RequireAdmin
#include <WinAPI.au3>
#include <Word.au3>
#include <Array.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIConstants.au3>
#include <constants.au3>
$Sigpath="C:\Users\User\AppData\Roaming\Microsoft\Signatures\test.htm"
$wordwinclass="[CLASS:OpusApp]"
$wordobject=""
;Aufbauen der Signaturen-GUI
$OutSig_GUI = GUICreate("ACP - Outlook-Signaturen Editor", 1109, 532,-1,-1)
$Button_Save_GUI3 = GUICtrlCreateButton("Speichern", 8, 8, 145, 41)
GUICtrlSetFont(-1, 14, 800, 0, "MS Sans Serif")
$Button_Close_GUI3 = GUICtrlCreateButton("Abbrechen", 8, 56, 145, 41)
GUICtrlSetFont(-1, 14, 800, 0, "MS Sans Serif")
$ListView_GUI3 = GUICtrlCreateListView("", 8, 104, 145, 417)
GUISetState(@SW_SHOW)
;Laden der ersten Signatur und einbetten von Word in die GUI
Local $wordobject = _Word_Create()
$hPid=_Word_DocOpen($wordobject,$Sigpath)
;~ ;WinWait($wordwinclass,"Word")
$hChild = WinGetHandle($wordwinclass,"Word")
$wordobject.Visible = True
$Style = _WinAPI_SetWindowLong($hChild, $GWL_STYLE, BitOR($WS_POPUP, $WS_VISIBLE))
$NEXSTYLE = DllCall("user32.dll", "int", "GetWindowLong", "hwnd", $hChild, "int", 236)
DllCall("user32.dll", "int", "SetWindowLong", "hwnd", $hChild, "int", 236, "int")
DllCall("user32.dll", "int", "SetParent", "hwnd", $hChild, "hwnd", $OutSig_GUI)
WinMove($hChild, "",160, -68, 950, 601)
WinActivate($OutSig_GUI)
TrayTip("T",$hChild&@CRLF&"Handle",10)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
_Word_Quit($wordobject,$WdDoNotSaveChanges)
Exit
Case $Button_Close_GUI3
_Word_Quit($wordobject,$WdDoNotSaveChanges)
Exit
EndSwitch
WEnd
Alles anzeigen
PS: Da sind vermutlich noch includes von vorherigen Tests dabei, also einfach ignorieren.