Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 是否可以通过bat脚本确定具有焦点的窗口/应用程序?_Windows_Scripting_Batch File_Rundll32 - Fatal编程技术网

Windows 是否可以通过bat脚本确定具有焦点的窗口/应用程序?

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。然后可以

这样做的函数显然在User32.dll中。我一直在尝试修补rundll32.exe,但当我运行此程序时:

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)。