- Offizieller Beitrag
Eine scheinbar simple Aufgabe: Ein Fenster nach vorn bringen (SW_SHOW, SW_SHOWNORMAL, BringWindowToTop). Alle 3 Versuche führen angeblich zum Erfolg: das aktive Fenster ist hinterher dasjenige, welches ich nach vorn bringen wollte. Aber sichtbar ist weiterhin das alte Fenster. Erst dachte ich, dass es aus dem Editor heraus fehlschlägt. Aber der Aufruf der exe aus einer Shell heraus bringt dasselbe Ergebnis. Das verwirrt mich.
Code
include winim/[inc\winuser]
import strutils
proc MyFindWindow(class = "", title = ""): HWND =
let
className = newWideCString(class, class.len)
wndName = newWideCString(title, title.len)
if class == "" and title == "":
result = FindWindowW(nil, nil)
elif class != "" and title == "":
result = FindWindowW(cast[LPWSTR](className), nil)
elif class == "" and title != "":
result = FindWindowW(nil, cast[LPWSTR](wndName))
else:
result = FindWindowW(cast[LPWSTR](className), cast[LPWSTR](wndName))
var hActive = MyFindWindow()
echo "ACTIVE: 0x", toHex(hActive)
let h = MyFindWindow(class="MozillaWindowClass")
echo "hWnd Mozilla: 0x", toHex(h)
if bool(IsWindow(h)):
BringWindowToTop(h) # ohne Erfolg, hActive ist angeblich hWnd
# ShowWindow(h, SW_SHOW) # ohne Erfolg, hActive ist angeblich hWnd
# ShowWindow(h, SW_SHOWNORMAL) # ohne Erfolg, hActive ist angeblich hWnd
hActive = MyFindWindow()
echo "ACTIVE: 0x", toHex(hActive)
if hActive != h: echo "Aktion fehlgeschlagen"
else:
echo "kein Handle"
Alles anzeigen
EDIT:
FindWindow ist nicht geeignet das aktive Fenster zu identifizieren. GetForeGroundWindow() ist die richtige Funktion dafür. Dann zeigt sich auch, dass das aktive Fenster sich nicht ändert, obwohl alle Funktionen Erfolg vermelden.
Code
include winim/[inc\winuser]
import strutils
var hFore = GetForegroundWindow()
echo "Foreground Wnd: 0x", toHex(hFore)
let
class = "MozillaWindowClass"
h = FindWindowW(cast[LPWSTR](newWideCString(class, class.len)), nil)
echo "Mozilla: 0x", toHex(h)
if bool(IsWindow(h)):
echo bool(SetForegroundWindow(h)) # true
# echo bool(BringWindowToTop(h)) # true
# echo bool(ShowWindow(h, SW_SHOW)) # true
# echo bool(ShowWindow(h, SW_SHOWNORMAL)) # true
hFore = GetForegroundWindow()
echo "active Wnd: 0x", toHex(hFore)
if hFore != h: echo "Mozilla isn't active"
else:
echo "none window handle"
Alles anzeigen