Ermitteln auf welchem Monitor sich Prozess befindet

  • VB.NET

Es gibt 4 Antworten in diesem Thema. Der letzte Beitrag () ist von Serow.

    Ermitteln auf welchem Monitor sich Prozess befindet

    Hallo,
    mir fehlt ein Lösungsansatz wie ich ermitteln kann auf welchem Monitor sich ein fremder Prozess befindet.
    Das habe ich bereits als Ansatz:

    API

    VB.NET-Quellcode

    1. <DllImport("user32.dll")> _
    2. Public Shared Function GetWindowRect(ByVal hWnd As IntPtr, ByRef lpRect As RECT) As Boolean
    3. End Function


    Und hier die Funktion:

    VB.NET-Quellcode

    1. Public Shared Sub MoveWindowToMonitor(ByVal monitor As Integer, ByVal hwnd As IntPtr)
    2. Try
    3. Dim windowRec As Desktop.Win32.RECT
    4. GetWindowRect(hwnd, windowRec)
    5. Dim rec As New Rectangle
    6. rec.X = windowRec.Left
    7. rec.Y = windowRec.Top
    8. rec.Width = windowRec.Right - windowRec.Left + 1
    9. rec.Height = windowRec.Bottom - windowRec.Top + 1
    10. 'Hier ist das Problem
    11. For Each scr In Screen.AllScreens
    12. If rec.Location.X > scr.WorkingArea.X Then
    13. MsgBox("Fenster befindet sich auf " & scr.DeviceName)
    14. End If
    15. Next
    16. 'Desktop.Win32.SetWindowPos(hwnd, New IntPtr(0), _
    17. ' Screen.AllScreens(monitor).WorkingArea.Left, _
    18. ' Screen.AllScreens(monitor).WorkingArea.Top, _
    19. ' (rec.Size.Width + 16), _
    20. ' (rec.Size.Height + 38), 64)
    21. Catch ex As Exception
    22. MsgBox(ex.Message, 16)
    23. End Try
    24. End Sub
    1. was wilst du damit erreichen?
    2. was ist genau das problem was gibt er dir für einen screen zurück?
    3. wofür soll dieses sinnlose try catch da sein schmeiß es raus!
    4. du soltest dir auch klar machen das es processe gibt die nicht auf dem bildschirm zu sehen sind
    Das Ziel soll sein das wenn sich z.B der Prozess X auf Bildschirm 1 befindet, dann auf den 2ten Bildschirm gezogen wird, funktioniert mit SetWindowPos API auch aber wie ermittel ich jetzt ob sich der Prozess X auf Bildschirm 1 oder 2 befindet? Derzeit wird immer \\DISPALY 2 zurückgegeben egal wo sich das fenster befindet. (Das try is nur zu Debug Zwecken, weil ich einen Globalen Hook hab der sich im Debugging-Mode nicht starten lässt)
    befor ich dir helfen kann breuchte ich nen zweiten screen | muss ich schauen wie ichs hinbekomme
    und try im debug zu benutzen ist sinnlos nimm die sch**** raus die IDE sagt dier viel mehr und besser was der fehler ist

    EDIT:

    da ich keinen zweiten screen hab kann ich nur vermuten ob diese funktion funktioniert:
    wäre net wen du sie testen köntest :)

    VB.NET-Quellcode

    1. Private Function isOnScreen(ByVal screen As Integer, ByVal windowRectangle As Rectangle) As Boolean
    2. If windowRectangle.X >= Windows.Forms.Screen.AllScreens(screen).WorkingArea.X AndAlso _
    3. windowRectangle.X < Windows.Forms.Screen.AllScreens(screen).WorkingArea.Width AndAlso _
    4. windowRectangle.Y >= Windows.Forms.Screen.AllScreens(screen).WorkingArea.Y AndAlso _
    5. windowRectangle.Y < Windows.Forms.Screen.AllScreens(screen).WorkingArea.Height Then
    6. Return True
    7. End If
    8. Return False
    9. End Function

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „joscha999“ ()

    erstmal danke für deine Hilfe ich habe jetzt alles in ein neues Projekt gepackt um es anständig zu Debuggen.

    EDIT:
    Danke, es funktioniert! :D

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Serow“ ()