怎么改变键盘输入的内容,如用户按"A"键,系统中所有的程序都收到了一个"B"(100分)

  • 主题发起人 主题发起人 jiangxiancheng
  • 开始时间 开始时间
J

jiangxiancheng

Unregistered / Unconfirmed
GUEST, unregistred user!
我用键盘钩子又收到键盘消息,我却不知道怎么改变。
 
你要控制的是操作系统还是你的应用程序系统内?
 
要是在应用程序内部,就容易很多,可以在接受输入的地方转化,将asscia加一就可以了
系统的话,不知道应该怎么做。
 
把这个消息吃掉,再发个新的键给其它系统

不知道行不行,我是外行,这是我设想的,呵…
 
用钩子,查一下键盘消息的键值定义修改一下重发就行了
 
当然是整个系统了。
我在钩子程序中收到,问题是我怎么改变它。
function KeyboardProc(Code: Integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
begin
if Code < 0 then begin
Result := CallNextHookEx(HookID, Code, wParam, lParam);
Exit;
end
else begin
////也就是在这里怎么写。
end;
end;
 
这个不难嘛
 
不难,那你说啊。
 
兄弟们,发言啊。
 
搞破坏用的吗?
 
搞什么破坏,就是有些键不好用了。想用个程序换个键用。
to gxcooo:
我知道是Hook,问题是我的Hook中怎么写。
 
555555,高手们,帮帮忙吧。
 
To jiangxiancheng
看看這樣行不行

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;
// 偵測 A 鍵
if ((lParam and _KeyPressMask) = 0) and
(wParam = Ord('A')) then
begin
Result := 1; // 攔截下來

// 如果你只是想換一換字符, 可以這樣
keybd_event(Ord('B'), 0, 0, 0);
keybd_event(Ord('B'), 0, KEYEVENTF_KEYUP, 0);

// 如果你想所有的視窗都接收到這個字符
// PostMessage(HWND_BROADCAST, WM_CHAR, Ord('B'), lParam);
end;
end;
 
CallNextHookEx不就是将这个消息向下一个接收者传吗? 如果在此将wParam改成ord('B')
然后下传不就行了吗? 好像不要那么复杂吧
 
在改之前判断一下是不是‘A’,
 
能保证你消息链的第一个吗?

你的消息可能被被人CallNextHookEx
 
之后就
SENDMESSAGE啊
 
谁能给一个可行的代码,我在其中用Sendmessage(Postmessage)不成功,用keybd_event
有时也不行,改变wParam再CallNextHookEx也不行。
如果分不够,可以再加嘛。我是要一个可行的代码。
帮帮忙啦。
 
好。谢谢了,自己终于找到问题所在。
 
后退
顶部