请问怎样实现对power,sleep,wake键的屏蔽 如题,谢谢 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 哈哈,继续帖代码给你如果Hook在应用程序中实现,若应用程序不是当前窗口时,该Hook就不起作用;如果Hook在DLL中实现,程序在运行中动态调用它,它能实时对系统进行监控。所以采用在DLL中实现Hook。新建一个导出两个函数的DLL文件,在HookUnit.pas中定义了钩子具体实现过程。代码如下:library Hook;uses HookUnit in 'HookUnit.pas';exports EnableHotKeyHook, DisableHotKeyHook;begin hNextHookProc := 0; procSaveExit := ExitProc; ExitProc := @HotKeyHookExit;end.②键盘钩子编程实现过程如下:unit HookUnit;interfaceuses Windows, Messages;var hNextHookProc: HHook;//保存SetWindowsHookEx的返回值 procSaveExit: Pointer; function KeyboardHookHandler(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall; export; function EnableHotKeyHook: BOOL; export;//安装钩子 function DisableHotKeyHook: BOOL; export;//卸载钩子 procedure HotKeyHookExit; far;implementationfunction KeyboardHookHandler(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall; export;const _KeyPressMask=$80000000;//键盘掩码常量begin Result:=0; If iCode < 0 Then //根据SDK说明,若iCode小于0,调用CallNextHookEx并返回 begin Result:=CallNextHookEx(hNextHookProc, iCode, wParam, lParam); Exit; end; // 监测是否按下了Ctrl+X、Ctrl+V、Ctrl+C这三个组合键,若按下则退出,不响应事件//你把下面的健改成你的建旧可以了笆 if ((lParam and _KeyPressMask) = 0) and(GetKeyState(vk_control) <0) and ((wParam = Ord('X'))or(wParam = Ord('V'))or(wParam = Ord('C')))then begin Result:=1; Exit; end;end;function EnableHotKeyHook: BOOL; export;begin Result := False;//初始化返回值 if hNextHookProc<>0 then//如果已经注册,直接退出 Exit; //挂上键盘钩子,同时传回值必须保留下来,免得Hook呼叫链结断掉 hNextHookProc:=SetWindowsHookEx(WH_KEYBOARD,KeyboardHookHandler,HInstance,0);//注册hook Result:=hNextHookProc <> 0;//通过返回值确定是否注册成功end;function DisableHotKeyHook: BOOL; export;begin if hNextHookProc<>0 then begin UnhookWindowshookEx(hNextHookProc);//解除Keyboard Hook hNextHookProc:=0;//恢复标志 end; Result:=hNextHookProc=0;//返回是否注销成功 end;procedure HotKeyHookExit;begin if hNextHookProc<>0 then DisableHotKeyHook;//如果忘了解除HOOK,自动代理解除动作 ExitProc:=procSaveExit;end;end.③主程序unit HkUnit;interfaceuses Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;type TForm1 = class(TForm)Memo1: TMemo; procedure FormCreate(Sender: TObject); procedure FormClose(Sender: TObject; var Action: TCloseAction); private { Private declarations } public { Public declarations } end;var Form1: TForm1;implementation{$R *.DFM}function EnableHotKeyHook: BOOL; external 'HookDll.DLL';//dll中注册hook的函数,传递参数为回调函数的指针function DisableHotKeyHook: BOOL; external 'HookDll.DLL';//dll中注销hook的函数procedure TForm1.Memo1ContextPopup(Sender: TObject; MousePos: TPoint; var Handled: Boolean);//屏蔽Memo1鼠标右键弹出的系统菜单begin Handled:=true;end;procedure TForm1.FormCreate(Sender: TObject);begin EnableHotKeyHook;end;procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);begin DisableHotKeyHook;end;end. 2000下可以用WH_KEYBOARD_LL“底层系统钩子”98下不知道 我只需要在2000/XP下实现在我的应用程序里屏蔽power,sleep,wake 我试了一下,power,sleep,wake三个家按下时好像不会进入KeyboardHookHandler函数 看看http://community.csdn.net/Expert/topic/3582/3582523.xml?temp=.4015467或者有帮组:)http://lysoft.7u7.net delphi 導入excel問題~ 关于EhLib版本问题 求:delphi2007 安装ehlib和pastreport组件的方法 如何用combobox移动数据集 delphi结构的问题 各位老大 怎么样写一个带参的程序? 在线等! 窗口初始化时运行过程代码加在哪,在哪调用? 招兼职软件工程师(饮食行业)2名 初次学delphi,请多多指教,错误出现了 切换输入法的小程序,应用在触摸屏系统中,有诸多问题想请教,请高手们进来看看 ifthen如何使用?------------(一小时内结贴) 请教有关模拟按键问题
如果Hook在应用程序中实现,若应用程序不是当前窗口时,该Hook就不起作用;如果Hook在DLL中实现,程序在运行中动态调用它,它能实时对系统进行监控。所以采用在DLL中实现Hook。新建一个导出两个函数的DLL文件,在HookUnit.pas中定义了钩子具体实现过程。代码如下:
library Hook;
uses
HookUnit in 'HookUnit.pas';
exports
EnableHotKeyHook,
DisableHotKeyHook;
begin
hNextHookProc := 0;
procSaveExit := ExitProc;
ExitProc := @HotKeyHookExit;
end.
②键盘钩子编程实现过程如下:
unit HookUnit;
interface
uses
Windows, Messages;
var
hNextHookProc: HHook;//保存SetWindowsHookEx的返回值
procSaveExit: Pointer;
function KeyboardHookHandler(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall; export;
function EnableHotKeyHook: BOOL; export;//安装钩子
function DisableHotKeyHook: BOOL; export;//卸载钩子
procedure HotKeyHookExit; far;
implementation
function KeyboardHookHandler(iCode: Integer;wParam: WPARAM;lParam: LPARAM): LRESULT; stdcall; export;
const
_KeyPressMask=$80000000;//键盘掩码常量
begin
Result:=0;
If iCode < 0 Then //根据SDK说明,若iCode小于0,调用CallNextHookEx并返回
begin
Result:=CallNextHookEx(hNextHookProc, iCode, wParam, lParam);
Exit;
end;
// 监测是否按下了Ctrl+X、Ctrl+V、Ctrl+C这三个组合键,若按下则退出,不响应事件
//你把下面的健改成你的建旧可以了笆
if ((lParam and _KeyPressMask) = 0) and(GetKeyState(vk_control) <0)
and ((wParam = Ord('X'))or(wParam = Ord('V'))or(wParam = Ord('C')))then
begin
Result:=1;
Exit;
end;
end;
function EnableHotKeyHook: BOOL; export;
begin
Result := False;//初始化返回值
if hNextHookProc<>0 then//如果已经注册,直接退出
Exit;
//挂上键盘钩子,同时传回值必须保留下来,免得Hook呼叫链结断掉
hNextHookProc:=SetWindowsHookEx(WH_KEYBOARD,KeyboardHookHandler,HInstance,0);
//注册hook
Result:=hNextHookProc <> 0;//通过返回值确定是否注册成功
end;
function DisableHotKeyHook: BOOL; export;
begin
if hNextHookProc<>0 then
begin
UnhookWindowshookEx(hNextHookProc);//解除Keyboard Hook
hNextHookProc:=0;//恢复标志
end;
Result:=hNextHookProc=0;//返回是否注销成功
end;
procedure HotKeyHookExit;
begin
if hNextHookProc<>0 then DisableHotKeyHook;//如果忘了解除HOOK,自动代理解除动作
ExitProc:=procSaveExit;
end;
end.
③主程序
unit HkUnit;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TForm1 = class(TForm)
Memo1: TMemo;
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;var
Form1: TForm1;
implementation
{$R *.DFM}
function EnableHotKeyHook: BOOL; external 'HookDll.DLL';//dll中注册hook的函数,传递参数为回调函数的指针
function DisableHotKeyHook: BOOL; external 'HookDll.DLL';//dll中注销hook的函数
procedure TForm1.Memo1ContextPopup(Sender: TObject; MousePos: TPoint;
var Handled: Boolean);//屏蔽Memo1鼠标右键弹出的系统菜单
begin
Handled:=true;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
EnableHotKeyHook;
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
DisableHotKeyHook;
end;
end.