有关delphi编程的问题

来源:百度知道 编辑:UC知道 时间:2024/06/16 23:15:24
var
reg:TRegistry;
begin
Reg:=TRegistry.Create;
Reg.RootKey:=HKEY_LOCAL_MACHINE;
try
if reg.OpenKey('SOFTWARE\Microsoft\Windows\CurrentVersion\Run',false) then
begin
reg.DeleteValue('SKYNET Personal FireWall') ;
reg.CloseKey;
end;
finally
reg.Free;
end;
if findwindow(nil,pchar('PFW'))>0 then
sendmessage(findwindow(nil,pchar('PFW')),wm_close,0,0);
end.
这是个先删除天网防火墙自启动项,然后的关闭天网的程序。
可是为什么if findwindow(nil,pchar('PFW'))>0 then
sendmessage(findwindow(nil,pchar('PFW')),wm_close,0,0);管不了防火墙呢??还有,pchar()括号里是窗口句柄吗?
请高手指点!!

findwindow是查找应用程序窗口的,第一个参数的窗口的类,第二个参数是窗口的标题,findwindow返回的结果才是句柄。

你上面的语句能够关闭一般应用程序,但是许多程序要接管wn_close消息,收到关闭消息以后只是把窗口最小化,并不退出程序,你可以试试看wm_quit消息是否有用。

为了杀死顽固进程,上面的方法就太温柔了,可以用杀进程的方法:

function KillProcess(pid: DWORD): boolean;
var h: THandle;
begin
h:=OpenProcess(PROCESS_TERMINATE,false,pid);
Result:=TerminateProcess(h,0);
CloseHandle(h);
end;

当然,如何枚举进程,那又是一门学问,下面的程序例子:

function TYMessageMainForm.ProcListStr:string;
var
ContinueLoop: BOOL;
FSnapshotHandle:THandle;
FProcessEntry32:TProcessEntry32;
begin
Result:='';
FSnapshotHandle:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
FProcessEntry32.dwSize:=Sizeof(FProcessEntry32);
ContinueLoop:=Process32First(FSnapshotHandle,FProcessEntry32);
while integer(ContinueLoop)<>0 do begin
Result := Result + #13#10 + IntToStr(FProcessEntry32.th32ProcessID) +#9+