这样的话,要用到Hook程序,用来勾住系统的消息,这样的话,要做一个Dll
做这个钩子Dll程序,用VB不大方便,我给你一段Delphi写的钩子程序,你看看1. 将以下的文字剪贴存成 HKTest.DPR--- Cut Here ---
library HKTest;uses
HKProc in 'HKProc.pas';exports
EnableHotKeyHook,
DisableHotKeyHook;begin
hNextHookProc := 0;
procSaveExit := ExitProc;
ExitProc := @HotKeyHookExit;
end.
--- Cut Here ---
2. 将以下的文字剪贴存成 HKProc.PAS
(Note: HKTest.DPR 与 HKProc.PAS 建议储存在同一个目录)--- Cut Here ---
unit HKProc;interfaceuses
Windows, Messages;var
hNextHookProc: HHook;
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
begin
Result := CallNextHookEx(hNextHookProc, iCode, wParam, lParam);
Exit;
end;
// 侦测 Ctrl + B 组合键
if ((lParam and _KeyPressMask) = 0) and
(GetKeyState(vk_Control) < 0) and (wParam = Ord('B')) then
begin
Result := 1;
WinExec('Notepad.exe', sw_Normal); // 记事本
end;
end;function EnableHotKeyHook: BOOL; export;
begin
Result := False;
if hNextHookProc <> 0 then Exit;
// 挂上 WH_KEYBOARD 这型的 HOOK, 同时, 传回值必须保留下
// 来, 免得 HOOK 呼叫链结断掉
hNextHookProc := SetWindowsHookEx(WH_KEYBOARD,
KeyboardHookHandler,
HInstance,
0);
Result := hNextHookProc <> 0;
end;function DisableHotKeyHook: BOOL; export;
begin
if hNextHookProc <> 0 then
begin
UnhookWindowshookEx(hNextHookProc); // 解除 Keyboard Hook
hNextHookProc := 0;
MessageBeep(0);
MessageBeep(0);
end;
Result := hNextHookProc = 0;
end;procedure HotKeyHookExit;
begin
// 如果忘了解除 HOOK, 自动代理解除的动作
if hNextHookProc <> 0 then DisableHotKeyHook;
ExitProc := procSaveExit;
end;end.然后在VB中调用 EnableHotKeyHook,DisableHotKeyHook就可以设置钩子,这个钩子的作用是按Ctrl+B就可以启动Notepad
做这个钩子Dll程序,用VB不大方便,我给你一段Delphi写的钩子程序,你看看1. 将以下的文字剪贴存成 HKTest.DPR--- Cut Here ---
library HKTest;uses
HKProc in 'HKProc.pas';exports
EnableHotKeyHook,
DisableHotKeyHook;begin
hNextHookProc := 0;
procSaveExit := ExitProc;
ExitProc := @HotKeyHookExit;
end.
--- Cut Here ---
2. 将以下的文字剪贴存成 HKProc.PAS
(Note: HKTest.DPR 与 HKProc.PAS 建议储存在同一个目录)--- Cut Here ---
unit HKProc;interfaceuses
Windows, Messages;var
hNextHookProc: HHook;
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
begin
Result := CallNextHookEx(hNextHookProc, iCode, wParam, lParam);
Exit;
end;
// 侦测 Ctrl + B 组合键
if ((lParam and _KeyPressMask) = 0) and
(GetKeyState(vk_Control) < 0) and (wParam = Ord('B')) then
begin
Result := 1;
WinExec('Notepad.exe', sw_Normal); // 记事本
end;
end;function EnableHotKeyHook: BOOL; export;
begin
Result := False;
if hNextHookProc <> 0 then Exit;
// 挂上 WH_KEYBOARD 这型的 HOOK, 同时, 传回值必须保留下
// 来, 免得 HOOK 呼叫链结断掉
hNextHookProc := SetWindowsHookEx(WH_KEYBOARD,
KeyboardHookHandler,
HInstance,
0);
Result := hNextHookProc <> 0;
end;function DisableHotKeyHook: BOOL; export;
begin
if hNextHookProc <> 0 then
begin
UnhookWindowshookEx(hNextHookProc); // 解除 Keyboard Hook
hNextHookProc := 0;
MessageBeep(0);
MessageBeep(0);
end;
Result := hNextHookProc = 0;
end;procedure HotKeyHookExit;
begin
// 如果忘了解除 HOOK, 自动代理解除的动作
if hNextHookProc <> 0 then DisableHotKeyHook;
ExitProc := procSaveExit;
end;end.然后在VB中调用 EnableHotKeyHook,DisableHotKeyHook就可以设置钩子,这个钩子的作用是按Ctrl+B就可以启动Notepad
解决方案 »
- 紧急请教,为何使用ADO执行存储过程时,无法返回错误?
- 如何利用vb 做一个将sql server 导出到excel的方法..
- 请问 CoRegisterMessageFilter 这个函数有什么用
- 关于窗口的问题?
- 请问能不能把DATAREPORT做漂亮一点啊?
- Adodc的简单问题,望指教
- 我要把sqlserver中的表导出到access中 在vb中编程实现 只需知道表名 不必考虑表结构 请问该如何处理
- 高难动作求救::VB程序通过调用VC写的DLL在窗体上绘图,可以绘上,但不能autoreDraw
- 如何画出股票分析软件中的技术指标图(MACD等等...)
- 急!怎么样将某控件的名称赋值给一个变量??
- 如何在程序中得到自己的Internet IP地址?
- 如何使ListView 控件项目按数字顺序排序而不是按字母顺序?
[email protected]