监视进程! ( 积分: 20 )

  • 主题发起人 主题发起人 doglive
  • 开始时间 开始时间
D

doglive

Unregistered / Unconfirmed
GUEST, unregistred user!
我要监视系统的进程情况,一旦发现QQ的进程的话就将其杀死,该怎么样做呢?
请高手指个方法!
 
给定_filename应用程序的路径全名,检查是否已启动或进程已存在
function CheckFileNameIsProcess(_filename: string): boolean;
var
h:THandle;
fileName:string;
iLen:integer;
hMod:HMODULE;
cbNeeded:DWORD;
processesID:array[0..1024] of DWORD;
buffNeeded:DWORD;
processCount:DWORD;
index:integer;
begin
EnumProcesses(@processesID,sizeof(processesID),buffNeeded);
processCount:=buffNeeded div sizeof(DWORD);
for index:=0 to processCount-1 do
begin
h:=OpenProcess(PROCESS_ALL_ACCESS,false,processesID[index]);
if h>0 then
begin
if EnumProcessModules(h,@hMod,sizeof(hMod),cbNeeded)then
begin
SetLength(fileName,MAX_PATH);
iLen:=GetModuleFileNameEx(h,hMod,PCHAR(fileName),MAX_PATH);
if iLen<>0then
begin
SetLength(fileName,StrLen(PCHAR(fileName)));
if(UpperCase(filename)=UpperCase(trim(_filename)))then
MessageBox(self.ParentHandle,'程序已启动!','提示',MB_OK);
end;
end;
CloseHandle(h);
end;
end;
end;

改一改可以获取所有进程的文件路径

copy别人的
 
通过进程名判断是不行的,人家把QQ改名你就无效了,一般是判断窗口里面的类和结构特征
这样杀
 
我是想要实时监控,该怎么样办?
 
我想过用一个timer什么之类的东西来实现,但是感觉比较费资源,,要重复地来操作数据
能不能用一个比较好的方法来实现呢,比如一旦有新进程出现的话就发出一个消息来通知,
是不是有相应的消息呢?
请高手务必指教!
 
窗口钩子
 
//获得窗口文本
function GetWndText(hWnd: HWND): String;
Var
Ret:LongInt;
mText:PChar;
Buf:Integer;
begin
Ret:=SendMessage(hWnd,WM_GETTEXTLENGTH,0,0)+1;
GetMem(mText,Ret);
try
Buf:=LongInt(mText);
SendMessage(hWnd,WM_GETTEXT,Ret,Buf);
Result:=StrPas(mText);
finally
FreeMem(mText,Ret);
end;
end;

//判断是否是QQ窗体
function QQisOn(str:string):boolean;
begin
if (Pos('聊天中',str)>0) or
(Pos('发送消息',str)>0) or
(Pos('群',str)>0) then
result:=true
else
result:=false;
end;



var
h:HWND;
str:string;
begin
h:=GetForegroundWindow;
str:=GetWndText(h);
if QQisOn(str) then showmessage('yes') else showmessage('on');
end;
 
后退
顶部