2013-03-01 42 views
0

這樣做的功能顯然是在User32.dll中。我一直在嘗試修補rundll32.exe,但是當我運行這個:是否可以通過bat腳本確定焦點窗口/應用程序?

rundll32 User32.dll,GetActiveWindow 

它退出沒有錯誤,但什麼都不做。退出代碼當然只會說是否存在運行rundll32的錯誤。

是否有一個蝙蝠腳本技巧來檢索該值並將其填入變量?

回答

1

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

+0

我已經知道它們不是被設計成這樣的調用...它不是一個真正的操作系統。但這是我必須合作的。在Visual Studio中編譯另一個exe有沒有解決方法? – 2013-03-01 21:42:54

+1

我想不出有什麼辦法讓DOS調用任何Windows API調用並捕獲返回的數據,而不是創建控制檯應用程序。您可以使用'.vbs'腳本搜索一種方法。我搜索了一下,但似乎一切都需要一個DynamicWrapper DLL(我認爲DynWrap.dll)。 – 2013-03-02 01:46:07

相關問題