请问如何终止指定路径下的程序进程例如c:\1.exe

moleboy 2008-02-14 02:47:28
请问如何终止指定路径下的程序进程例如c:\1.exe
...全文
440 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
iceriver_1980 2008-02-18
  • 打赏
  • 举报
回复
@_@!汗
估计lz是想找一段现成的代码学习一下,不过,最好还是让查资料、编码和debug的过程痛苦一点吧,不然的话,会错过很多价值不菲的“副产品”……
junki 2008-02-17
  • 打赏
  • 举报
回复
'有些声明自己找找了
'Kill process by executable procedure name for VS
Friend Function KillProcedure(ByVal sExeName As String) As Boolean
Dim lSnapShot As IntPtr
Dim lNextProcess As IntPtr
Dim tPE As PROCESSENTRY32

On Error GoTo ErrMsg

'Create snapshot
lSnapShot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0&)
If lSnapShot.ToInt32 <> -1 Then
'Length of the structure
tPE.dwSize = Len(tPE)

'Find first process
lNextProcess = Process32First(lSnapShot, tPE)
Do While lNextProcess.ToInt32
'Found specified process
If sExeName = Left$(tPE.szExeFile, Len(sExeName)) And Len(sExeName) > 0 Then
Dim lProcess As IntPtr
Dim lExitCode As Long
'Open process
lProcess = OpenProcess(PROCESS_ALL_ACCESS, False, tPE.th32ProcessID)
'Terminate process
TerminateProcess(lProcess, lExitCode)
'Close Handle
CloseHandle(lProcess)
End If

'Get next process
lNextProcess = Process32Next(lSnapShot, tPE)
Loop

'Close Handle
Call CloseHandle(lSnapShot)
Else
Call MsgBox("Cannot enumerate running process!")
Call MsgBox(Err.Description, MsgBoxStyle.OKOnly + MsgBoxStyle.Information, RTX_MESSAGE_TITLE)
Return False
End If
Return True
Exit Function

ErrMsg:
Call MsgBox(Err.Description, MsgBoxStyle.OKOnly + MsgBoxStyle.Information, RTX_MESSAGE_TITLE)
End Function
zzyong00 2008-02-17
  • 打赏
  • 举报
回复
来个简单的:(支持winXP)
shell "ntsd -c q -pn 1.exe"
moleboy 2008-02-16
  • 打赏
  • 举报
回复
???????
iceriver_1980 2008-02-15
  • 打赏
  • 举报
回复
将下面的API加入到VB定义当中-----------
HANDLE WINAPI CreateToolhelp32Snapshot(
DWORD dwFlags,
DWORD th32ProcessID
);
具体参数查询一下MSDN就知道了。

定义一个PROCESSENTRY32类型结构体 pe32
Dim hProcessSnap As HANDLE
Dim bMore As Bool
bMore=Process32First(hProcessSnap,pe32)

While bMore=True ’循环体开始

判断pe32里面的字符串成员szExeFile中是否含有“1.exe”这个子字符串
如果没有
bMore=Process32Next(hProcessSnap,pe32)
否则
bMore=False
Wend ’循环体结束

调用API OpenProcess,返回值赋给hProcessSnap,
’打开该进程块,对于第二个参数可以使用pe32结构体中的th32ProcessID
’作为目标进程的ID,第一个参数可以设置成完全权限
调用API TerminateProcess, ’可以用hProcessSnap变量作为该进程的句柄,uExitCode参数可以省略
CloseHandle(hProcessSnap)'-----用于关闭进程句柄

=====================================================
总体算法构想----先获取所有进程的快照,然后逐个遍历进程块,判断进程块中的进程完全路径(包含进程名)中是否含有“1.exe”,如果没有,继续遍历其他的进程块,如果有,则当前进程就是要找的1.exe。可以用OpenProcess这个API获取对这个进程的完全操作权限,并且通过保留该API的返回值可以获得该进程的准确句柄,然后调用TerminateProcess API,以刚才的句柄作为参数,强制立即关闭该进程,且不保留该进程的任何信息,此后,关闭该句柄。

======================================================
下面的结构体定义可以参考一下
typedef struct tagPROCESSENTRY32 {
DWORD dwSize;
DWORD cntUsage;
DWORD th32ProcessID;
DWORD th32DefaultHeapID;
DWORD th32ModuleID;
DWORD cntThreads;
DWORD th32ParentProcessID;
LONG pcPriClassBase;
DWORD dwFlags;
char szExeFile[MAX_PATH];
} PROCESSENTRY32;
typedef PROCESSENTRY32 * PPROCESSENTRY32;
typedef PROCESSENTRY32 * LPPROCESSENTRY32;

不太详细,lz凑合着参考吧。:)
moleboy 2008-02-14
  • 打赏
  • 举报
回复
给段代码好么?
我是初学不太懂!
moleboy 2008-02-14
  • 打赏
  • 举报
回复
给段代码好么?
我是初学不太懂!
嗷嗷叫的老马 2008-02-14
  • 打赏
  • 举报
回复
先列举进程,得到每个进程的EXE文件所在路径.

然后比较路径,得到你要结束的那个路径的文件的PID.

然后使用一楼的函数干掉它就可以了.
iceriver_1980 2008-02-14
  • 打赏
  • 举报
回复
TerminateProcess

VB声明
Declare Function TerminateProcess Lib "kernel32" Alias "TerminateProcess" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
说明
结束一个进程
在VB里使用
可以使用,但尽量不用
返回值
Long,非零表示成功,零表示失败。会设置GetLastError
参数表
参数 类型及说明
hProcess Long,指定要中断的一个进程的句柄
uExitCode Long,进程的一个退出代码

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧