Есть ли способ получить доступ к дескриптору окна в окнах, используя WSH, WMI или аналогичный?

9680
Jotham

Есть ли способ получить доступ к дескриптору окна в окнах, используя WSH, WMI или аналогичный? Я просто хочу пометить окно как всегда сверху. В идеале я бы использовал хост сценариев Windows для этого.

(Также должен быть помечен как WSH).

С Уважением,

4
добавлен тэг WSH для тебя John T 14 лет назад 0

3 ответа на вопрос

3
John T

Чтобы получить его с помощью WSH, вы можете использовать COM DLL, найденную в этой статье CodeProject . Используя это, вы можете получить дескриптор окна следующим образом:

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

Это также очень легко в PowerShell .

пример:

(Get-Process powershell).MainWindowHandle 

Этот захват - дескриптор окна процесса PowerShell.


Хотя, если ваша главная цель - сделать окно верхним, есть много программ для этого, таких как DeskPins :

альтернативный текст

Спасибо Джон, но я в идеале после решения .VBS. Мы немного нервничаем по поводу того, что мы запускаем на этой конкретной машине, и другие файлы VBS работают как часть системы. Jotham 14 лет назад 0
Ах, хорошо, я пытался. Думал, что это может попасть в категорию "или аналогичные": P John T 14 лет назад 0
добавил решение WSH :) John T 14 лет назад 0
Могу ли я также получить дескриптор окна текущего окна powershell? Так как у меня открыто 3 окна, я получаю три ручки. Я мог бы просто попробовать каждый и посмотреть, какой именно я хочу, но это не может быть автоматизировано. Metallkiller 6 лет назад 0
1
TIM

I know it's a massive necro and pardon if it was solved already, but I've been struggling with it for some time now and here's a really simple solution I wrote:

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 } } 

Returns "0" if window wasn't found, or the window handle. If found more windows matching the $winTitle string it returns the $instance number (0 means first window, 1 second, etc.).

Example:

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

Я просто хочу пометить окно как всегда сверху.

взгляните на Eusing Auto Window Manager . Вы можете не только автоматически держать все окна, которые вы указали, всегда сверху, но вы также можете применять эффекты прозрачности от 0% (полностью прозрачный) до 100% (сплошной).

Auto Window Manager является бесплатной.