捕获别的程序中的键盘输入键码?

Bigmouth 2000-02-09 03:22:00
求教!在VB程序中运行API函数捕获别的程序中的键盘输入键码,该用哪一个函数?
...全文
164 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
freehero 2000-02-10
  • 打赏
  • 举报
回复
delphi我看不懂,能给一个vb的例子吗?
freehero@sohu.com
Firing_Sky 2000-02-09
  • 打赏
  • 举报
回复
这样的话,要用到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;

interface

uses
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;

implementation

function 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

7,763

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧