eigener Code für Bildschirmauflösung ändern & externe Prozess HWND

  • VB.NET

Es gibt 88 Antworten in diesem Thema. Der letzte Beitrag () ist von Xiantrius.

    Ich meinte damit das der Name ABC usw... kein sinn machen, sollte erkennbar für den Programmierer sein.
    Angenommen ich würde 1 Jahre das Projekt nicht mehr anrühren und erst dannach irgendwan wieder, müsste ich mich wieder einlesen. Daher ist es wichtig richtige Namen die einen helfen drin zu haben das ist mir klar.
    Das war nicht böse gegenüber dir gemeint und eventuel so wie du es aufgefasst hast habe ich mich vielleicht falsch ausgedrückt.
    Tut mir leid.

    Wollte nur versuchen zu erklären.
    Wenn es nur um die funktion gehen würde, ist es egal welchen Namen man wählt solange die funktion gewährleistet bleibt. Macht allerdings nur dann nicht viel Sinn, wenn der Name nicht mehr zum Themen Projekt passt.

    Dieser Beitrag wurde bereits 3 mal editiert, zuletzt von „Xiantrius“ ()

    Hi

    Ich habe mir mal die Arbeit gemacht und die Structure DEVMODEA so umgebaut, wie sie in der MS-Doku beschrieben ist (inkl. Union/DUMMYSTRUCTNAME). Denke das das so passt weil getestet.
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Imports System.Runtime.InteropServices
    4. Public Class Form1
    5. Private Enum DM_FLAGS As Integer
    6. DM_DISPLAYORIENTATION = &H80
    7. DM_BITSPERPEL = &H40000
    8. DM_PELSWIDTH = &H80000
    9. DM_PELSHEIGHT = &H100000
    10. DM_DISPLAYFLAGS = &H200000
    11. DM_DISPLAYFREQUENCY = &H400000
    12. DM_DISPLAYFIXEDOUTPUT = &H20000000
    13. End Enum
    14. Private Enum DMDO_FLAGS As Integer
    15. DMDO_DEFAULT = 0
    16. DMDO_90 = 1
    17. DMDO_180 = 2
    18. DMDO_270 = 3
    19. End Enum
    20. Private Enum DMDFO_FLAGS As Integer
    21. DMDFO_DEFAULT = 0
    22. DMDFO_STRETCH = 1
    23. DMDFO_CENTER = 2
    24. End Enum
    25. <StructLayout(LayoutKind.Explicit)>
    26. Private Structure POINTL
    27. <FieldOffset(0)> Dim x As Integer
    28. <FieldOffset(4)> Dim y As Integer
    29. End Structure
    30. <StructLayout(LayoutKind.Explicit)>
    31. Private Structure DEVMODEA
    32. <FieldOffset(0)> <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> Dim dmDeviceName As String
    33. <FieldOffset(32)> Dim dmSpecVersion As Short
    34. <FieldOffset(34)> Dim dmDriverVersion As Short
    35. <FieldOffset(36)> Dim dmSize As Short
    36. <FieldOffset(38)> Dim dmDriverExtra As Short
    37. <FieldOffset(40)> Dim dmFields As DM_FLAGS
    38. 'union {
    39. ' struct {
    40. <FieldOffset(44)> Dim dmOrientation As Short
    41. <FieldOffset(46)> Dim dmPaperSize As Short
    42. <FieldOffset(48)> Dim dmPaperLength As Short
    43. <FieldOffset(50)> Dim dmPaperWidth As Short
    44. <FieldOffset(52)> Dim dmScale As Short
    45. <FieldOffset(54)> Dim dmCopies As Short
    46. <FieldOffset(56)> Dim dmDefaultSource As Short
    47. <FieldOffset(58)> Dim dmPrintQuality As Short
    48. ' } DUMMYSTRUCTNAME;
    49. <FieldOffset(44)> Dim dmPosition As POINTL
    50. ' struct {
    51. '<FieldOffset(44)> Dim dmPosition As POINTL
    52. <FieldOffset(52)> Dim dmDisplayOrientation As DMDO_FLAGS
    53. <FieldOffset(56)> Dim dmDisplayFixedOutput As DMDFO_FLAGS
    54. ' } DUMMYSTRUCTNAME2;
    55. '} DUMMYUNIONNAME;
    56. <FieldOffset(60)> Dim dmColor As Short
    57. <FieldOffset(62)> Dim dmDuplex As Short
    58. <FieldOffset(64)> Dim dmYResolution As Short
    59. <FieldOffset(66)> Dim dmTTOption As Short
    60. <FieldOffset(68)> Dim dmCollate As Short
    61. '<FieldOffset(70)> Dim dummy As Short '<- sonst passt das Align für dmFormName nicht!!!
    62. <FieldOffset(72)> <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> Dim dmFormName As String
    63. <FieldOffset(104)> Dim dmLogPixels As Short
    64. <FieldOffset(104)> Dim dmBitsPerPel As Integer
    65. <FieldOffset(108)> Dim dmPelsWidth As Integer
    66. <FieldOffset(112)> Dim dmPelsHeight As Integer
    67. <FieldOffset(116)> Dim dmDisplayFlags As Integer
    68. 'union {
    69. <FieldOffset(120)> Dim dmNup As Integer
    70. <FieldOffset(120)> Dim dmDisplayFrequency As Integer
    71. '} DUMMYUNIONNAME2;
    72. <FieldOffset(124)> Dim dmICMMethod As Integer
    73. <FieldOffset(128)> Dim dmICMIntent As Integer
    74. <FieldOffset(132)> Dim dmMediaType As Integer
    75. <FieldOffset(136)> Dim dmDitherType As Integer
    76. <FieldOffset(140)> Dim dmReserved1 As Integer
    77. <FieldOffset(144)> Dim dmReserved2 As Integer
    78. <FieldOffset(148)> Dim dmPanningWidth As Integer
    79. <FieldOffset(152)> Dim dmPanningHeight As Integer
    80. End Structure
    81. <DllImport("user32.dll", EntryPoint:="EnumDisplaySettingsA")>
    82. Private Shared Function EnumDisplaySettings(<[In], MarshalAs(UnmanagedType.LPStr)> lpszDeviceName As String,
    83. <[In]> iModeNum As Integer,
    84. <Out> ByRef lpDevMode As DEVMODEA) As <MarshalAs(UnmanagedType.Bool)> Boolean
    85. End Function
    86. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    87. Dim intModeNum As Integer = 0
    88. Dim tDevMode As New DEVMODEA
    89. Do While EnumDisplaySettings(Nothing, intModeNum, tDevMode)
    90. Debug.Print("DisplayMode: " & intModeNum.ToString)
    91. Debug.Print("----------------")
    92. If CBool(tDevMode.dmFields And DM_FLAGS.DM_DISPLAYFLAGS) Then
    93. If CBool(tDevMode.dmFields And DM_FLAGS.DM_PELSWIDTH) Then Debug.Print("PelsWidth: " & tDevMode.dmPelsWidth.ToString)
    94. If CBool(tDevMode.dmFields And DM_FLAGS.DM_PELSHEIGHT) Then Debug.Print("PelsHeight: " & tDevMode.dmPelsHeight.ToString)
    95. If CBool(tDevMode.dmFields And DM_FLAGS.DM_BITSPERPEL) Then Debug.Print("BitsPerPel: " & tDevMode.dmBitsPerPel.ToString)
    96. If CBool(tDevMode.dmFields And DM_FLAGS.DM_DISPLAYFREQUENCY) Then Debug.Print("DisplayFrequency: " & tDevMode.dmDisplayFrequency.ToString)
    97. If CBool(tDevMode.dmFields And DM_FLAGS.DM_DISPLAYORIENTATION) Then Debug.Print("DisplayOrientation: " & tDevMode.dmDisplayOrientation.ToString)
    98. If CBool(tDevMode.dmFields And DM_FLAGS.DM_DISPLAYFIXEDOUTPUT) Then Debug.Print("DisplayFixedOutput: " & tDevMode.dmDisplayFixedOutput.ToString)
    99. End If
    100. Debug.Print("********************************")
    101. Debug.Print(Nothing)
    102. intModeNum += 1
    103. Loop
    104. End Sub
    105. End Class


    Im grunde bedeutet dieses das die Flags (dmFields) bereits beim auslesen vorhanden sind und bei ChangeDisplaySettings nicht extra festgelegt werden müssen. Deswegen ja auch der Vorschlag mit einer List(Of DEVMODEA).
    Mfg -Franky-

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „-Franky-“ ()

    Hi

    Die Structure DEVMODEA im Post83 ist dann doch nicht so ganz richtig. Das Alignment stimmt da nicht so wirklich. Also vergess das. ;) Da ich ja sowieso da grad damit am spielen war, hab ich das ganze mal für Multimonitorsysteme ausgebaut (nur auslesen der Auflösungen per EnumDisplaySettingsEx mit Flag EDS_ROTATEDMODE).
    Spoiler anzeigen

    VB.NET-Quellcode

    1. Option Strict On
    2. Option Explicit On
    3. Imports System.Text
    4. Imports System.Runtime.InteropServices
    5. Public Class Form1
    6. Private Const MONITORINFO_PRIMARY As Integer = 1
    7. Private Enum DM_FLAGS As Integer
    8. DM_DISPLAYORIENTATION = &H80
    9. DM_BITSPERPEL = &H40000
    10. DM_PELSWIDTH = &H80000
    11. DM_PELSHEIGHT = &H100000
    12. DM_DISPLAYFLAGS = &H200000
    13. DM_DISPLAYFREQUENCY = &H400000
    14. DM_DISPLAYFIXEDOUTPUT = &H20000000
    15. End Enum
    16. Private Enum DMDO_FLAGS As Integer
    17. DMDO_DEFAULT = 0
    18. DMDO_90 = 1
    19. DMDO_180 = 2
    20. DMDO_270 = 3
    21. End Enum
    22. Private Enum DMDFO_FLAGS As Integer
    23. DMDFO_DEFAULT = 0
    24. DMDFO_STRETCH = 1
    25. DMDFO_CENTER = 2
    26. End Enum
    27. Private Enum EDS_FLAGS As Integer
    28. EDS_RAWMODE = 2
    29. EDS_ROTATEDMODE = 4
    30. End Enum
    31. <StructLayout(LayoutKind.Sequential)>
    32. Private Structure MONITORINFOEX
    33. Dim cbSize As Integer
    34. Dim rcMonitor As Rectangle
    35. Dim rcWork As Rectangle
    36. Dim dwFlags As Integer
    37. <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> Dim szDevice As String
    38. Sub New(StructSize As Integer)
    39. cbSize = StructSize
    40. End Sub
    41. End Structure
    42. <StructLayout(LayoutKind.Sequential)>
    43. Private Structure DEVMODEA
    44. <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> Dim dmDeviceName As String
    45. Dim dmSpecVersion As Short
    46. Dim dmDriverVersion As Short
    47. Dim dmSize As Short
    48. Dim dmDriverExtra As Short
    49. Dim dmFields As DM_FLAGS
    50. Dim dmPosition As Point
    51. Dim dmDisplayOrientation As DMDO_FLAGS
    52. Dim dmDisplayFixedOutput As DMDFO_FLAGS
    53. Dim dmColor As Short
    54. Dim dmDuplex As Short
    55. Dim dmYResolution As Short
    56. Dim dmTTOption As Short
    57. Dim dmCollate As Short
    58. <MarshalAs(UnmanagedType.ByValTStr, SizeConst:=32)> Dim dmFormName As String
    59. Dim dmLogPixels As Short
    60. Dim dmBitsPerPel As Integer
    61. Dim dmPelsWidth As Integer
    62. Dim dmPelsHeight As Integer
    63. Dim dmDisplayFlags As Integer
    64. Dim dmDisplayFrequency As Integer
    65. Dim dmICMMethod As Integer
    66. Dim dmICMIntent As Integer
    67. Dim dmMediaType As Integer
    68. Dim dmDitherType As Integer
    69. Dim dmReserved1 As Integer
    70. Dim dmReserved2 As Integer
    71. Dim dmPanningWidth As Integer
    72. Dim dmPanningHeight As Integer
    73. Sub New(StructSize As Integer)
    74. dmSize = CShort(StructSize)
    75. End Sub
    76. End Structure
    77. <DllImport("User32.dll", EntryPoint:="EnumDisplayMonitors")>
    78. Private Shared Function EnumDisplayMonitors(<[In]> hdc As IntPtr,
    79. <[In]> lprcClip As IntPtr,
    80. <[In]> lpfnEnum As MonitorEnumProcDelegate,
    81. <[In]> dwData As Integer) As <MarshalAs(UnmanagedType.Bool)> Boolean
    82. End Function
    83. <DllImport("User32.dll", EntryPoint:="GetMonitorInfoA")>
    84. Private Shared Function GetMonitorInfo(<[In]> hMonitor As IntPtr,
    85. <[In], Out> ByRef lpmi As MONITORINFOEX) As <MarshalAs(UnmanagedType.Bool)> Boolean
    86. End Function
    87. <DllImport("User32.dll", EntryPoint:="EnumDisplaySettingsExA")>
    88. Private Shared Function EnumDisplaySettingsEx(<[In], MarshalAs(UnmanagedType.LPStr)> lpszDeviceName As String,
    89. <[In]> iModeNum As Integer,
    90. <[In], Out> ByRef lpDevMode As DEVMODEA,
    91. <[In]> dwFlags As EDS_FLAGS) As <MarshalAs(UnmanagedType.Bool)> Boolean
    92. End Function
    93. Private ReadOnly m_MonitorInfo As New StringBuilder
    94. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles Me.Load
    95. TextBox1.Multiline = True
    96. TextBox1.ScrollBars = ScrollBars.Vertical
    97. TextBox1.WordWrap = False
    98. TextBox1.Font = New Font("Courier New", 10, GraphicsUnit.Point)
    99. EnumDisplayMonitors(IntPtr.Zero, IntPtr.Zero, MonitorEnumProc, 0)
    100. TextBox1.Text = m_MonitorInfo.ToString
    101. End Sub
    102. Private ReadOnly MonitorEnumProc As New MonitorEnumProcDelegate(AddressOf MonitorEnumProcFunc)
    103. Private Delegate Function MonitorEnumProcDelegate(<[In]> hMonitor As IntPtr,
    104. <[In]> hDCMonitor As IntPtr,
    105. <[In]> lprcMonitor As IntPtr,
    106. <[In]> dwData As Integer) As Boolean
    107. Private Function MonitorEnumProcFunc(hMonitor As IntPtr, hDCMonitor As IntPtr, lprcMonitor As IntPtr, dwData As Integer) As Boolean
    108. Dim tMONITORINFOEX As New MONITORINFOEX(Marshal.SizeOf(Of MONITORINFOEX))
    109. If GetMonitorInfo(hMonitor, tMONITORINFOEX) Then
    110. m_MonitorInfo.Append("Device: " & tMONITORINFOEX.szDevice & Environment.NewLine)
    111. If tMONITORINFOEX.dwFlags = MONITORINFO_PRIMARY Then
    112. m_MonitorInfo.Append("IsPrimary: True" & Environment.NewLine)
    113. Else
    114. m_MonitorInfo.Append("IsPrimary: False" & Environment.NewLine)
    115. End If
    116. m_MonitorInfo.Append("MonitorRect: " & tMONITORINFOEX.rcMonitor.ToString & Environment.NewLine)
    117. m_MonitorInfo.Append("MonitorWorkRect: " & tMONITORINFOEX.rcWork.ToString & Environment.NewLine)
    118. Dim intModeNum As Integer = 0
    119. Dim tDevMode As New DEVMODEA(Marshal.SizeOf(Of DEVMODEA))
    120. Do While EnumDisplaySettingsEx(tMONITORINFOEX.szDevice, intModeNum, tDevMode, EDS_FLAGS.EDS_ROTATEDMODE)
    121. If CBool(tDevMode.dmFields And DM_FLAGS.DM_DISPLAYFLAGS) Then
    122. m_MonitorInfo.Append(Environment.NewLine)
    123. m_MonitorInfo.Append(" DisplayMode: " & intModeNum.ToString & Environment.NewLine)
    124. m_MonitorInfo.Append(" ----------------" & Environment.NewLine)
    125. If CBool(tDevMode.dmFields And DM_FLAGS.DM_PELSWIDTH) Then m_MonitorInfo.Append(" PelsWidth: " & tDevMode.dmPelsWidth.ToString & Environment.NewLine)
    126. If CBool(tDevMode.dmFields And DM_FLAGS.DM_PELSHEIGHT) Then m_MonitorInfo.Append(" PelsHeight: " & tDevMode.dmPelsHeight.ToString & Environment.NewLine)
    127. If CBool(tDevMode.dmFields And DM_FLAGS.DM_BITSPERPEL) Then m_MonitorInfo.Append(" BitsPerPel: " & tDevMode.dmBitsPerPel.ToString & Environment.NewLine)
    128. If CBool(tDevMode.dmFields And DM_FLAGS.DM_DISPLAYFREQUENCY) Then m_MonitorInfo.Append(" DisplayFrequency: " & tDevMode.dmDisplayFrequency.ToString & Environment.NewLine)
    129. If CBool(tDevMode.dmFields And DM_FLAGS.DM_DISPLAYORIENTATION) Then m_MonitorInfo.Append(" DisplayOrientation: " & tDevMode.dmDisplayOrientation.ToString & Environment.NewLine)
    130. If CBool(tDevMode.dmFields And DM_FLAGS.DM_DISPLAYFIXEDOUTPUT) Then m_MonitorInfo.Append(" DisplayFixedOutput: " & tDevMode.dmDisplayFixedOutput.ToString & Environment.NewLine)
    131. m_MonitorInfo.Append(" --------------------------------" & Environment.NewLine)
    132. End If
    133. intModeNum += 1
    134. Loop
    135. m_MonitorInfo.Append("============================================================" & Environment.NewLine)
    136. m_MonitorInfo.Append(Environment.NewLine)
    137. End If
    138. Return True
    139. End Function
    140. End Class

    Mfg -Franky-
    Hi

    Hängt ganz davon ab ob mich das Thema interessiert oder nicht. Gut, dieses Thema ist jetzt nicht soooo spannend. Zumindest werde ich das ganze nicht soweit auf die Spitze treiben das ich dann per API auch noch die Umstellung auf eine andere Auflösung teste. :)
    Mfg -Franky-

    Resolution und Position einer externen Anwendung steuern bzw. auslesen auch bei Vollbild Modus.

    hi Leute,
    Habe ein anderes experiment versucht, doch leider ist es wie erwartet gescheitert.
    Habe versucht statt direkt ein Monitor ein Prozessfenster anzusprechen. Hat auch von Code her funktioniert.
    Aber der Ausführung wird nicht angenommen.

    funktioniert nicht, oder doch? vielleicht wenn es für Prozess HWND's über diese API was gibt.

    VB.NET-Quellcode

    1. For Each Prozess In Process.GetProcessesByName("notepad")
    2. ChangeResolution(CUInt(Prozess.MainWindowHandle), 640, 480)
    3. Next


    Natürlich gibt es ja noch eine andere API wo man das steuern kann das ist mir klar. Allerdings funktioniert das nur bei Anwendungen die in Fenstermodus laufen, wenn ich mich nicht irre. Jedenfalls reagiert meine Vollbildanwendung überhaupt nicht drauf, weil er die Werte in den Modus nicht findet.
    Hab da kleines Beispiel der Sub TestResHWND greift auf den WindowHandle zu und die API kann Position und die Auflösung des Fensters ändern.
    Wie geht das bei Vollbild Anwendungen?
    Die API kennt ihr bestimmt.

    VB.NET-Quellcode

    1. <Runtime.InteropServices.DllImport("user32.dll")>
    2. Private Shared Function SetWindowPos(ByVal hWnd As IntPtr, ByVal hWndInsertAfter As IntPtr, ByVal X As Integer, ByVal Y As Integer, ByVal cx As Integer, ByVal cy As Integer, ByVal uFlags As Integer) As Boolean
    3. End Function
    4. Public Enum SetWindowPosFlags As UInteger
    5. ''' <summary>If the calling thread and the thread that owns the window are attached to different input queues,
    6. ''' the system posts the request to the thread that owns the window. This prevents the calling thread from
    7. ''' blocking its execution while other threads process the request.</summary>
    8. ''' <remarks>SWP_ASYNCWINDOWPOS</remarks>
    9. SynchronousWindowPosition = &H4000
    10. ''' <summary>Prevents generation of the WM_SYNCPAINT message.</summary>
    11. ''' <remarks>SWP_DEFERERASE</remarks>
    12. DeferErase = &H2000
    13. ''' <summary>Draws a frame (defined in the window's class description) around the window.</summary>
    14. ''' <remarks>SWP_DRAWFRAME</remarks>
    15. DrawFrame = &H20
    16. ''' <summary>Applies new frame styles set using the SetWindowLong function. Sends a WM_NCCALCSIZE message to
    17. ''' the window, even if the window's size is not being changed. If this flag is not specified, WM_NCCALCSIZE
    18. ''' is sent only when the window's size is being changed.</summary>
    19. ''' <remarks>SWP_FRAMECHANGED</remarks>
    20. FrameChanged = &H20
    21. ''' <summary>Hides the window.</summary>
    22. ''' <remarks>SWP_HIDEWINDOW</remarks>
    23. HideWindow = &H80
    24. ''' <summary>Does not activate the window. If this flag is not set, the window is activated and moved to the
    25. ''' top of either the topmost or non-topmost group (depending on the setting of the hWndInsertAfter
    26. ''' parameter).</summary>
    27. ''' <remarks>SWP_NOACTIVATE</remarks>
    28. DoNotActivate = &H10
    29. ''' <summary>Discards the entire contents of the client area. If this flag is not specified, the valid
    30. ''' contents of the client area are saved and copied back into the client area after the window is sized or
    31. ''' repositioned.</summary>
    32. ''' <remarks>SWP_NOCOPYBITS</remarks>
    33. DoNotCopyBits = &H100
    34. ''' <summary>Retains the current position (ignores X and Y parameters).</summary>
    35. ''' <remarks>SWP_NOMOVE</remarks>
    36. IgnoreMove = &H2
    37. ''' <summary>Does not change the owner window's position in the Z order.</summary>
    38. ''' <remarks>SWP_NOOWNERZORDER</remarks>
    39. DoNotChangeOwnerZOrder = &H200
    40. ''' <summary>Does not redraw changes. If this flag is set, no repainting of any kind occurs. This applies to
    41. ''' the client area, the nonclient area (including the title bar and scroll bars), and any part of the parent
    42. ''' window uncovered as a result of the window being moved. When this flag is set, the application must
    43. ''' explicitly invalidate or redraw any parts of the window and parent window that need redrawing.</summary>
    44. ''' <remarks>SWP_NOREDRAW</remarks>
    45. DoNotRedraw = &H8
    46. ''' <summary>Same as the SWP_NOOWNERZORDER flag.</summary>
    47. ''' <remarks>SWP_NOREPOSITION</remarks>
    48. DoNotReposition = &H200
    49. ''' <summary>Prevents the window from receiving the WM_WINDOWPOSCHANGING message.</summary>
    50. ''' <remarks>SWP_NOSENDCHANGING</remarks>
    51. DoNotSendChangingEvent = &H400
    52. ''' <summary>Retains the current size (ignores the cx and cy parameters).</summary>
    53. ''' <remarks>SWP_NOSIZE</remarks>
    54. IgnoreResize = &H1
    55. ''' <summary>Retains the current Z order (ignores the hWndInsertAfter parameter).</summary>
    56. ''' <remarks>SWP_NOZORDER</remarks>
    57. IgnoreZOrder = &H4
    58. ''' <summary>Displays the window.</summary>
    59. ''' <remarks>SWP_SHOWWINDOW</remarks>
    60. ShowWindow = &H40
    61. End Enum
    62. 'Beispiel Ausführung
    63. Private Sub TestResHWND
    64. For Each Prozess In Process.GetProcessesByName("notepad")
    65. '1 = HWND , 2 = X Position, 3 = Y Position, 4 = Bildschirmbreite, 5 = Bildschirmlänge, 6 = K.A was da hin soll
    66. SetWindowPos(Prozess.MainWindowHandle, Nothing, 0, 0, 640, 480, 0)
    67. Next
    68. End Sub

    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „Xiantrius“ ()

    -Franky- schrieb:

    Hi

    Wäre es nicht besser dazu einen neuen Thread zu erstellen weil die Überschrift zu diesem Thread passt nicht zu Deiner jetzigen Frage.


    Du hast recht, hab das hier jetzt drin.
    Resolution und Position einer externen Anwendung steuern bzw. auslesen auch bei Vollbild Modus.