0
這樣做的功能顯然是在User32.dll中。我一直在嘗試修補rundll32.exe,但是當我運行這個:是否可以通過bat腳本確定焦點窗口/應用程序?
rundll32 User32.dll,GetActiveWindow
它退出沒有錯誤,但什麼都不做。退出代碼當然只會說是否存在運行rundll32的錯誤。
是否有一個蝙蝠腳本技巧來檢索該值並將其填入變量?
這樣做的功能顯然是在User32.dll中。我一直在嘗試修補rundll32.exe,但是當我運行這個:是否可以通過bat腳本確定焦點窗口/應用程序?
rundll32 User32.dll,GetActiveWindow
它退出沒有錯誤,但什麼都不做。退出代碼當然只會說是否存在運行rundll32的錯誤。
是否有一個蝙蝠腳本技巧來檢索該值並將其填入變量?
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
使批處理文件等到你的程序試圖在標準輸出值分配給somevar
前終止。每當我在批處理文件中分配一個環境變量,然後在同一批處理文件中使用它時,我喜歡使用ENABLEDELAYEDEXPANSION
。
我已經知道它們不是被設計成這樣的調用...它不是一個真正的操作系統。但這是我必須合作的。在Visual Studio中編譯另一個exe有沒有解決方法? – 2013-03-01 21:42:54
我想不出有什麼辦法讓DOS調用任何Windows API調用並捕獲返回的數據,而不是創建控制檯應用程序。您可以使用'.vbs'腳本搜索一種方法。我搜索了一下,但似乎一切都需要一個DynamicWrapper DLL(我認爲DynWrap.dll)。 – 2013-03-02 01:46:07