Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit

Fenster mit VBS neu positionieren

Frage Entwicklung VB for Applications

Mitglied: format-c

format-c (Level 1) - Jetzt verbinden

22.11.2013 um 17:12 Uhr, 3211 Aufrufe, 6 Kommentare

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:
  1. Die Anwendung wird per Batch-Skript gestartet.
  2. In dem selben Skript wird anschließend ein VBScript gestartet, welches
    1. das gewünschte Fenster anhand des Fenstertitels ermittelt,
    2. die Abmessungen des Desktops erfasst (zwei Monitore, unterschiedliche Auflösung),
    3. 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
Mitglied: rubberman
22.11.2013 um 19:07 Uhr
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
Bitte warten ..
Mitglied: iTesla
22.11.2013 um 20:41 Uhr
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

.. schau mal hier:
http://www.vbaccelerator.com/home/VB/Tips/Working_with_Multiple_Monitor ...
Bitte warten ..
Mitglied: rubberman
22.11.2013 um 21:04 Uhr
Hallo iTesla,

das ist kein VBScript! Dort ist es leider nicht möglich auf die WinAPI zuzugreifen

Grüße
rubberman
Bitte warten ..
Mitglied: format-c
23.11.2013 um 11:59 Uhr
Gegen die Verwendung von PS wäre auch nichts einzuwenden
Bitte warten ..
Mitglied: colinardo
23.11.2013, aktualisiert um 12:07 Uhr
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:

01.
function initTools() { 
02.
    [String]$SourceCode = @" 
03.
Namespace colinardo 
04.
Public Class MyFunctions 
05.
<System.Runtime.InteropServices.StructLayoutAttribute(System.Runtime.InteropServices.LayoutKind.Sequential)> _ 
06.
    Private Structure RECT 
07.
        Public left As Integer 
08.
        Public top As Integer 
09.
        Public right As Integer 
10.
        Public bottom As Integer 
11.
    End Structure 
12.
 
13.
    <System.Runtime.InteropServices.DllImport("user32.dll")> _ 
14.
    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 
15.
    End Function 
16.
 
17.
    <System.Runtime.InteropServices.DllImport("user32.dll")> _ 
18.
    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 
19.
    End Function 
20.
 
21.
    <System.Runtime.InteropServices.DllImport("user32.dll")> _ 
22.
    Private Shared Function SetForegroundWindow(ByVal hWnd As System.IntPtr) As Boolean 
23.
    End Function 
24.
 
25.
    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 
26.
        Dim proc As New System.Diagnostics.Process 
27.
        Dim hwnd As System.IntPtr 
28.
        Try 
29.
            proc.StartInfo.FileName = strPath 
30.
            proc.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal 
31.
            proc.Start() 
32.
            proc.WaitForInputIdle(True) 
33.
            While Not proc.HasExited 
34.
                proc.Refresh() 
35.
                If proc.MainWindowHandle <> System.IntPtr.Zero Then 
36.
                    hwnd = proc.MainWindowHandle 
37.
                    System.Console.WriteLine("Window Handle: " & hwnd.ToString()) 
38.
                    Exit While 
39.
                End If 
40.
            End While 
41.
            If SetForegroundWindow(hwnd) Then 
42.
                Dim rec As RECT 'structure to get size and location  
43.
                If GetWindowRect(hwnd, rec) Then 
44.
                    Dim sizeW As Integer 
45.
                    Dim sizeH As Integer 
46.
                    If intWidth > 0 And intHeight > 0 Then 
47.
                        sizeW = intWidth 
48.
                        sizeH = intHeight 
49.
                    Else 
50.
                        sizeW = rec.right - rec.left 'Width size 
51.
                        sizeH = rec.bottom - rec.top 'Heigth Size 
52.
                    End If 
53.
                    Dim ret As Boolean = MoveWindow(hwnd, posX, posY, sizeW, sizeH, True) 
54.
                    If ret Then 
55.
                        Return True 
56.
                    Else 
57.
                        Return False 
58.
                    End If 
59.
                End If 
60.
            Else 
61.
                Return False 
62.
            End If 
63.
            Return False 
64.
        Catch ex As System.Exception 
65.
            System.Console.WriteLine(ex.Message) 
66.
            Return False 
67.
        End Try 
68.
    End Function 
69.
End Class 
70.
End Namespace 
71.
"@ 
72.
 add-type -TypeDefinition $SourceCode -Language VisualBasic 
73.
74.
 
75.
initTools 
76.
 
77.
[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 soll
  • Parameter 2 = X-Koordinate des Fensters
  • Parameter 3 = Y-Koordinate des Fensters
  • Parameter 4 = Breite des Fensters (Optional)
  • Parameter 5 = Höhe des Fensters (Optional)

Parameter 4 und 5 sind optional.

Grüße Uwe
Bitte warten ..
Mitglied: format-c
26.11.2013 um 14:44 Uhr
Danke, Uwe, für das Skript. Es ist für mich schon mal ein guter Einstieg.
Bitte warten ..
Neuester Wissensbeitrag
Ähnliche Inhalte
VB for Applications
gelöst Bestimmte Spalten aus CSV-Datei auslesen (VBS) (9)

Frage von Gurkenhobel zum Thema VB for Applications ...

Batch & Shell
Eventlog Druckjobs mit VBS auslesen (2)

Frage von joni2000de zum Thema Batch & Shell ...

VB for Applications
VBS Script zum versenden mehrerer Verknüpfungen zu Dateien per Lotus Notes

Frage von Sentinel87 zum Thema VB for Applications ...

Windows Server
RemoteApp Fenster kommt nicht in den Vordergrund (1)

Frage von thomasreischer zum Thema Windows Server ...

Heiß diskutierte Inhalte
Windows Userverwaltung
Ausgeschiedene Mitarbeiter im Unternehmen - was tun mit den AD Konten? (33)

Frage von patz223 zum Thema Windows Userverwaltung ...

LAN, WAN, Wireless
FritzBox, zwei Server, verschiedene Netze (21)

Frage von DavidGl zum Thema LAN, WAN, Wireless ...

Viren und Trojaner
Aufgepasst: Neue Ransomware Goldeneye verbreitet sich rasant (20)

Link von Penny.Cilin zum Thema Viren und Trojaner ...

Windows Netzwerk
Windows 10 RDP geht nicht (18)

Frage von Fiasko zum Thema Windows Netzwerk ...