Fremdes Fenster verschieben unter Win7
Verfasst: 02.09.2015 07:40
Ich habe ein Programm, welches unter WinXP wunderbar funktionierte, um ein Fenster beliebiger Größe auf einen anderen Desktop (realen Bildschirm) zu verschieben. Der Ablauf ist: Klicken auf das Fenster, klicken auf das Taskleistensymbol, im erscheinenden Menu den Bildschirm auswählen. Das Fenster wird in seiner vorherigen Position und Größe auf dem anderen Bildschirm dargestellt.
Unter Win7 funktioniert die unter WinXP mit 32-bit erstellte Exe bedingt: Das Fenster wird verschoben, erscheint aber an der Pos 0,0 auf dem anderen Bildschirm.
Führe ich den Code in PB unter Win7 aus, passiert gar nichts. Der Debug des Windows-Handles zeigt anscheinend, daß zwischendurch das aktive Fenster wechselt, und zwar wenn ich auf die Taskleiste klicke. Win7 behandelt anscheinend die Taskleiste als Fenster.
Nur: Warum funktioniert dann das unter WinXP erstellte Programm?
Und wie bekomme ich raus, ob der Handle ein "echtes" verschiebbares Fenster oder die Taskleiste ist?
Und schließe ich provisorisch die Taskleiste aus, wird trotzdem nichts verschoben? Funktioniert MoveWindow_() unter Win7 nicht mehr?
Sorry, für die Include bitte ein beliebiges Icon angeben.
Unter Win7 funktioniert die unter WinXP mit 32-bit erstellte Exe bedingt: Das Fenster wird verschoben, erscheint aber an der Pos 0,0 auf dem anderen Bildschirm.
Führe ich den Code in PB unter Win7 aus, passiert gar nichts. Der Debug des Windows-Handles zeigt anscheinend, daß zwischendurch das aktive Fenster wechselt, und zwar wenn ich auf die Taskleiste klicke. Win7 behandelt anscheinend die Taskleiste als Fenster.
Nur: Warum funktioniert dann das unter WinXP erstellte Programm?
Und wie bekomme ich raus, ob der Handle ein "echtes" verschiebbares Fenster oder die Taskleiste ist?
Und schließe ich provisorisch die Taskleiste aus, wird trotzdem nichts verschoben? Funktioniert MoveWindow_() unter Win7 nicht mehr?
Code: Alles auswählen
wIDmain.i = OpenWindow(#PB_Any, 0, 0, 200, 100, "Desktop-Switcher", #PB_Window_SystemMenu | #PB_Window_Invisible)
If IsWindow(wIDmain)
iIDds.i = CatchImage(#PB_Any, ?logo)
sIDds.i = AddSysTrayIcon(#PB_Any, WindowID(wIDmain), ImageID(iIDds))
SysTrayIconToolTip(sIDds, "Desktop-Switcher")
exit.l = #False
Repeat
event.l = WaitWindowEvent(200)
If event = #PB_Event_SysTray
hlast.i = hfore.i ;letztes Vordergrund-Fenster merken
dcnt.l = ExamineDesktops()
mIDds.i = CreatePopupMenu(#PB_Any)
If IsMenu(mIDds)
For i.l = 1 To dcnt
MenuItem(i - 1, "- " + Str(i) + " -")
Next
MenuBar()
mIDend.l = dcnt
MenuItem(mIDend, "Beenden")
EndIf
DisplayPopupMenu(mIDds, WindowID(wIDmain))
ElseIf event = #PB_Event_Menu
evID.i = EventMenu()
If evID = mIDend
exit = #True
Else
dcnt.l = ExamineDesktops()
desk.l = evID
If desk >= 0 And desk < dcnt
If IsWindow_(hlast)
hrect.RECT
If IsZoomed_(hlast) ;maximiert
ShowWindow_(hlast, #SW_RESTORE) ;Fenster normal
MoveWindow_(hlast, DesktopX(desk), DesktopY(desk), DesktopWidth(desk), DesktopHeight(desk), 1)
ShowWindow_(hlast, #SW_MAXIMIZE) ;Fenster maximieren
Else
GetWindowRect_(hlast, hrect.RECT)
hwdt = hrect\right - hrect\left
hhgh = hrect\bottom - hrect\top
MoveWindow_(hlast, DesktopX(desk), DesktopY(desk), hwdt, hhgh, 1)
EndIf
EndIf
EndIf
EndIf
ElseIf event = 0 ;kein Event, Timeout
hfore = GetForegroundWindow_() ;aktuelles Vordergrund-Fenster merken
Debug hfore
EndIf
Until exit
EndIf
DataSection
logo:
IncludeBinary "ds.ico"
EndDataSection