2017-02-12 2 views
0

Ich benutze Python, um 4 Videos gleichzeitig mit VLC zu öffnen und ich möchte, dass sie automatisch in jedem Viertel des Bildschirms skaliert werden (wie es passiert, wenn Sie das Fenster in die Ecke ziehen).Wie programmgesteuert die Größe von Prozessfenstern in Windows 10 ändern?

Ich verwende die Popen Methode der subprocess Bibliothek wie folgt:

for i in range(0,4): 
    p = subprocess.Popen(['vlc location','file name']) 
p.wait() 

Bisher haben die Videos offen, aber ich kann es nicht herausfinden, wie sie so in den Ecken an Pin:

screenshot of desired results

+0

[Diese Antwort] (http://StackOverflow.com/a/14654287/355230) zu einer nicht verwandten Frage zeigt, wie man 'win32gui.MoveWindow()' verwendet, um Fenster auf dem Windows-Desktop zu positionieren (und auch wie Iteriere durch alle diejenigen, die sichtbar sind). So etwas musst du machen. – martineau

+1

Danke! Es hat mein Problem gelöst. –

+0

Sie sind herzlich willkommen. ':-)' Wenn du erlaubt bist (nach einer gewissen Zeit), kannst du eine Antwort auf deine eigene Frage schreiben, die anderen mit einem ähnlichen Problem helfen würde. – martineau

Antwort

1

Wenn Sie die Popen subprocess Methode verwenden werden wie ich werden Sie haben p.wait zu entfernen(), weil es warten wird für das Video vor mehr Code ausgeführt zu beenden (es ist die Prozesse in einem Putting Warteschlange, anstatt sie einzufädeln).

Mit Hilfe von Martineau und der Antwort, die er zur Verfügung gestellt ich folgende verwendet (nach der pywin32 für Python 3.5 installieren):

import pywintypes 
import win32gui 

displays = [[-10,0,980,530], 
     [954,0,980,530], 
     [-10,515,980,530], 
     [954,515,980,530]] #these are the x1,y1,x2,y2 to corner all 4 videos on my res (1920x1080) 

def enumHandler(hwnd, lParam): 
    if win32gui.IsWindowVisible(hwnd): 
     print(win32gui.GetWindowText(hwnd)) #this will print all the processes title 
     if name in win32gui.GetWindowText(hwnd): #it checks if the process I'm looking for is running 
      win32gui.MoveWindow(hwnd,i0,i1,i2,i3,True) #resizes and moves the process 

win32gui.EnumWindows(enumHandler, None) #this is how to run enumHandler 

Die x1, y1, x2, y2 könnte für Ihre Prozesse unterschiedlich sein, aber diese funktionieren gut für VLC Media Player. Ich hoffe, ich war klar genug, aber wenn Sie es nicht schaffen, sollten Sie auf jeden Fall die Antwort von Martineau überprüfen.

Verwandte Themen