Powershell start-process osk.exe in gewünschter Größe (width, height)
Hallo zusammen,
ich bin auf der Suche die osk.exe in einer definierten Größe mittels Powershell zu öffnen.
Ich hab zwar gefunden wie ich powershell in einer Größe öffnen kann, aber osk funktioniert damit leider nicht.
Hat jemand eine Idee wie das funktionieren könnte.
Vielen Dank.
ich bin auf der Suche die osk.exe in einer definierten Größe mittels Powershell zu öffnen.
Ich hab zwar gefunden wie ich powershell in einer Größe öffnen kann, aber osk funktioniert damit leider nicht.
start-process powershell '-noexit -command "[console]::windowwidth=200; [console]::windowheight=50; [console]::bufferwidth=[console]::windowwidht"'
Hat jemand eine Idee wie das funktionieren könnte.
Vielen Dank.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1223627953
Url: https://administrator.de/contentid/1223627953
Ausgedruckt am: 21.11.2024 um 18:11 Uhr
4 Kommentare
Neuester Kommentar
Das OSK Window ist da etwas speziell, seine Eigenschaften lassen sich nur verändern wenn der Skript-Prozess elevated ausgeführt wird. Dann kann man mittels https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-se ... arbeiten wie bei deiner letzten Frage gezeigt.
Servus,
wie @149062 schon angemerkt hat die osk.exe ist da etwas speziell weil OSK das Flag UIAccess="true" in seinem Manifest gesetzt hat und so mit etwas höherer Integrität läuft als normal, deswegen braucht man entweder elevated rights für die remote Manipulation des Fensters oder muss für seine Anwendung die Integritätsstufe im Manifest auf UIAccess="true" setzen, zusätzlich die Anwendung signieren und im ProgramFiles-Ordner oder einem Ordner mit entsprechender Integritätsstufe platzieren.
Grüße Uwe
wie @149062 schon angemerkt hat die osk.exe ist da etwas speziell weil OSK das Flag UIAccess="true" in seinem Manifest gesetzt hat und so mit etwas höherer Integrität läuft als normal, deswegen braucht man entweder elevated rights für die remote Manipulation des Fensters oder muss für seine Anwendung die Integritätsstufe im Manifest auf UIAccess="true" setzen, zusätzlich die Anwendung signieren und im ProgramFiles-Ordner oder einem Ordner mit entsprechender Integritätsstufe platzieren.
# restart script elevated if not
if(!(new-object System.Security.Principal.WindowsPrincipal([System.Security.Principal.WindowsIdentity]::GetCurrent())).IsInRole(544)){start powershell -Verb runas -ArgumentList '-File',$MyInvocation.MyCommand.Definition;exit}
# load SetWindosPos win32 function
Add-Type –MemberDefinition '[DllImport("user32.dll")] public static extern bool SetWindowPos(IntPtr hWnd,IntPtr hWndInsertAfter, int X, int Y, int cx, int cy, uint uFlags);' -name Tools -namespace win32
# start osk.exe
$osk = start osk.exe -PassThru
# wait until osk window handle exists
while($osk.MainWindowHandle -eq [IntPtr]::Zero){
$osk.Refresh()
sleep .5
}
# set window position and size (x= 100, y = 100, width = 600, height 300), see https:{{comment_single_line_double_slash:0}}
[Win32.Tools]::SetWindowPos($osk.MainWindowHandle,0,100,100,600,300,0x0040)
Hatte ich ja geschrieben . Alternativ Anwendung signieren, Manifest anpassen und Anwendung in einem entsprechenden Ordner mit passender Integritätsstufe platzieren (ProgramFiles). Oder einen Dienst oder Scheduled Task erledigen lassen. Sollte aber auch genügend MultiScreen Software geben die die Positionierung gleich mit erledigt.
Aber trotzdem vielen Dank
Gerne.