var
intMainHWND:Longint;//主程序句柄,用于发送消息时用
Shell_TrayWnd:longint;
CtrlDown:Boolean;
hNextHookProc:HHook;
procSaveExit:Pointer;
function KHH(iCode:integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;export;
function EnableHotKeyHook(MainProgramHWND:longint):Bool;export;
function DisableHotKeyHook:bool;Export;
implementation
function KHH(iCode:integer;wParam:WPARAM;lParam:LPARAM):LRESULT;stdcall;export;
const
_Keypressmask=$80000000;
var lpPoint:TPoint;
hwnd:longint;
strClassName,strTrayClassName:String;
SendText: string;//向主程序发送的消息串
SendDataStruct: CopyDataStruct;//消息类型
begin
result:=0;
if iCode<0 then
begin
Result:=CallNextHookEx(hNextHookProc,iCode,wParam,lParam);
exit;
end;
//判断CLASSNAME 与 WND 所用的 LPPOINT 是不,同的。
GetCursorPos(lpPoint);
hwnd:=WindowFromPoint(lpPoint);//读取鼠标指向的控制句柄
SetLength(strClassName,255+2);
GetClassName(hwnd,PChar(strClassName),255);//读取句柄的名字
strClassName:=UpperCase(strClassName);
lpPoint.x :=LOWORD(lParam);//读取鼠标的X标
lpPoint.y :=HIWORD(lParam);//读取鼠标的Y标
hwnd:=WindowFromPoint(lpPoint);//读取鼠标指向的控制句柄
strTrayClassName:='SHELL_TRAYWND';//任务栏
if Copy(strClassName,1,length(strTrayClassName))=strTrayClassName then
if hwnd=Shell_TrayWnd then
begin
if (wparam=WM_NCRBUTTONUP) or (wparam=WM_NCLBUTTONDOWN) then
begin
Result:=1;
exit;
end;
end;{if WND}
strTrayClassName:='SYSTABCONTROL';//任务栏
if Copy(strClassName,1,length(strTrayClassName))=strTrayClassName then exit;
strTrayClassName:='TRAYNOTIFYWND';//页
if Copy(strClassName,1,length(strTrayClassName))=strTrayClassName then
begin
if (wparam=WM_RBUTTONUP) then
begin
hwnd:=GetParent(GetParent(GetParent(hWnd)));
if hWnd=Shell_TrayWnd then Result:=1;
end;
end;
strTrayClassName:='BUTTON';//开始按钮
if Copy(strClassName,1,length(strTrayClassName))=strTrayClassName then
begin
hwnd:=GetParent(hWnd);
if hWnd=Shell_TrayWnd then
begin
if (wparam=WM_RBUTTONUP) or (wparam=WM_LBUTTONDOWN) then Result:=1;
if wparam=WM_LBUTTONUP then
begin
SendText := 'Send';
SendDataStruct.lpData := @SendText[1];
SendDataStruct.cbData := length(Sendtext);
//***************** * * * * 当按下开始按钮时发送信息。
SendMessage(intMainHWND, WM_CopyData,0, lparam(@SendDataStruct));
//***************** * * * *
end;
exit;
end;{if hwnd}
end;
strTrayClassName:='REBARWINDOW';//页
if Copy(strClassName,1,length(strTrayClassName))=strTrayClassName then
begin
if (wparam=WM_RBUTTONUP) or (wparam=WM_LBUTTONDOWN) then
begin
hwnd:=GetParent(hWnd);
if hWnd=Shell_TrayWnd then Result:=1;
end;
end;
strTrayClassName:='TOOLBARWINDOW';//工具栏
if Copy(strClassName,1,length(strTrayClassName))=strTrayClassName then
begin
if (wparam=WM_LBUTTONDOWN) or (wparam=WM_RBUTTONUP) or (wparam=WM_RBUTTONDOWN) then
begin
hwnd:=GetParent(GetParent(hWnd));
if hWnd=Shell_TrayWnd then Result:=1;
end;
end;
end;
function EnableHotKeyHook(MainProgramHWND:longint):Bool;export;
begin
intMainHWND:=MainProgramHWND;
Shell_TrayWnd:= FindWindow('Shell_TrayWnd', nil);
result:=False;
if hNextHookProc<>0 then exit;
hNextHookProc:=SetWindowsHookEx(WH_MOUSE,KHH,Hinstance,0);
Result:=hNextHookProc<>0;
end;
function DisableHotKeyHook:Bool;export;
begin
if hNextHookPRoc<>0 then
begin
UnhookWindowsHookEx(hNextHookProc);
hNextHookProc:=0;
MessageBeep(0);
end;
Result:=hNextHookProc=0;
end;
procedure HotKeyHookExit;
begin
if hNextHookProc<>0 then DisableHotKeyHook;
end;