我想做一个程序,让他在早上7点的时候关闭迅雷,flashget,peer等等这些p2p进程(局域网),我该使用什么函数?
必须正常关闭比较好,否则在写入硬盘的时候..........
timer的问题已经解决,关键是不知道怎么正常的关闭(正常!!起码需要别的进程会自己退出!!)否则就抓瞎了
由于功力的问题,对于winapi没有多少理解,麻烦大家帮我解答一下。
我google了一下,有个思路,向该进程发送一个关机消息,不知道这样行不行得通?
.........如果行的通,估计我还是写不通,还请些一下代码。

解决方案 »

  1.   

    问题是不知道用什么消息好.........我现在去测试一下wm_close
      

  2.   

    wm_close 是吧窗口关小了........
    无解中
    有的最小化了,隐藏了=找不到主窗口 不知道怎么发送到pid上去
    总结来说
    一,发送什么消息过去好?WM_QUERYENDSESSION?貌似没有主窗口这个比较靠谱。
    二,怎么发送消息到pid上去。
      

  3.   

    或者参考一下http://hi.baidu.com/wxpool/blog/item/658673f5e44f0167dcc47427.html
      

  4.   

    ok,it's done 下面的代码测试成功。虽然看不懂........
    问题依然还在,这样没有保存就退出了。
    由于看不懂,还是得问问怎么发送一个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.
      

  5.   

    怎么发送一个WM_QUERYENDSESSION到进程中去。
    这里是关键呀,起码也得告诉迅雷我要强关了再关吧..........
      

  6.   

    难道真的要挂个c++上去?google大神只告诉我这个有解
      

  7.   

    可以调用 taskkill ,直接杀掉进程。taskkill -f -im "QQ.exe"或者写一个批处理文件,把你要在同一时间结束的进程写在一起,定时执行。这个比较灵活,以后需要增加什么的,可以不用重新修改定时程序。