请高手指点:关于进程管理的问题 我想做一个程序,具体的功能是,当程序运行时,它能禁止指定的某些进程的运行。比如,我如果不想QQ运行,它就能当QQ运行时,检测到QQ已经运行,并关闭该进程。请高手给出主要代码或则给出大体的设计思路。本人先谢谢大家了。。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 遍历进程,找到指定的进程就结束。类似的例子:http://community.csdn.net/Expert/topic/4726/4726211.xml?temp=.3132593 如果遍历进程的话,工作量太大了,而且我要实时进行遍历,因为我并不知道何时QQ会运行,这样对会影响cpu和内存工作。我是想,当进程运行的时候有没有方法能捕获,或则进程运行时会不会触发某些事件。大家再帮忙想想。。先谢谢大家了。 对于QQ来说,暂时还没有想到更好的办法,只能遍历进程,参考如下例子:uses TlHelp32;{$R *.dfm}function FindProcess(ExeName: string): Thandle;var m_hSnapshot: THandle; pe: TProcessEntry32; fend: Boolean;begin Result := 0; m_hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); pe.dwSize := SizeOf(pe); fend := Process32First(m_hSnapshot, pe); while fend do begin if CompareText(pe.szExeFile, ExeName) = 0 then begin Result := OpenProcess(PROCESS_ALL_ACCESS, False, pe.th32ProcessID); Break; end; pe.dwSize := SizeOf(pe); fend := Process32Next(m_hSnapshot, pe); end; CloseHandle(m_hSnapshot);end;procedure TForm1.Button1Click(Sender: TObject);var PH: THandle;begin PH := FindProcess('QQ.exe'); if PH <> 0 then begin TerminateProcess(PH,0); CloseHandle(PH); end;end; 不知道 Hook API, CreateProcess 成不成。 按楼上兄弟所说 Hook CreateProcess API,判断如果是 QQ 则不允许创建进程试试吧:)参考以下帖子中二楼的 woshihaoge(支离破碎) 兄弟的代码 ---http://community.csdn.net/Expert/topic/5297/5297937.xml?temp=.1683008 能不能把函数单元做成BPL?解决另给200,顶者给分! Delphi+sql server编写的程序 但是自己不在客户的机子上安装sql server(在线等待 解决马上揭帖) Delphi与ACCESS数据库的连接问题?高手请进! 跳过槽的兄弟们进来一下,问几个问题!!!!走过路过的一定要帮忙!!先谢过!!!! 关系表SQL语句求解 打开某个记事薄 如何实现延时 项目遇到最大的困境,也不知道何去何从。 cxGrid数据录入问题,输入字符显示过滤列表 OK和CANCEL的问题 如何结束 windows 任务管理器里面的某一个进程? 如何实时监视网页表格的变化呢?
类似的例子:
http://community.csdn.net/Expert/topic/4726/4726211.xml?temp=.3132593
uses
TlHelp32;
{$R *.dfm}function FindProcess(ExeName: string): Thandle;
var
m_hSnapshot: THandle;
pe: TProcessEntry32;
fend: Boolean;
begin
Result := 0;
m_hSnapshot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
pe.dwSize := SizeOf(pe);
fend := Process32First(m_hSnapshot, pe);
while fend do
begin
if CompareText(pe.szExeFile, ExeName) = 0 then
begin
Result := OpenProcess(PROCESS_ALL_ACCESS, False, pe.th32ProcessID);
Break;
end;
pe.dwSize := SizeOf(pe);
fend := Process32Next(m_hSnapshot, pe);
end;
CloseHandle(m_hSnapshot);
end;procedure TForm1.Button1Click(Sender: TObject);
var
PH: THandle;
begin
PH := FindProcess('QQ.exe');
if PH <> 0 then
begin
TerminateProcess(PH,0);
CloseHandle(PH);
end;
end;
http://community.csdn.net/Expert/topic/5297/5297937.xml?temp=.1683008