我想做一个程序,让他在早上7点的时候关闭迅雷,flashget,peer等等这些p2p进程(局域网),我该使用什么函数?
必须正常关闭比较好,否则在写入硬盘的时候..........
timer的问题已经解决,关键是不知道怎么正常的关闭(正常!!起码需要别的进程会自己退出!!)否则就抓瞎了
由于功力的问题,对于winapi没有多少理解,麻烦大家帮我解答一下。
我google了一下,有个思路,向该进程发送一个关机消息,不知道这样行不行得通?
.........如果行的通,估计我还是写不通,还请些一下代码。
必须正常关闭比较好,否则在写入硬盘的时候..........
timer的问题已经解决,关键是不知道怎么正常的关闭(正常!!起码需要别的进程会自己退出!!)否则就抓瞎了
由于功力的问题,对于winapi没有多少理解,麻烦大家帮我解答一下。
我google了一下,有个思路,向该进程发送一个关机消息,不知道这样行不行得通?
.........如果行的通,估计我还是写不通,还请些一下代码。
无解中
有的最小化了,隐藏了=找不到主窗口 不知道怎么发送到pid上去
总结来说
一,发送什么消息过去好?WM_QUERYENDSESSION?貌似没有主窗口这个比较靠谱。
二,怎么发送消息到pid上去。
问题依然还在,这样没有保存就退出了。
由于看不懂,还是得问问怎么发送一个WM_QUERYENDSESSION到进程中去。
强制退出的话,==不弄完美不专业.........
unit Unit1;interfaceuses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Tlhelp32, StdCtrls;type
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;implementation
function KillTask(ExeFileName:string):integer;
const
PROCESS_TERMINATE = $0001;//这里是?
var
ContinueLoop: BOOLean;
FSnapshotHandle: THandle;
FProcessEntry32: TProcessEntry32;
begin
Result := 0;
FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);//what?
FProcessEntry32.dwSize := SizeOf(FProcessEntry32);//依然不懂
ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32);//tell me whywhile 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;{$R *.dfm}procedure TForm1.Button1Click(Sender: TObject);
begin
if KillTask('qq.exe') <> 0 then
showmessage('结束QQ成功')
else
showmessage('无法结束QQ');
end;end.
这里是关键呀,起码也得告诉迅雷我要强关了再关吧..........