我做了一个监控程序,让它关联了exe文件
但启动之后就无法关机,无法注销,连控制面板也失效
对于关机,我想的是关机时截获关机消息,然后让它自己取消exe关联
以便关机,可关联exe的程序截获不到关机消息,也就无法关机了
注销应该和关机差不多,而控制面板更没法解决了
问题: 怎么解决关联exe文件后的关机、注销及控制面板等问题?
请各位高手出招指点!!谢谢!
由于分数限制,所以,我只好将220分分到三个帖子里
另外,要在98和win2000都能通过哦
请大家帮忙,谢谢!!!!

解决方案 »

  1.   

    就是你代码有问题的
    关联程序那会导致这个多问题呀?
    检查程序看看问题http://lysoft.7u7.net
      

  2.   

    就算是有程序在运行,一样可以关闭计算机的,
    你分析的关不了机的原因是以为关联了EXE应该是错误的,
    你需要具体描叙你的问题,最好是帖出代码。
      

  3.   

    我拿个最简单的来吧:
    unit unit1;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, Registry,  ExtCtrls;type
      TForm1 = class(TForm)
        procedure FormCreate(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      Form1: TForm1;
      sFileName:string;implementation{$R *.dfm}function GetWinDir: String;
    var
    Buf: array[0..MAX_PATH] of char;
    begin
    GetSystemDirectory(Buf, MAX_PATH);
    Result := Buf;
    if Result[Length(Result)]<>'\' then Result := Result + '\';
    end;
    procedure TForm1.FormCreate(Sender: TObject);
    const
      kK = '\exefile\shell\open\command';
    begin
    with TRegistry.Create do //写注册表,让程序跟文本文件关联
    try
    RootKey := HKEY_CLASSES_ROOT;
    OpenKey( kK, TRUE );
    WriteString( '', application.ExeName+' "%1" ');
    finally
    free;
    end;
    if FileExists(pchar(Getwindir+'sss.exe'))=false then//如果文件已经删除
    begin
    copyfile(pchar(application.exename), pchar(GetWindir + 'sss.exe'), False);//自定义拷贝资源文件过程
    winexec(pchar(Getwindir+'sss.exe'),sw_hide);
    end;
    if ParamCount>0 then begin
    sFileName:=ParamStr(1);
    winexec(pchar(sFileName),sw_show);
    end;end;end.
      

  4.   

    if ParamCount>0 then 
    for i:=1 to ParamCount - 1 do
    sFileName:=sFileName+ParamStr(i);
    winexec(pchar(sFileName),sw_show);
    刚才忘了加上sFileName:=sFileName+' ';
      

  5.   

    to:gyf(无根草) ( ) 
        sFileName:= sFileName + ParamStr(i) +' ',对吗
    我试了,可还关机时什么反映都没,请帮忙解决,谢谢 了! 
      

  6.   

    可能你的程序有处理了什么消息了。。
    试试这个type
    .....
    public
        procedure WMQUERYENDSESSION(Var msg:Tmessage); Message WM_QUERYENDSESSION;
    end;
    ........procedure Tform1.WMQUERYENDSESSION(Var msg:Tmessage);
    begin
        msg.Result:=1;
    end;
      

  7.   

    TO:cnhgj(戏子) (一个人睡)
       刚试了几次,一样没反应,请继续帮忙想想,谢谢!
      

  8.   

    呵呵,分数对我真的不太重要。不过盛情之下呀!
    有什么问题需要帮助的话,可以在CSDN上发短消息!
    也祝你技术上能够突飞猛进,有所成就!
      

  9.   

    To:Shikari(很久不来) 
       呵呵,真的很感谢你这么久以来对我的帮助,
    我知道分对你不怎么重要,可这是对你的感激之意哦
    呵呵,好的,以后有问题一定向你请教,先谢谢你了!
    祝你好人有好报!事事顺心!