我想在自己的程序运行后,可以在系统中任何一个打开或者保存的对话框上添加相应的功能,所以想通过点击右上角的“?”按钮来触发运行自己的代码,不知道怎样入手。
小弟是菜鸟,大虾给个思路吧!
问题解决再送100分!

解决方案 »

  1.   

    在Main Form的OnShow中,添加如下代码即可:ShowWindow(Application.Handle,SW_HIDE)此后,必须处理最小化消息:privateprocedure WMSysCommand(var msg: TWMSysCommand); message WM_SysCommand;{....}implementationprocedure TMainForm.WMSysCommand(var msg: TWMSysCommand);beginif msg.CmdType and $FFF0 = SC_CONTEXTHELP then  ShowMessage('OK');elseinherited;end;
      

  2.   

    楼上的,我的意思是在自己程序运行后,就可以在其它程序如PotoShop、或者其它程序的打开或保存对话框上右上角的“?”按钮触发自己的代码的!反之,自己的程序退出后就没有这个功能了!
    你上面的代码能不能实现这个要求呢?
      

  3.   


    上面的代码 只是一个大概的说明 如果楼主真的要达到这样的要求的话
    必须要把我上面的代码写到DLL中
    而且要设置一个HOOK,拦截系统中所有的WM_SYSCOMMAND消息才行
    否则单单在自己的FORM中实现,只可能对自己的窗体进行操作
      

  4.   

    我写的全局鼠标钩子是正常的,但是,我想全局拦截系统所有对话框右上角那个“?”按钮点击的事件,因此修改了代码,运行正常,但是发现老是钩不到,没有反映,全部代码在下面,大虾帮我看看吧,是哪个地方些错了!
    *************************************************************
    DLL文件:library MouseHook;uses
      MouseIdle in 'MouseIdle.pas';Exports
      CreateHook,
      RemoveHook;begin
      whHelp := 0;
      procSaveExit := ExitProc;
      ExitProc := @HelpHookExit;
    end.
    *******************************************************************
    MouseIdle.pas 文件unit MouseIdle;interfaceuses
      Windows, Messages;var
      whHelp: HHook;
      procSaveExit: Pointer;  function CreateHook: Boolean; export;
      function RemoveHook: Boolean; export;
      procedure HelpHookExit; far;
      function HelpProc(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; export;
    implementationfunction CreateHook: Boolean;
    begin
      Result := false;
      if whHelp <> 0 then Exit;
      whHelp := SetWindowsHookEx(WH_SYSMSGFILTER, @HelpProc, Hinstance, 0);
      Result := whHelp <> 0;
    end;function RemoveHook: Boolean;
    begin
      if whHelp <> 0 then
      begin
        UnHookWindowsHookEx(whHelp);
        whHelp := 0;
      end;
      Result := whHelp = 0;
    end;procedure HelpHookExit;
    begin
      if whHelp <> 0 then
        RemoveHook;
      Exitproc := procSaveExit;
    end;function HelpProc(iCode: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall; export;
    begin
      Result := 0;
      if iCode < 0 then Result := CallNextHookEx(whHelp, iCode, wParam, lParam);  if PCWPStruct(lParam)^.message = WM_SysCommand then
        if  pMsg(PCWPStruct(lParam)^.message).message = SC_CONTEXTHELP then
          MessageBox(0, '点击窗体右上角的帮助按钮', 'Hook', 0+64);
    end;end.*********************************************************************