您可以使用NSIS來枚舉窗口,System插件自述文件有一個EnumChildWindows example,它非常接近枚舉頂級窗口所需的代碼。
!include LogicLib.nsh
showinstdetails show
section
System::Get "(i.r1) iss"
Pop $R0
System::Call "user32::EnumWindows(k R0,i) i.s"
loop:
Pop $0
StrCmp $0 "callback1" 0 done
System::Call "user32::IsWindowVisible(ir1)i.r2"
${If} $2 <> 0
System::Call "user32::GetWindowText(ir1,t.r2,i${NSIS_MAX_STRLEN})"
System::Call "user32::GetClassName(ir1,t.r3,i${NSIS_MAX_STRLEN})"
IntFmt $1 "0x%X" $1
DetailPrint "$1 - [$3] $2"
${EndIf}
Push 1 # callback's return value
System::Call "$R0"
Goto loop
done:
System::Free $R0
sectionend
如果你控制,你可以用其他的方法來檢查正在運行的實例的Swing應用程序代碼,您可以創建一個Win32互斥體或其他命名的內核對象,並檢查這些...
FindWindow函數需要窗口類名稱和/或窗口標題,如果找到與窗口類/標題匹配的窗口,它會返回一個窗口句柄... – Anders