如何截获Win和App这两个键?(35分)

  • 主题发起人 主题发起人 Caicheng
  • 开始时间 开始时间
C

Caicheng

Unregistered / Unconfirmed
GUEST, unregistred user!
我要在程序中截获这两个键并重新定义,使用系统hook可以截获这两个键,
但是此两键原来的功能依然存在,使用sysparamter....之类的函数达不
到要求。请问要如何处理?
 
不答,想收email通知!sooooooooooooooooooooooorry!
 
VK_WIN, VK_APP?
 
to supermmx:
一个是MS的“国旗”,一个是右键单击会出现pop菜单,
这两个键是所谓的win98键。
难道这两个键真的那么难处理吗?
hook屏蔽不了这两个键。
 
找到了, VK_LWIN, VK_RWIN , VK_APPS
键盘钩子,应该可以吧。
 
to supermmx:

Hook 就是钩子的意思.我已经说过不行的了.
 
应该是KeyboardProc hook 吧?
The KeyboardProc hook procedure is an application-defined or library-defined callback function used with the SetWindowsHookEx function. The system calls this function whenever an application calls theGetMessage orPeekMessage function and there is a keyboard message (WM_KEYUP orWM_KEYDOWN) to be processed
而且系统HOOK只能用于系统线程。
 
此外,你用的钩子是EXE或DLL.如果Hook过程在应用程序中实现,若应用程序不是当前窗口时,该Hook就不起作用;如果Hook在DLL中实现,程序在运行中动态调用它,它能实时对系统进行监控。需要采用的是在DLL中实现Hook的方式。
 
eguy 我也写了一些关于HOOK方面得东西,不过有个问题想请教一下

原来我写的是DLL的,如何改在EXE内部截获HOOK信息,我尝试修改未果,所以来问
一下

估计不能用HOOK重新定义,除非程序获得了很高的控制权,就象SCREENSAVER一样
不过这就简单了,可以参照以前的文章
 
to eguy:
Hook是这样的:
hNextHookProc := SetWindowsHookEx(WH_KEYBOARD,
KeyboardHookHandler,HInstance,0);
我原在Delphi下做了个DLL,结果总有一些莫名其妙的错误,后来
改用C做,错误消失。
感谢各位的回答,不过请先把我的问题看清楚:
我的Hook是用DLL写的系统钩子,它可以抓到我所说的两个键,但在它抓到
之前系统就已经处理过了,所以曾有人在其它文章中说用systemparatersinfo这样的
函数,其实这样的函数也只能解决vk_win,不能解决vk_app。

目前我的解决办法是写Vxd,重定义扫描码,这样win9x就不认识了。不过
这种方法比较复杂,所以我还是想知道用hook的解决方法。
to mikecool先生:
你要在EXE中用hook,最好不使用wh_keyboard,这个hook
只是你的EXE在前台的时候有效,要达到你的要求,可以考虑使用WH_JOURNALRECORD这个hook不管你的程序在前台后台都可以抓到keyboard。不过我没有试过。
 
非常感谢Caicheng的提醒,我一定会注意的

不过好像用VXD在NT下好像不能用了么?

呵呵,我的Hook是在Delphi下写的Dll,有很多文章上的不能用
只有深度历险上的还是可以的,估计是别人Copy & Paste自己加上些东西
不能用了,ETC 大虾用什么工具写的VXD,呵呵,我菜的不行

好像Systemparatersinfo是用来设定Windows的,倒是不知道有这种用途
 
在NT or w2k下面,驱动程序为.sys ,所谓的WDM,Windows驱动模型.
用DDK,不太好写。
深度历险上的那个钱达智的例子在现在看来有一些错误,如果做系统钩子,
你会被他害死。

各位还有没有高见?SuperMMX or eguy ?
 
我是不会,还没学到呢, 呵呵。
 
Caicheng钱达智的例子有什么错误,能指出来吗?
以前我也用delphi写hook,但问题特别多,后来
改成vc就好了,现在也不知道问题在那?
 
to guoyan:
please tell me you mail box.
 
我的e-mail是 info@mpsoft.net
 
后退
顶部