Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: format-c

format-c (Level 1) - Jetzt verbinden

22.11.2013 um 17:12 Uhr, 4953 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 ..
Ähnliche Inhalte
VB for Applications
VBS Schleife
gelöst Frage von IleiesVB for Applications6 Kommentare

Hallo zusammen, Wie kann ich mit vbs machen, dass eine Musikdatei in einer Schleife ohne Ende immer wieder abgespielt ...

Microsoft Office
Microsoft Excel VBS
gelöst Frage von Mohji32Microsoft Office6 Kommentare

Guten Tag liebe Leute, ich kenne mich leider nicht sehr gut mit VBS aus aber habe angefangen mich einzuarbeiten. ...

VB for Applications
VBS InputBox Format
gelöst Frage von freshman2017VB for Applications4 Kommentare

Guten Morgen, ist es möglich, nachfolgende Abfrage so zu gestalten, dass bei der Eingabe eines falschen Formats eine weitere ...

VB for Applications
Excel VBS Datenvergleich
Frage von rocco61VB for Applications

Hallo zusammen, möchte ein Excel Makro in VB, das mit die Gleichheit von 2 Zellen in einer Meldung ausgibt. ...

Neue Wissensbeiträge
Viren und Trojaner

Staatstrojaner soll auch per Einbruch installiert werden können

Information von transocean vor 16 StundenViren und Trojaner2 Kommentare

Moin, Bundesinnenminister Horst Seehofer will dem Verfassungsschutz Wohnungseinbrüche erlauben, um den geplanten Staatstrojaner zu installieren. Gruß Uwe

Windows 7
Win7 Update scheitert KB4512506
Information von infowars vor 1 TagWindows 7

Falls jemand auch das Problem hat mit dem: Monatliches Sicherheitsqualitätsrollup für Windows 7 für x64-basierte-Systeme (KB4512506) Das scheint mit ...

Humor (lol)
Wenn hacken nach hinten los geht
Information von em-pie vor 2 TagenHumor (lol)4 Kommentare

Moin, weil heute Freitag ist, nachfolgender kurzer Artikel zum schmunzeln:) l+f: NULL ist ein notorischer Falschparker

Windows Update
Windows: August 2019 Patchday-Probleme
Information von kgborn vor 2 TagenWindows Update3 Kommentare

Ich kippe mal einige kurze Informationen hier rein - vielleicht hilft es Betroffenen. Die August 2019-Updates für Windows haben ...

Heiß diskutierte Inhalte
SAN, NAS, DAS
Leiser stromsparender Debian EXT4 NAS-Heimserver: ECC-RAM wie betreiben?
Frage von Laser12SAN, NAS, DAS26 Kommentare

Moin, aktuell stelle ich einen Rechner zusammen, den mein Computerhändler bauen wird. Nach Jahrzehnten mit Desktops und zwei Notebooks ...

Windows Server
Läuft Microsoft Server SQL2008R2 unter W2016, obwohl nicht supportet?
Frage von LochkartenstanzerWindows Server13 Kommentare

Moin Kollegen, Kurze Frage: Läuft Microsoft Server SQL2008R2 unter W2016, obwohl nicht supportet? Da ich i.d.R. nicht für die ...

Netzwerkgrundlagen
Proxmox auf dedicated Root Server mit nur einer IP nutzen
gelöst Frage von ndreier933Netzwerkgrundlagen12 Kommentare

Hallo Community, ich bin neu hier im Forum und weiß nicht ob ich das Thema richtg zugeordnet habe?Zusätzlich habe ...

Windows Server
Name einer neuen AD Gesamtstruktur ? immer .local?
gelöst Frage von Motte990Windows Server11 Kommentare

Hallo ihr Lieben Ich bin gerade dabei auf einem Windows Server 2019 Core oder Desktop eine neu Active Directory ...