Windows 2. Bildschirm: Programme einem Fenster zuweisen?
Guten Morgen,
ich habe einen PC mit Windows 10 und 2 Bildschirmen. Nun habe ich auf beiden Bildschirmen unten die Taskleiste mit diversen Programmen und möchte wissen, ob es eine Einstellung gibt, dass das Programm welches ich in der Taskleiste auswähle dann auf dem Bildschirm geöffnet wird, auf welchem ich es auswähle (z.B. Symbol des Explorers auf rechtem Bildschirm anklicken → Explorer öffnet sich auf rechtem Bildschirm) Gibt es da irgendwo eine Einstellung?
Schon mal vielen Dank.
6 Antworten
Vielleicht kannst du das mit einem zusätzlichen Programm verwirklichen.
Ich habe das hier gefunden, weiß aber nicht, ob es den gewünschten Effekt erzielt:
Ich bin mir aber fast sicher, dass es dafür etwas gibt.
Ich weiß nicht wie gut Du dich mit einem Editor auskennst und ob Du schon Programmiert hast...
Wenn nicht ist das Deine Chance Dich daran zu versuchen.
PosStart.cmd
<# : batch portion diese Zeile nicht veränden !!!!!!!
@echo off
rem hier Arbeitsverzeichnis hinter dem Gleichheitszeichen angeben oder leer lassen... zb set workingDir="F:/test"
set workingDir=
if defined workingDir cd /d %workingDir%
rem Aufruf: call :PositionedStart XPosition YPosition "Zielprogramm" optional: Parameter "Parameter" ...
rem Programm aufrufen Parameter 1 und 2 sind die x und y-Posiotion der linken oberen Fensterecke
call :PositionedStart 300 50 "C:\Windows\Notepad.exe" "blub test&test .txt"
rem zur Demo: warte 2 Sekunden...
Timeout 2
rem ...starte Nächstes Fenster
set workingDir="c:\windows"
if defined workingDir cd /d %workingDir%
call :PositionedStart 1000 300 cmd /k "echo das Arbeitsverzeichnis ist nun %workingDir%"
rem sekunden sekunden warten und Console beenden
timeout 10 >nul
rem ab hier nichts verändern!!!!!!!!!!!!!!!!!
exit /b
::: subroutines ::::
:PositionedStart %*=Kommandozeile
if defined workingDir cd /d "%workingDir%"
(for %%I in (%*) do @echo(%%~I)|powershell -noprofile "[Array]$argv = $input|?{$_}; iex (${%~f0}|out-string)"
exit /b
: end batch / begin powershell #>
#definiere Funktion zum verschieben des Fensters
Function Set-WindowPos( $WindowHandle,[int]$X,[int]$Y) {
Add-Type @"
using System;
using System.Runtime.InteropServices;
public class PosWnd {
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool GetWindowRect(IntPtr hWnd, out RECT lpRect);
[DllImport("User32.dll")]
public extern static bool MoveWindow(IntPtr handle, int x, int y, int width, int height, bool redraw);
}
public struct RECT
{
public int Left;
public int Top;
public int Right;
public int Bottom;
}
"@
$Rectangle = New-Object RECT
$Return = [PosWnd]::GetWindowRect($WindowHandle,[ref]$Rectangle)
$Width = $Rectangle.Right - $Rectangle.Left
$Height = $Rectangle.Bottom - $Rectangle.Top
If ($Return) {
$Return = [PosWnd]::MoveWindow($WindowHandle, $x, $y, $Width, $Height, $True)
}
}
#Displaygrenzen Anzeigen
Add-Type -AssemblyName System.Windows.Forms
[System.Windows.Forms.Screen]::AllScreens
# von der Batch übergebene Argumente für Start-Process anpassen...
$argv=$argv
$MyProcess=$argv[2];
$ArgumentList=$argv|select -skip 3|%{
if ($_.trim() -like "* *") {
'"{0}"' -f $_.trim(); #Start-Process erwartet Argumente mit Leerzeichen in "".
}else{
$_.trim();
}
};
if (-not $ArgumentList) {$ArgumentList+=' ' }; # die Argumentliste daf nicht $Null sein
$proc=Start-Process -filepath $MyProcess -ArgumentList $ArgumentList -PassThru; #Prozes starten
$TimeOut=5000; # für Programme welche extrem lange starten diesen Wert erhöhen
do{
sleep -Milliseconds 10;
$WHandle=(Get-Process -ID $proc.id).mainwindowhandle; #Fensterhandle für den gestarteten Prozess ermittel
$TOut+=10;
}
while($WHandle -eq 0 -and $TOut -lt $TimeOut); #Maximal 5000 Millisekunden die Schleife laufen lassen, wenn bis dahin kein Windowhandle bekannt ist, bleibt das Fenster wo es ist!
# verschiebe das Fenster...
Set-WindowPos $WHandle $argv[0] $argv[1]
Da ich kein Freund von irgendwelchen Programmen aus dem Netz bin mache ich derartigen "Kleinkram" selbst und gebe auch nur Sachen weiter über die der Nutzer Kontrolle hat.
Sicher gibt es Irgendwo ein fertiges Programm, welches das Gleiche kann, aber wozu suchen, wenn man das ganze auch mit ein Paar Zeilen Batch, C# und Powershell gebacken bekommt .
Was musst Du tun?
- Kopiere das Script in Deinen Editor.
- trage gebenenfalls das Arbeisverzeichnis hinter workingDir= ein.
- statt des Notepad Aufrufs , rufe dein gewünschtes Programm auf.
- Speicher die Batch unter "PosStart.cmd" oder einem anderen Namen. wichtig ist nur die Endung .cmd .
Je nach Deiner Monitor-Konfiguration sind sowohl negative Werte wie auch Werte welche größer als die eines Monitors sind möglich. Beim Ausführen eines Aufrufs wird die Displaykonfiguration angezeigt auch die zu den Monitoren gehörigen Grenzwerte. Die Displaynamen haben nichts mit den Anzeigeeinstellunen zu tun!
Ich habe das Script mit heißer Nadel gestrickt. Das heist keine Fehlerbehandlung und nichts keine Prüfung ob Du das Fenster jenseits der Monitore positionierst.
Spiele einfach in kleinen Schritten mit den X und Y -Werten., dan siehst Du wo die Reise hingeht.
Das heiße Nadel bedeute auch, das sich die Routine nich darum kümmert , wenn ein Programm wie Gimp oder OpenOffice mit einem Begrüßungsfenster startet (dann wird nur dieses verschoben).
Mehr war auf die Schnelle nicht drinn.
Wenn du nicht weißt wie Du hiermit umgehen sollst. kannst Du ggf. auch den Programmnamen und das Arbeitsverzeichnis posten und ich passe die Aufrufe für dich an.
Egal was Du mit diesem Script machst, für Dein System Besteht keinerlei Gefahr.
Das Schlimmst was Passieren kann, wäre das Du das Fenster außerhalb des Bildschirms platzierst, aber spätestens nach dem Ausloggen werden alle Fenster geschlossen oder Du killst das Programm im Taskmanager...
Diese Einstellung gibt es leider nicht. Du kannst aber das Fenster (z.B. den Explorer) öffnen und dann auf den richtigen Bildschirm ziehen.
Wenn du dann das Programm wieder schliesst, wird es beim nächsten Öffnen direkt auf dem richtigen Bildschirm angezeigt.
Nein gibt es nicht aber 80% der Programme (Firefox ,Thunderbird, VLC ,OBS ,Kdeblive ,LibreIffice ) Speichern die Position wo man sie offen hatte (so ist es bei mir) was heißt man braucht sowas grundsätzlich nicht
Nein, gibt es nicht.. Aber die Fenster verschieben ist doch jetzt nicht soo viel Arbeit ;)
Das entsprechende fenster geht nach dem entsprechenden verschieben immer auf dem Bildschirm auf. Das sollte doch auch passen ^^
Ich weiß, viel Arbeit ist es nicht, aber wäre trotzdem praktisch gewesen :)