请教,wpf 全局键盘钩子子 如何获取其他进程的 键

温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!&&|&&
LOFTER精选
网易考拉推荐
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
阅读(2565)|
用微信&&“扫一扫”
将文章分享到朋友圈。
用易信&&“扫一扫”
将文章分享到朋友圈。
历史上的今天
loftPermalink:'',
id:'fks_',
blogTitle:'全局键盘钩子',
blogAbstract:'// CatchKey.cpp : Defines the entry point for the DLL application.//#define _WIN32_WINNT
//设置系统版本,可以使用底层键盘钩子#define WM_MY_SHORTS (WM_USER + 105)#include \"windows.h\"//全局变量 LPWORD\t\tg_lpdwVirtualKey = NULL;
//Keycode 数组的指针 int
g_nLength = 0;
//Keycode 数组的大小 HINSTANCE
g_hInstance = NULL;
//模块实例句柄
blogTag:'',
blogUrl:'blog/static/',
isPublished:1,
istop:false,
modifyTime:8,
publishTime:9,
permalink:'blog/static/',
commentCount:0,
mainCommentCount:0,
recommendCount:0,
bsrk:-100,
publisherId:0,
recomBlogHome:false,
currentRecomBlog:false,
attachmentsFileIds:[],
groupInfo:{},
friendstatus:'none',
followstatus:'unFollow',
pubSucc:'',
visitorProvince:'',
visitorCity:'',
visitorNewUser:false,
postAddInfo:{},
mset:'000',
remindgoodnightblog:false,
isBlackVisitor:false,
isShowYodaoAd:false,
hostIntro:'',
hmcon:'0',
selfRecomBlogCount:'0',
lofter_single:''
{list a as x}
{if x.moveFrom=='wap'}
{elseif x.moveFrom=='iphone'}
{elseif x.moveFrom=='android'}
{elseif x.moveFrom=='mobile'}
${a.selfIntro|escape}{if great260}${suplement}{/if}
{list a as x}
推荐过这篇日志的人:
{list a as x}
{if !!b&&b.length>0}
他们还推荐了:
{list b as y}
转载记录:
{list d as x}
{list a as x}
{list a as x}
{list a as x}
{list a as x}
{if x_index>4}{break}{/if}
${fn2(x.publishTime,'yyyy-MM-dd HH:mm:ss')}
{list a as x}
{if !!(blogDetail.preBlogPermalink)}
{if !!(blogDetail.nextBlogPermalink)}
{list a as x}
{if defined('newslist')&&newslist.length>0}
{list newslist as x}
{if x_index>7}{break}{/if}
{list a as x}
{var first_option =}
{list x.voteDetailList as voteToOption}
{if voteToOption==1}
{if first_option==false},{/if}&&“${b[voteToOption_index]}”&&
{if (x.role!="-1") },“我是${c[x.role]}”&&{/if}
&&&&&&&&${fn1(x.voteTime)}
{if x.userName==''}{/if}
网易公司版权所有&&
{list x.l as y}
{if defined('wl')}
{list wl as x}{/list}查看: 1598|回复: 5
请大神帮忙看个键盘钩子的程序
阅读权限10
在线时间 小时
想要实现键盘的全局响应,按下某个键,vba完成某个动作,在网上和教程中找到了以下代码。目前,焦点不在excel上,钩子可以正常使用。但如果焦点在excel上反而不能获取到键盘的信息。真是太奇怪了。请各位帮忙看下。
Public hHook As Long '用来存放钩子的句柄
Declare Function UnhookWindowsHookEx Lib &user32& (ByVal hHook As Long) As Long
Declare Function SetWindowsHookEx Lib &user32& Alias &SetWindowsHookExA& (ByVal idHook As Long, ByVal lpfn As Long, ByVal hmod As Long, ByVal dwThreadId As Long) As Long
Declare Function CallNextHookEx Lib &user32& (ByVal hHook As Long, ByVal ncode As Long, ByVal wParam As Long, lParam As Long) As Long
Public Declare Sub CopyMemory Lib &kernel32& Alias &RtlMoveMemory& (Destination As Any, Source As Any, ByVal Length As Long)
Public Type EVENTMSG
& & vKey As Long
& & sKey As Long
& & flag As Long
& & time As Long
Public mymsg As EVENTMSG
Public Const WH_KEYBOARD_LL = 13
Public Const WM_KEYDOWN = &H100
Public Function MyKBHook(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
'这些参数在不同钩子中具有不同含义,在这里ncode 是类型代码
If ncode = 0 Then
If wParam = WM_KEYDOWN Then
&&CopyMemory mymsg, ByVal lParam, Len(mymsg)
&&'如果按下的是Home键,则第一个cells+1
& & If mymsg.sKey = 71 Then
& && &&&'显示按下的键
& && &&&Worksheets(&sheet1&).Cells(1, 1) = Worksheets(&sheet1&).Cells(1, 1) + 1
& && &&&UserForm1.Hide
& & End If
'将消息传给下一个钩子,如果你想锁定键盘,只需要把这句改成MyKBHook =-1,表示吃掉这个消息,这样键盘就输入不了了:-)
MyKBHook = CallNextHookEx(hHook, ncode, wParam, lParam)
End Function
Sub ADDHOOK()
'IThreadId = GetCurrentThreadId
'IHook = SetWindowsHookEx(WH_CBT, AddressOf HookProc, 0&, IThreadId)
hHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf MyKBHook, Application.Hinstance, 0)
If hHook = 0 Then
'如果钩子注册失败会返回0,否则返回注册的钩子句柄
& & MsgBox &钩子注册失败&
Sub UNHOOK()
UnhookWindowsHookEx hHook
阅读权限10
在线时间 小时
& && &UserForm1.Hide&&那一句添加错了,烦请大家帮我测试的时候直接注销掉。
阅读权限30
在线时间 小时
<font color="#6018507 发表于
UserForm1.Hide&&那一句添加错了,烦请大家帮我测试的时候直接注销掉。
不是编辑状态时,测试可以通过
阅读权限30
在线时间 小时
& & & & & & & &
关注,学习
阅读权限10
在线时间 小时
sz_wap 发表于
不是编辑状态时,测试可以通过
请问不在编辑状态指的是什么呢??我感觉一进入excel就会自动选择某个单元。大神能再说明下吗??
阅读权限30
在线时间 小时
<font color="#6018507 发表于
请问不在编辑状态指的是什么呢??我感觉一进入excel就会自动选择某个单元。大神能再说明下吗??
编辑状态是指你正在某个单元格里输入内容
这时钩子程序如果去修改其他单元格内容,会导致EXCEL崩溃
最新热点 /1
ExcelHome每周都有线上直播公开课,
国内一流讲师真身分享,高手贴身答疑,
赶不上直播还能看录像,
关键居然是免费的!
厚木哥们都已经这么努力了,
你还好意思说学不好Office。
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师来大神,关于按键屏蔽寻求破解之法 _ 有问有答 - 按键精灵论坛
腾讯微博:
软件版本:2014.05软件大小:21.6M更新时间:07-04
软件版本:3.2.9软件大小:62.5M更新时间:12-07
软件版本:1.3.1软件大小:29.2M更新时间:09-29
软件版本:1.1.0软件大小:12.3M更新时间:12-29
查看: 708|回复: 5
按键精灵开发者3级可通过提升认证等级来升级勋章:rz.anjian.com按键会员(季)按键会员绑定账号后自动赠送脚本作者商业小精灵作者绑定账号后自动赠送爱心大使积极帮助新手(可向管理员进行申请)
以下是仿某游戏屏蔽按键的功能写的一个小程序,用按键精灵(不管前台或后台)在输入框内模拟按键输入字符时就会显示用第三方。本人水平有限,除了用驱动硬件模拟以外别无它法,在此想请教一下大神,在不改此程序的情况下还有没有别的办公法模拟按键输入字符时不会显示第三方。此程序的原理可谓简单粗爆,也就是10多句代码,挂了一个全局键盘钩子 WH_KEYBOARD_LL 导致keybd_event
postmessage
sendmessage 全部死翘翘。下面是程序,d7写的 (, 下载次数:11)
&font color=&Red&&&strong&接各种单QQ:&/strong&&/font&
过大年勋章俩小福娃给大家拜年啦!黄金之翼黄金之翼勋章按键精灵开发者4级可通过提升认证等级来升级勋章:rz.anjian.com小红帽对论坛提出良好建议(可向管理员申请)
你确定你这个程序是正常的?
为什么手动输入都提示第三方呢?
按键精灵开发者3级可通过提升认证等级来升级勋章:rz.anjian.com按键会员(季)按键会员绑定账号后自动赠送脚本作者商业小精灵作者绑定账号后自动赠送爱心大使积极帮助新手(可向管理员进行申请)
回复 谁说手动输入出现第三方?
&font color=&Red&&&strong&接各种单QQ:&/strong&&/font&
过大年勋章俩小福娃给大家拜年啦!黄金之翼黄金之翼勋章按键精灵开发者4级可通过提升认证等级来升级勋章:rz.anjian.com小红帽对论坛提出良好建议(可向管理员申请)
回复 在打开按键精灵的情况下手动输入就第三方了
按键精灵开发者3级可通过提升认证等级来升级勋章:rz.anjian.com按键会员(季)按键会员绑定账号后自动赠送脚本作者商业小精灵作者绑定账号后自动赠送爱心大使积极帮助新手(可向管理员进行申请)
回复 这个应该不可能是
&font color=&Red&&&strong&接各种单QQ:&/strong&&/font&
按键精灵开发者3级可通过提升认证等级来升级勋章:rz.anjian.com按键会员(季)按键会员绑定账号后自动赠送脚本作者商业小精灵作者绑定账号后自动赠送爱心大使积极帮助新手(可向管理员进行申请)
回复 下面是此程序源码unit Unit1;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdC
TForm1 = class(TForm)
Label1: TL
procedure FormCreate(Sender: TObject);
procedure meclose(Sender: TO var Action: TCloseAction);
procedure memokeypress(Sender: TO var Key: Char);
{ Private declarations }
{ Public declarations }
Form1: TForm1;
function hookkeyproc(ncode:wparam:lparam:lparam): //键盘钩子回调函数
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
memo1.Text := &#39;&#39;;
hook := 0; keyoff :=
hook := setwindowshookex(13,@hookkeyproc,hInstance,0); //程序启动时安装钩子
function hookkeyproc(ncode:wparam:lparam:lparam): //回调函数实现
nkey:array[0..5]
if ncode = 0 then
copymemory(@nkey,pointer(lparam),sizeof(nkey));
if (nkey[2] && 16) and (nkey[2] && 144) then //判断标志位
result := callnexthookex(0,ncode,wparam,lparam);
procedure TForm1.meclose(Sender: TO var Action: TCloseAction);
unhookwindowshookex(hook); //程序关闭时卸载钩子
procedure TForm1.memokeypress(Sender: TO var Key: Char);
if not keyoff then
form1.Label1.Caption := &#39;你使用了第三方程序模拟按键&#39;;
&font color=&Red&&&strong&接各种单QQ:&/strong&&/font&windows服务中能实现系统的全局键盘hook监听么_百度知道
windows服务中能实现系统的全局键盘hook监听么
我有更好的答案
钩子消息会被截获,也就是你取不到消息,所以最好的办法是用C写钩子DLL钩子分为线程钩子和系统钩子。线程钩子只能钩取本线程的消息。上次在哪看过,SetWindowsHookEx如果遭遇到其他的钩子,而系统钩子能勾取系统中所有的消息。VB能实现的只是线程钩子
为您推荐:
其他类似问题
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。windows(3)
C语言(3)
键盘钩子的功能就是监视系统按键动作,这是一种很有用的技术,在一些工程项目中,有监视人员操作动作的需求,便于定位故障原因。也可以用于实现密码监视等黑客行为。
钩子分线程专用钩子和全局钩子,线程专用钩子只能勾到本线程的消息,而全局键盘钩子能勾到所有系统消息,功能非常强大,所以用得不好也很容易引起系统运行缓慢甚至崩溃等状况出现。
全局键盘钩子分一般钩子和低层钩子,一般钩子只能识别基础按键,低层钩子功能更强大能识别系统按键。
全局钩子一般通过调用dll来实现,实现的过程为:
1.安装进程安装全局钩子,将钩子dll实例加载进自己进程的地址空间,并在钩子链表中增加一级钩子,而且是放在最前面
2.所有进程在第一次接收到传递给本进程的消息之前,都会加载一份钩子dll到自己进程的地址空间,以后接收到的消息都由dll中的钩子处理函数预先处理,再决定要不要继续往下传递。
安装钩子的进程终止后,它注册的dll实例也会被销毁,其他进程加载的dll也会跟着销毁。但是,安装进程如果主动将dll释放掉,且进程不终止,那么其他进程的dll不会释放,其他进程的dll只有在安装进程终止或者自身进程终止时,才释放dll。
下面是dll程序和安装程序示例代码
//KBhook.cpp
#include&stdio.h&
#include&stdlib.h&
#include&windows.h&
#include&process.h&
#pragma comment(lib,&user32.lib&)
HHOOK hhkHook=NULL;
//定义钩子句柄
HINSTANCE hInstance=NULL;
//程序实例
BOOL EnableKeyboardCapture();
BOOL DisableKeyboardCapture();
//下面的DLLMain是DLL出入口点,没次调用和卸载DLL会执行
bool APIENTRY DllMain( HANDLE hModule,DWORD ul_reason_for_call,LPVOID lpReserved){
switch (ul_reason_for_call){
case DLL_PROCESS_ATTACH:
case DLL_THREAD_ATTACH:
//MessageBox(0,&KBhook.dll被加载!&,&DllMain&,MB_OK);
case DLL_THREAD_DETACH:
case DLL_PROCESS_DETACH:
DisableKeyboardCapture();
//MessageBox(0,&卸载KBhook.dll!&,&DllMain&,MB_OK);
hInstance=(HINSTANCE)hM
//得到DLL实例
//这是键盘消息处理函数
LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam){
char ch=0;
if( ((DWORD)lParam&0x) && (HC_ACTION==nCode) ) //有键按下
if((wParam==VK_SPACE)||(wParam==VK_RETURN)||(wParam&=0x2f)&&(wParam&=0x100) ){
fl=fopen(&log.txt&,&a+&);
if (wParam==VK_RETURN){
BYTE ks[256];
GetKeyboardState(ks);
UINT scan=0;
ToAscii(wParam,scan,ks,&w,0);
ch =char(w);
fwrite(&ch, sizeof(char), 1, fl);//把按键字符 记录到文件
fclose(fl);
return CallNextHookEx(hhkHook,nCode,wParam,lParam);//将消息继续传递下去,
//安装钩子
BOOL EnableKeyboardCapture(){
if(!(hhkHook=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)HookProc,hInstance,0)))
return FALSE;
return TRUE;
//卸载钩子
BOOL DisableKeyboardCapture(){
return UnhookWindowsHookEx(hhkHook);
//KBhook.def
; KBhook.def : Declares the module parameters for the DLL.
DESCRIPTION 'KBhook Windows Dynamic Link Library'
; Explicit exports can Go here
EnableKeyboardCapture @1
DisableKeyboardCapture @2
//installkbhook.cpp
#include&stdio.h&
#include&windows.h&
int main(){
HINSTANCE hD
typedef bool (*Fun1)();
hDll = LoadLibrary(&KBhook.dll&);
if(NULL == hDll) {
fprintf(stderr, &load dll 'KBhook.dll' fail.&);
return -1;
Fun1 EnableKeyboardCapture = (Fun1)GetProcAddress(hDll, &EnableKeyboardCapture&);
if(NULL == EnableKeyboardCapture) {
fprintf(stderr, &call function 'EnableKeyboardCapture' fail.&);
FreeLibrary(hDll);
return -1;
EnableKeyboardCapture();
Sleep(120000);//进程停留,不然钩子会自动注销
FreeLibrary(hDll);
//build.bat
cl KBhook.cpp KBhook.def /MD /link /out:KBhook.dll /dll /Entry:DllMain /OPT:NOWIN98
cl installkbhook.cpp
del KBhook.exp KBhook.obj KBhook.lib installkbhook.obj
目前这个程序在win7下做过测试,对于32位进程的按键消息可以进行截获,但是64位的进程的按键消息截获不稳定,事实上好像并不能截获。下一篇博客我会介绍在win7系统下能稳定运行的低层键盘钩子。
访问:3547次
排名:千里之外}

我要回帖

更多关于 delphi 全局键盘钩子 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信