Gibt es eine Möglichkeit, mit WSH oder WMI oder ähnlichem auf ein Fensterhandle in Fenstern zuzugreifen?

9827
Jotham

Gibt es eine Möglichkeit, mit WSH oder WMI oder ähnlichem auf ein Fensterhandle in Fenstern zuzugreifen? Ich möchte nur ein Fenster als immer im Vordergrund markieren. Idealerweise würde ich dafür Windows Script Host verwenden.

(Sollte auch als WSH markiert werden).

Grüße,

4
WSH-Tag für ya hinzugefügt John T vor 14 Jahren 0

3 Antworten auf die Frage

3
John T

Um es mit WSH zu packen, können Sie die COM-DLL verwenden, die in diesem CodeProject-Artikel gefunden wird . Damit können Sie einen Fenstergriff wie folgt greifen:

Set obj = CreateObject("APIWrapperCOM.APIWrapper") winHandle = obj.FindWindow("test.txt - Notepad") 

Dies ist in PowerShell auch sehr einfach .

Beispiel:

(Get-Process powershell).MainWindowHandle 

Dies ist das Fensterhandle des PowerShell-Prozesses.


Auch wenn Ihr Hauptziel darin besteht, ein Fenster ganz nach oben zu erstellen, gibt es dafür viele Programme wie DeskPins :

Alt-Text

Danke John, aber ich bin im Idealfall nach einer .VBS-Lösung. Wir sind etwas nervös, was wir auf diesem Computer ausführen und andere VBS-Dateien als Teil des Systems ausführen. Jotham vor 14 Jahren 0
Na ja, ich habe es versucht. Ich denke, dies könnte in die "oder ähnliche" Kategorie fallen: P John T vor 14 Jahren 0
WSH-Lösung hinzugefügt :) John T vor 14 Jahren 0
Kann ich auch das Fensterhandle des aktuellen Powershell-Fensters erhalten? Da ich 3 Fenster offen habe, bekomme ich drei Griffe. Ich könnte einfach jeden ausprobieren und sehen, welcher der beiden ist, aber das kann nicht automatisiert werden. Metallkiller vor 6 Jahren 0
1
TIM

Ich weiß, es ist eine riesige Nekro und Entschuldigung, wenn es bereits gelöst wurde, aber ich habe jetzt einige Zeit damit zu kämpfen und hier ist eine wirklich einfache Lösung, die ich geschrieben habe:

function WinExist($winTitle, $instance = 0) { $h = Get-Process | Where-Object { $_.MainWindowTitle -match $winTitle } | ForEach-Object { $_.MainWindowHandle } if ( $h -eq $null ) { return 0 } else { if ( $h -is [System.Array] ) {  $h = $h[$instance] } return $h } } 

Gibt "0" zurück, wenn das Fenster nicht gefunden wurde, oder das Fensterhandle. Wenn mehr Fenster gefunden werden, die der Zeichenfolge $ winTitle entsprechen, wird die Instanznummer $ zurückgegeben (0 bedeutet erstes Fenster, 1 Sekunde usw.).

Beispiel:

# WinExist str_WindowTitle int_WindowNumber # returns the handle of second notepad window (if more than 1 opened) $hwnd = WinExist "notepad" 1  
0

Ich möchte nur ein Fenster als immer im Vordergrund markieren.

Werfen Sie einen Blick auf den automatischen Fenstermanager von Eusing . Sie können nicht nur automatisch alle von Ihnen angegebenen Fenster immer im Vordergrund behalten, sondern auch Transparenzeffekte von 0% (vollständig transparent) bis 100% (durchgehend) anwenden .

Auto Window Manager ist Freeware.