2013-03-01 2 views
0

Функция для этого, по-видимому, находится в User32.dll. Я пытался возиться с rundll32.exe, но когда я запускаю это:Можно ли определить окно/приложение с фокусом из сценария летучей мыши?

rundll32 User32.dll,GetActiveWindow 

Он выходит без ошибок, но ничего не делает. Код выхода, конечно же, только скажет, были ли ошибки, запущенные rundll32.

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

ответ

1

Функции API окна не предназначены для вызова из DOS. Вам нужно создать консольное приложение, которое выполняется с минимальными значениями. Он может вызвать функцию GetActiveWindow() и записать название приложения в STDOUT. Затем вы можете присвоить это значение переменной окружения в пакетном файле, как это:

setlocal ENABLEDELAYEDEXPANSION 
for /f "delims=" %%i in ('start /wait /min YourCustomApp.exe') do set somevar=%%i 
echo The active program is "!somevar!". 
endlocal 

/wait /min сделать пакетный файл ждать, пока приложение не будет прекращено, прежде чем пытаться присвоить значение на STDOUT в somevar. Мне нравится использовать ENABLEDELAYEDEXPANSION всякий раз, когда я назначаю переменную окружения в пакетном файле, а затем использую его позже в том же командном файле.

+0

Я уже знаю, что они не предназначены для так называемого ... это не настоящая операционная система. Но с этим я должен работать. Существует ли обходное решение, не требующее компиляции другого exe в Visual Studio? –

+1

Я не могу придумать, как DOS вызывает вызовы Windows API и ловут возвращенные данные, не создавая консольное приложение. Вы можете найти способ сделать это с помощью скрипта '.vbs'. Я немного искал, но все, кажется, требует DLL DynamicWrapper (я думаю, DynWrap.dll). –