'试试下面这段程序 '说明:这段程序只能结束“C:\Program Files\Real\RealPlayer\RealPlay.exe”,就是说你的realplay.exe只能装在c:\program files下。 '你可增加一些判断,比如把执行文件前面的路径去掉。只判断执行程序文件名。'给我加分。Option ExplicitPrivate Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long) Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As LongPrivate 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 TypePrivate Const TH32CS_SNAPHEAPLIST = &H1 Private Const TH32CS_SNAPPROCESS = &H2 Private Const TH32CS_SNAPTHREAD = &H4 Private Const TH32CS_SNAPMODULE = &H8 Private Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE) Private Const TH32CS_INHERIT = &H80000000Private uProcess As PROCESSENTRY32 Private P, hSnapShot, l, r As LongPrivate Sub Form_Load() hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&) hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&) uProcess.dwSize = Len(uProcess) r = Process32First(hSnapShot, uProcess) l = Len("C:\Program Files\Real\RealPlayer\RealPlay.exe") While r If Left$(uProcess.szExeFile, l) = UCase$("C:\Program Files\Real\RealPlayer\RealPlay.exe") Then TerminateProcess OpenProcess(0, 0, uProcess.th32ProcessID), 0 MsgBox "real程序已经结束!", 48 r = 0 End If r = Process32Next(hSnapShot, uProcess) Wend CloseHandle hSnapShot End Sub
先用EnumForms,
然后对比Caption
再SendMessage一个WM_CLOSE试一试。
'说明:这段程序只能结束“C:\Program Files\Real\RealPlayer\RealPlay.exe”,就是说你的realplay.exe只能装在c:\program files下。
'你可增加一些判断,比如把执行文件前面的路径去掉。只判断执行程序文件名。'给我加分。Option ExplicitPrivate Declare Function CreateToolhelp32Snapshot Lib "kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function Process32First Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "kernel32" (ByVal hPass As Long)
Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
Private Declare Function OpenProcess Lib "Kernel32.dll" (ByVal dwDesiredAccessas As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As LongPrivate 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 TypePrivate Const TH32CS_SNAPHEAPLIST = &H1
Private Const TH32CS_SNAPPROCESS = &H2
Private Const TH32CS_SNAPTHREAD = &H4
Private Const TH32CS_SNAPMODULE = &H8
Private Const TH32CS_SNAPALL = (TH32CS_SNAPHEAPLIST Or TH32CS_SNAPPROCESS Or TH32CS_SNAPTHREAD Or TH32CS_SNAPMODULE)
Private Const TH32CS_INHERIT = &H80000000Private uProcess As PROCESSENTRY32
Private P, hSnapShot, l, r As LongPrivate Sub Form_Load()
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&)
hSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPALL, 0&)
uProcess.dwSize = Len(uProcess)
r = Process32First(hSnapShot, uProcess)
l = Len("C:\Program Files\Real\RealPlayer\RealPlay.exe")
While r
If Left$(uProcess.szExeFile, l) = UCase$("C:\Program Files\Real\RealPlayer\RealPlay.exe") Then
TerminateProcess OpenProcess(0, 0, uProcess.th32ProcessID), 0
MsgBox "real程序已经结束!", 48
r = 0
End If
r = Process32Next(hSnapShot, uProcess)
Wend
CloseHandle hSnapShot
End Sub
按照我的方法,要事先知道systray中的程序名称。