Re: [VB6 ] 如何偵測某一個桯式(如小畫家)已經結束?
※ 引述《kandrew (藍天白雲~~)》之銘言:
: Hi chino,謝謝您提供此方法!!
: 我利用此方法,確實可以偵測到特定的程式是否結束,
: 但如果標題會改變的程式,就比較難偵測到了,
: 例如要偵測小畫家是否結束,當你開新檔時小畫家的標題為"未命名-小畫家"
: 然後再開另一個圖檔則標題則變為"xxxx-小畫家",這樣就會判斷失敗了。
: 是否還有別的函數可以判斷部分標題名稱的函式,例如只判斷"小畫家"
: 如果如此,這樣就可以正確的偵測出程式是否結束了。
: ※ 引述《chinoyan (chino)》之銘言:
: : 'API宣告
: : Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal
: : lpClassName As String, ByVal lpWindowName As String) As Long
: : ' 視窗的class ,"XXX"視窗標題,不知class填vbNullString即可
: : ' 傳回值為window hwnd, 不存在傳回 0
: : If FindWindow(vbNullString, "XXX") <> 0 Then
: : End If
'方法一
Dim Pid as long
pid = GetPsPid("小畫家.exe")
If pid <> 0 Then
End If
Option Explicit ' IN 模組
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
Public Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As
Long, ByVal uExitCode As Long) As Long
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As
Long, ByVal bInheritHandle As Long, ByVal dwProcessId 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
Const PROCESS_TERMINATE = 1
Function GetPsPid(sProcess As String) As Long
Dim lSnapShot As Long
Dim lNextProcess As Long
Dim tPE As PROCESSENTRY32
lSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
If lSnapShot <> -1 Then
tPE.dwSize = Len(tPE)
lNextProcess = Process32First(lSnapShot, tPE)
Do While lNextProcess
If LCase$(sProcess) = LCase$(Left(tPE.szExeFile, InStr(1,
tPE.szExeFile, Chr(0)) - 1)) Then
Dim lProcess As Long
Dim lExitCode As Long
GetPsPid = tPE.th32ProcessID
CloseHandle lProcess
End If
lNextProcess = Process32Next(lSnapShot, tPE)
Loop
CloseHandle (lSnapShot)
End If
End Function
=============================================================================
'方法二
EnumWindows AddressOf EnumWindowsProc, 0& '引用
'in 模組
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA"
(ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long,
ByVal lParam As Long) As Long
Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
On Error Resume Next
Dim S As String
S = String(40, 0)
Call GetWindowText(hwnd, S, 40)
S = Left(S, InStr(S, Chr(0)) - 1)
If Len(S) > 0 Then
If InStr(S, "小畫家") > 0 Then '
End If
End If
EnumWindowsProc = True ' 表示繼續列舉 hWnd
End Function
--
████ █ ★ ████ █ █ █
█ █ █ █ █ █ 超 級 熱 烈 歡 迎
█ ████ █ █ █ ████ █
█ █ █ █ ███★ █ █ 歡迎到嘉義版!
★███ █ █ █ █ █ █ █
訊馳電腦-路徑 → 嘉義市林森西路496號 →(05)2244-526 → 順發斜對面
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.33.214.160
推
10/06 09:38, , 1F
10/06 09:38, 1F
推
10/06 17:27, , 2F
10/06 17:27, 2F
推
10/06 21:32, , 3F
10/06 21:32, 3F
→
10/06 21:33, , 4F
10/06 21:33, 4F
→
10/06 21:36, , 5F
10/06 21:36, 5F
→
10/06 21:42, , 6F
10/06 21:42, 6F
→
10/07 01:40, , 7F
10/07 01:40, 7F
討論串 (同標題文章)
本文引述了以下文章的的內容:
完整討論串 (本文為第 4 之 4 篇):