Moin Moin,
ich hab hier mal ein ganz spannendes Problem.
Ich habe einen Windows Service welcher unter LocalSystem läuft (Session 0 isolated, Interaktion mit Desktop ist nicht vorgesehen, fliegt im neuen Windows sowieso raus), dieser Service soll über einen API Aufruf aus der user32.dll das aktuell fokusierte Fenster rausfinden.
Den aktuellen Benutzer zum Fenster habe ich, ich kann auch dessen Identität annehmen.
Durch die isolation der Session 0, indem der Service nun mal läuft scheint es doch einige Probleme zu geben wenn ich „GetForegroundWindow“ aus der user32.dll aufrufe, bekomme also immer 0 zurück. Selbst wenn ich das Handle des fokusierten Fensters einfach mal fix im Code verdrahte, oder bspw. über die Prozesse den „MainWindowTitle“ auslese bekomme ich stets einen leeren String zurück.
Die Probleme treten eigentlich nur auf wenn ich Aufrufe mit der user32.dll starte, Zugriffsrechte usw. werden durch Impersonation tadelos übernommen.
Wer hat eine Idee?? :confused:
Aktuell sieht es bei mir folgendermaßen aus, bringt aber nur ein schwarzes Bild.
_
Private Shared Function PrintWindow(hwnd As IntPtr, hDC As IntPtr, nFlags As UInteger) As Boolean
End Function
Sub ABC()
Dim user As New ImpersonateUser()
user.Impersonate(„domain“, „user“, „pw“)
Write(Environment.UserName)
Try
Dim p As Process = Process.GetProcessesByName(„notepad“)(0)
Dim handle As IntPtr = p.Handle ‚p.MainWindowHandle läuft ebenfalls ins leere…
Dim bmp As New Bitmap(1680, 1010)
Dim g As Graphics = Graphics.FromImage(bmp)
Dim dc As IntPtr = g.GetHdc
Dim result As Boolean = PrintWindow(handle, dc, 0)
g.ReleaseHdc(dc)
g.Dispose()
If result Then
bmp.Save(„C:TEMPtest.jpeg“, Imaging.ImageFormat.Jpeg)
Else
bmp.Save(„C:TEMPtest.jpeg“, Imaging.ImageFormat.Jpeg)
Write(„Kein screenshot :(„)
End If
bmp.Dispose()
Catch ex As Exception
Write(ex.Message)
End Try
user.Undo()
End Sub[/CODE][CODE] _
Private Shared Function PrintWindow(hwnd As IntPtr, hDC As IntPtr, nFlags As UInteger) As Boolean
End Function
Sub ABC()
Dim user As New ImpersonateUser()
user.Impersonate(„domain“, „user“, „pw“)
Write(Environment.UserName)
Try
Dim p As Process = Process.GetProcessesByName(„notepad“)(0)
Dim handle As IntPtr = p.Handle ‚p.MainWindowHandle läuft ebenfalls ins leere…
Dim bmp As New Bitmap(1680, 1010)
Dim g As Graphics = Graphics.FromImage(bmp)
Dim dc As IntPtr = g.GetHdc
Dim result As Boolean = PrintWindow(handle, dc, 0)
g.ReleaseHdc(dc)
g.Dispose()
If result Then
bmp.Save(„C:TEMPtest.jpeg“, Imaging.ImageFormat.Jpeg)
Else
bmp.Save(„C:TEMPtest.jpeg“, Imaging.ImageFormat.Jpeg)
Write(„Kein screenshot :(„)
End If
bmp.Dispose()
Catch ex As Exception
Write(ex.Message)
End Try
user.Undo()
End Sub[/CODE]