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

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

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

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

        

VB或VBA穫?cè)o標(biāo)題窗口的句柄

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

------解決方案--------------------
方法一:調(diào)用EnumWindows,枚舉所有窗口句柄,然後在枚舉過程中,調(diào)用GetModuleFileName,穫?cè)≡摯翱诰浔倪M(jìn)程名,如果等於你已經(jīng)知道的進(jìn)程名字,那這箇窗口就是你想要找的窗口瞭。 
方法二:用工具找到這箇程序的類名(一般程序類名都是不一樣的),然後用FindWindow就可以找到這箇窗口的句柄。 
如果不明白,請(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 

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