例如一个程序的进程名称是:a.exe,请问要怎么介绍它。
解决方案 »
- Access violation at address 0x77f96c94
- 征求思路!!
- 郁闷!!!!每次打开一个贴要等好半天,改版怎么改成这样!
- 软件文档怎么写。请高手帮我。谢谢
- 用ADO可以连上数据仓库MSOLAP,可查询出来的数据不对呀,什么控件支持数据仓库?请高手指教!
- 靓女请求高手帮助。有关Chart控件放大与缩小
- 这个报表怎样去实现呢??
- 从ExtractIconEx得到的Icon存到ImageList控件里,使用于ListView,为什么屏蔽色(Mask)不起作用?,显示的图标周围有黑影?
- 现在的贴子怎么没有了提前的功能?
- 新人提問:如何用DELPHI開发:從手机端查詢WIFI下的所有裝置名稱
- delphi xe2 的 datasnap 限制同一帐户同时登录 如何实现?
- 如何获取窗体上webbrowser控件上一个提交按钮的屏幕位置?
const
PROCESS_TERMINATE=$0001;
var
ContinueLoop: BOOL;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
ContinueLoop := Process32First(FSnapshotHandle,FProcessEntry32); while integer(ContinueLoop) <> 0 do begin
if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = UpperCase(ExeFileName))or
(UpperCase(FProcessEntry32.szExeFile) =UpperCase(ExeFileName))) then
Result := Integer(TerminateProcess(OpenProcess(
PROCESS_TERMINATE, BOOL(0),
FProcessEntry32.th32ProcessID), 0));
ContinueLoop := Process32Next(FSnapshotHandle,
FProcessEntry32);
end; CloseHandle(FSnapshotHandle);
end;
var
PE32: TProcessEntry32;
hSnap: THandle;
hProc: THandle;
ProcName: string;
ProcPath: string;
Path: array[0..MAX_PATH - 1] of Char;
N: Integer;
begin
Result := False;
N := 0; // 创建进程快照
hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if hSnap = INVALID_HANDLE_VALUE then Exit; // 遍历进程列表
PE32.dwSize := SizeOf(PE32);
if Process32First(hSnap, PE32) then
begin
repeat
// 打开进程句柄
hProc := OpenProcess(
PROCESS_QUERY_INFORMATION
or PROCESS_VM_READ
or PROCESS_TERMINATE
or SYNCHRONIZE,
False, PE32.th32ProcessID
);
if hProc = 0 then Continue; // 获取进程名称&路径
ProcName := PE32.szExeFile;
ProcPath := '';
if GetModuleFileNameEx(hProc, 0, Path, MAX_PATH) > 0 then
begin
ProcPath := Path;
end; // 比较名称或路径
if SameText(Process, ProcName) or SameText(Process, ProcPath) then
begin
Inc(N);
// 强制结束进程
if Integer(TerminateProcess(hProc, 0)) = 0 then Continue;
// 等待进程结束
while WaitForSingleObject(hProc, 0) <> WAIT_OBJECT_0 do Sleep(100);
end; // 关闭进程句柄
CloseHandle(hProc);
until not Process32Next(hSnap, PE32);
end; // 关闭进程快照
CloseHandle(hSnap); // 通过查询判断是否结束成功
Result := (N = 0) or (not QueryProcess(Process));
end;
function QueryProcess(const Process: string): Boolean;
var
PE32: TProcessEntry32;
hSnap: THandle;
hProc: THandle;
ProcName: string;
ProcPath: string;
Path: array[0..MAX_PATH - 1] of Char;
begin
Result := False; // 创建进程快照
hSnap := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if hSnap = INVALID_HANDLE_VALUE then Exit; // 遍历进程列表
PE32.dwSize := SizeOf(PE32);
if Process32First(hSnap, PE32) then
begin
repeat
// 打开进程句柄
hProc := OpenProcess(
PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
False, PE32.th32ProcessID
);
if hProc = 0 then Continue; // 获取进程名称&路径
ProcName := PE32.szExeFile;
ProcPath := '';
if GetModuleFileNameEx(hProc, 0, Path, MAX_PATH) > 0 then
begin
ProcPath := Path;
end; // 比较名称或路径
if SameText(Process, ProcName) or SameText(Process, ProcPath) then
begin
Result := True;
CloseHandle(hProc);
Break;
end; // 关闭进程句柄
CloseHandle(hProc);
until not Process32Next(hSnap, PE32);
end; // 关闭进程快照
CloseHandle(hSnap);
end;
这个我试过,在win7下不管用
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
<ms_asmv2:trustInfo xmlns:ms_asmv2="urn:schemas-microsoft-com:asm.v2">
<ms_asmv2:security>
<ms_asmv2:requestedPrivileges>
<ms_asmv2:requestedExecutionLevel level="requireAdministrator">
</ms_asmv2:requestedExecutionLevel>
</ms_asmv2:requestedPrivileges>
</ms_asmv2:security>
</ms_asmv2:trustInfo>
</assembly>2. 下面这段存为requireAdmin.rc
1 24 "requireAdmin.manifest"3. 将requireAdmin.rc添加到你的程序(Project)当中,进行编译。4. 生成的程序在Win7下执行,要求启用管理员身份,输入密码即可完成结束任务等操作。