难题:如何捕获系统中任何或保存的对话框上点击右上角那个问号“?”按钮的消息?
我想在自己的程序运行后,可以在系统中任何一个打开或者保存的对话框上添加相应的功能,所以想通过点击右上角的“?”按钮来触发运行自己的代码,不知道怎样入手。
小弟是菜鸟,大虾给个思路吧!
问题解决再送100分!
问题点数:0、回复次数:7Top
1 楼Drate(小虫(好好学习,天天向上))回复于 2003-09-04 11:53:32 得分 0
在Main Form的OnShow中,添加如下代码即可:
ShowWindow(Application.Handle,SW_HIDE)
此后,必须处理最小化消息:
private
procedure WMSysCommand(var msg: TWMSysCommand); message WM_SysCommand;
{....}
implementation
procedure TMainForm.WMSysCommand(var msg: TWMSysCommand);
begin
if msg.CmdType and $FFF0 = SC_CONTEXTHELP then
ShowMessage('OK');
else
inherited;
end;
Top
2 楼jihejihe(几何)回复于 2003-09-04 12:10:43 得分 0
楼上的,我的意思是在自己程序运行后,就可以在其它程序如PotoShop、或者其它程序的打开或保存对话框上右上角的“?”按钮触发自己的代码的!反之,自己的程序退出后就没有这个功能了!
你上面的代码能不能实现这个要求呢?Top
3 楼jihejihe(几何)回复于 2003-09-04 14:55:14 得分 0
代码好像执行无效的?Top
4 楼Drate(小虫(好好学习,天天向上))回复于 2003-09-04 15:06:51 得分 0
上面的代码 只是一个大概的说明
如果楼主真的要达到这样的要求的话
必须要把我上面的代码写到DLL中
而且要设置一个HOOK,拦截系统中所有的WM_SYSCOMMAND消息才行
否则单单在自己的FORM中实现,只可能对自己的窗体进行操作Top
5 楼jihejihe(几何)回复于 2003-09-04 15:41:55 得分 0
我就是需要这样的功能,能不能给我个例子看看?
麻烦你了Top
6 楼jihejihe(几何)回复于 2003-12-17 17:06:58 得分 0
我写的全局鼠标钩子是正常的,但是,我想全局拦截系统所有对话框右上角那个“?”按钮点击的事件,因此修改了代码,运行正常,但是发现老是钩不到,没有反映,全部代码在下面,大虾帮我看看吧,是哪个地方些错了!
*************************************************************
DLL文件:
library MouseHook;
uses
MouseIdle in 'MouseIdle.pas';
Exports
CreateHook,
RemoveHook;
begin
whHelp := 0;
procSaveExit := ExitProc;
ExitProc := @HelpHookExit;
end.
*******************************************************************
MouseIdle.pas 文件
unit MouseIdle;
interface
uses
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;
implementation
function 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.
*********************************************************************Top
7 楼jihejihe(几何)回复于 2003-12-17 18:36:29 得分 0
调了一天都调不出,郁闷...Top




