Windows 是否可以通过bat脚本确定具有焦点的窗口/应用程序?
这样做的函数显然在User32.dll中。我一直在尝试修补rundll32.exe,但当我运行此程序时:Windows 是否可以通过bat脚本确定具有焦点的窗口/应用程序?,windows,scripting,batch-file,rundll32,Windows,Scripting,Batch File,Rundll32,这样做的函数显然在User32.dll中。我一直在尝试修补rundll32.exe,但当我运行此程序时: rundll32 User32.dll,GetActiveWindow 它没有错误地退出,但什么也不做。退出代码当然只会说明运行rundll32时是否有错误 是否有bat脚本技巧来检索该值并将其填充到变量中?Window API函数的设计与DOS中的调用不同。您需要创建一个运行最小化的控制台应用程序。它可以调用GetActiveWindow()函数并将应用程序标题写到STDOUT。然后可以
rundll32 User32.dll,GetActiveWindow
它没有错误地退出,但什么也不做。退出代码当然只会说明运行rundll32时是否有错误
是否有bat脚本技巧来检索该值并将其填充到变量中?Window 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
。每当我在批处理文件中分配环境变量,然后在同一批处理文件中使用它时,我喜欢使用enabledayedexpansion
。我已经知道它们不是设计为这样调用的。。。它不是一个真正的操作系统。但这是我必须处理的问题。除了在VisualStudio中编译另一个exe外,还有其他解决方法吗?除了创建控制台应用程序,我想不出任何方法让DOS调用任何Windows API调用并捕获返回的数据。您可以使用.vbs
脚本搜索执行此操作的方法。我搜索了一点,但似乎所有东西都需要一个DynamicRapper DLL(我想是DynWrap.DLL)。