office交流網(wǎng)--QQ交流群號(hào)及微信交流群

Access培訓(xùn)群:792054000         Excel免費(fèi)交流群群:686050929          Outlook交流群:221378704    

Word交流群:218156588             PPT交流群:324131555

微信交流群(請(qǐng)用微信掃碼)

        

VB或VBA獲取無標(biāo)題窗口的句柄

2017-09-20 08:10:00
zstmtony
原創(chuàng)
7330
VB 請(qǐng)問如何獲取一個(gè)無標(biāo)題的窗口句柄?
請(qǐng)問:如何獲取一個(gè)無標(biāo)題的窗口句柄?知道他的應(yīng)用程序名稱。 
謝謝指點(diǎn)

------解決方案--------------------
方法一:調(diào)用EnumWindows,枚舉所有窗口句柄,然后在枚舉過程中,調(diào)用GetModuleFileName,獲取該窗口句柄的進(jìn)程名,如果等于你已經(jīng)知道的進(jìn)程名字,那這個(gè)窗口就是你想要找的窗口了。 
方法二:用工具找到這個(gè)程序的類名(一般程序類名都是不一樣的),然后用FindWindow就可以找到這個(gè)窗口的句柄。 
如果不明白,請(qǐng)繼續(xù)提問。 
------解決方案--------------------
'關(guān)閉進(jìn)程 
Private Declare Function CreateToolhelp32Snapshot Lib "kernel32 " (ByVal dwFlags As Long, ByVal th32ProcessID As Long) As Long 
Private Declare Function Process32First Lib "kernel32 " (ByVal hSnapShot As Long, lppe As PROCESSENTRY32) As Long 
Private Declare Function Process32Next Lib "kernel32 " (ByVal hSnapShot As Long, lppe As PROCESSENTRY32) As Long 
Private Declare Function OpenProcess Lib "kernel32 " (ByVal dwDesiredAccess As Long, ByVal blnheritHandle As Long, ByVal dwAppProcessId As Long) As Long 
Private Declare Function TerminateProcess Lib "kernel32 " (ByVal ApphProcess As Long, ByVal uExitCode As Long) As Long 
Private Declare Sub CloseHandle Lib "kernel32 " (ByVal hPass As Long) 
Private Const TH32CS_SNAPPROCESS = &H2& 

Private Type PROCESSENTRY32 
dwSize As Long 
cntUsage As Long 
th32ProcessID As Long 
th32DefaultHeapID As Long 
th32ModuleID As Long 
cntThreads As Long 
th32ParentProcessID As Long 
pcPriClassBase As Long 
dwFlags As Long 
szExeFile As String * 260 
End Type 
'關(guān)閉進(jìn)程xxx.exe[里面根據(jù)文件名判斷.也列出了所有進(jìn)程] 
Public Sub Sys_KillProcess(Ret As String) 
Dim lSnapShot As Long 
Dim lNextProcess As Long 
Dim tPE As PROCESSENTRY32 
On Error Resume Next 
lSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&) 
If lSnapShot <> -1 Then 
tPE.dwSize = Len(tPE) 
lNextProcess = Process32First(lSnapShot, tPE) 
Do While lNextProcess 
If InStr(1, UCase(Ret), UCase(Left(tPE.szExeFile, InStr(1, tPE.szExeFile, Chr(0)) - 1))) <> 0 Then 
Dim lProcess As Long 
Dim lExitCode As Long 
lProcess = OpenProcess(1, False, tPE.th32ProcessID) 
TerminateProcess lProcess, lExitCode 
CloseHandle lProcess 
End If 
lNextProcess = Process32Next(lSnapShot, tPE) 
Loop 
CloseHandle (lSnapShot) 
End If 
DoEvents 
End Sub 

------解決方案--------------------
如果它是前臺(tái)窗口可用GetForegroundWindow或GetFocus 
或用GetCursorPos加WindowFromPoint用鼠標(biāo)選 
或用樓上說的枚舉
分享
文章分類
聯(lián)系我們
聯(lián)系人: 王先生
Email: 18449932@qq.com
QQ: 18449932
微博: officecn01
移動(dòng)訪問