Fenster mit VBS neu positionieren
Hallo zusammen!
Ich suche nach einer Möglichkeit die Position eines Fensters mit möglichst wenig Interaktion (d.h. automatisch, vorzugweise mittels eines VBScripts) und ausschließlich mit Bordmitteln von Windows zu verändern. Das Ausführen von "Fremdsoftware" ist auf dem Rechner per GP unterbunden, womit Tools wie AutoHotkey wegfallen.
Ich stelle mir ein solches Scenario vor:
Hat jemand Erfahrung damit?
Danke im Voraus
format_c
Ich suche nach einer Möglichkeit die Position eines Fensters mit möglichst wenig Interaktion (d.h. automatisch, vorzugweise mittels eines VBScripts) und ausschließlich mit Bordmitteln von Windows zu verändern. Das Ausführen von "Fremdsoftware" ist auf dem Rechner per GP unterbunden, womit Tools wie AutoHotkey wegfallen.
Ich stelle mir ein solches Scenario vor:
- Die Anwendung wird per Batch-Skript gestartet.
- In dem selben Skript wird anschließend ein VBScript gestartet, welches
- das gewünschte Fenster anhand des Fenstertitels ermittelt,
- die Abmessungen des Desktops erfasst (zwei Monitore, unterschiedliche Auflösung),
- Das Fenster so über beide Bildschirme ausbreitet, dass es ein in das von den Monitoren gebildete Polygon eingeschriebenes Rechteck maximaler Größe darstellt. (geiler Satz, was? ) Die Logik ist an dieser Stelle nebensächlich – die Aufgabe reduziert sich darauf, ein bestimmtes Fenster mit gegebenen Koordinaten (links,oben),(rechts,unten) neu zu positionieren.
Hat jemand Erfahrung damit?
Danke im Voraus
format_c
Please also mark the comments that contributed to the solution of the article
Content-ID: 222755
Url: https://administrator.de/contentid/222755
Printed on: December 7, 2024 at 07:12 o'clock
6 Comments
Latest comment
Hallo format_c
VBScript bietet dafür keinerlei Möglichkeiten. PowerShell vielleich, aber da fehlt mir die Erfahrung.
msmvps.com/blogs/richardsiddaway/archive/2011/07/23/moving-windows.aspx
Grüße
rubberman
VBScript bietet dafür keinerlei Möglichkeiten. PowerShell vielleich, aber da fehlt mir die Erfahrung.
msmvps.com/blogs/richardsiddaway/archive/2011/07/23/moving-windows.aspx
Grüße
rubberman
Zitat von @rubberman:
Hallo format_c
VBScript bietet dafür keinerlei Möglichkeiten. PowerShell vielleich, aber da fehlt mir die Erfahrung.
[http://msmvps.com/blogs/richardsiddaway/archive/2011/07/23/moving-windows.aspx
msmvps.com/blogs/richardsiddaway/archive/2011/07/23/moving-windows.aspx]
Grüße
rubberman
Hallo format_c
VBScript bietet dafür keinerlei Möglichkeiten. PowerShell vielleich, aber da fehlt mir die Erfahrung.
[http://msmvps.com/blogs/richardsiddaway/archive/2011/07/23/moving-windows.aspx
msmvps.com/blogs/richardsiddaway/archive/2011/07/23/moving-windows.aspx]
Grüße
rubberman
.. schau mal hier:
http://www.vbaccelerator.com/home/VB/Tips/Working_with_Multiple_Monitor ...
Hallo format_c,
mit VBS kannst du es wie schon gesagt vergessen (Fehlende Unterstützung der Win32API).
Mit Powershell hatte ich mal eine Prozedur geschrieben, die eine Anwendung an einer bestimmten Position startet. Leider funktioniert sie bei bestimmten Fenstertypen nicht, musst du also mit deiner Anwendung ausprobieren:
Parameter 4 und 5 sind optional.
Grüße Uwe
mit VBS kannst du es wie schon gesagt vergessen (Fehlende Unterstützung der Win32API).
Mit Powershell hatte ich mal eine Prozedur geschrieben, die eine Anwendung an einer bestimmten Position startet. Leider funktioniert sie bei bestimmten Fenstertypen nicht, musst du also mit deiner Anwendung ausprobieren:
function initTools() {
[String]$SourceCode = @"
Namespace colinardo
Public Class MyFunctions
<System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)> _
Private Structure RECT
Public left As Integer
Public top As Integer
Public right As Integer
Public bottom As Integer
End Structure
<System.Runtime.InteropServices.DllImport("user32.dll")> _
Private Shared Function MoveWindow(ByVal hWnd As System.IntPtr, ByVal x As Integer, ByVal y As Integer, ByVal nWidth As Integer, ByVal nHeight As Integer, ByVal bRepaint As Boolean) As Boolean
End Function
<System.Runtime.InteropServices.DllImport("user32.dll")> _
Private Shared Function GetWindowRect(ByVal hWnd As System.IntPtr, <System.Runtime.InteropServices.Out()> ByRef lpRect As RECT) As <System.Runtime.InteropServices.MarshalAs(System.Runtime.InteropServices.UnmanagedType.Bool)> Boolean
End Function
<System.Runtime.InteropServices.DllImport("user32.dll")> _
Private Shared Function SetForegroundWindow(ByVal hWnd As System.IntPtr) As Boolean
End Function
Public Shared Function StartAppAtPosition(strPath As String, posX As Integer, posY As Integer, Optional intWidth As Integer = 0, Optional intHeight As Integer = 0) As Boolean
Dim proc As New System.Diagnostics.Process
Dim hwnd As System.IntPtr
Try
proc.StartInfo.FileName = strPath
proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal
proc.Start()
proc.WaitForInputIdle(True)
While Not proc.HasExited
proc.Refresh()
If proc.MainWindowHandle <> System.IntPtr.Zero Then
hwnd = proc.MainWindowHandle
System.Console.WriteLine("Window Handle: " & hwnd.ToString())
Exit While
End If
End While
If SetForegroundWindow(hwnd) Then
Dim rec As RECT 'structure to get size and location
If GetWindowRect(hwnd, rec) Then
Dim sizeW As Integer
Dim sizeH As Integer
If intWidth > 0 And intHeight > 0 Then
sizeW = intWidth
sizeH = intHeight
Else
sizeW = rec.right - rec.left 'Width size
sizeH = rec.bottom - rec.top 'Heigth Size
End If
Dim ret As Boolean = MoveWindow(hwnd, posX, posY, sizeW, sizeH, True)
If ret Then
Return True
Else
Return False
End If
End If
Else
Return False
End If
Return False
Catch ex As System.Exception
System.Console.WriteLine(ex.Message)
Return False
End Try
End Function
End Class
End Namespace
"@
add-type -TypeDefinition $SourceCode -Language VisualBasic
}
initTools
[colinardo.MyFunctions]::StartAppAtPosition("C:\Program Files\Paint.NET\PaintDotNet.exe",200,200,640,480)
Beschreibung der Parameter in der letzten Zeile des Scripts:
Parameter 1
= Pfad zum Programm das gestartet werden sollParameter 2
= X-Koordinate des FenstersParameter 3
= Y-Koordinate des FenstersParameter 4
= Breite des Fensters (Optional)Parameter 5
= Höhe des Fensters (Optional)
Parameter 4 und 5 sind optional.
Grüße Uwe