搜索
查看: 1185|回复: 5

有一些地方不懂的,想请教一下大家!

[复制链接]

9

主题

37

帖子

229

积分

二级会员

Rank: 3Rank: 3

积分
229
发表于 2017-10-12 18:15:05 | 显示全部楼层 |阅读模式
本帖最后由 renmaoer 于 2017-10-12 18:19 编辑
  1. //hook 键盘钩子库里有些代码看不懂
  2. var LowLevelKeybdProc  = function( nCode, wParam, lParam){  
  3.         if ( nCode == 0/*_HC_ACTION*/ ) {  
  4.             var ll = KBDLLHOOKSTRUCT();
  5.                 ll = ..raw.convert(topointer(lParam),ll )


  6.                 //这里的owner.proc--------------------------------------------------------------------------------------------------------------------------------------
  7.                 if( ( type(owner.proc) == type.function)  &&  (owner.proc(wParam,ll.vkCode,ll.scanCode
  8.                         ,ll.flags & 0x10/*_LLKHF_INJECTED*/, ll.flags,ll.time,ll.extraInfo) )  ){
  9.                                  return 1;
  10.                 }
  11. ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------

  12.         }
  13.         return CallNextHookEx(owner._hhk, nCode, wParam, lParam);   
  14. }

  15. namespace key  
  16.         class hook{
  17.         ctor(){
  18.                 var hinst = ::GetModuleHandle();  

  19.                 [color=Red]//这里的this._proc_c[/color]
  20.                 this._proc_c = ..raw.tostdcall( LowLevelKeybdProc,"int(int nCode, INT wParam, int lParam)",this)
  21.                 var hhk = SetWindowsHookEx(WH_KEYBOARD_LL,this._proc_c,hinst,0);   
  22.                 this._hhk = hhk;  
  23.                    ..table.gc(this,"close");
  24.         }        
  25.         close  = function(){
  26.                 if(hhk){  
  27.                         UnhookWindowsHookEx(hhk);
  28.                         hhk  = null;
  29.                 }
  30.         }
  31. }

  32. /**intellisense()
  33. //这里!hkkey.proc和@.proc代表的什么意思----------------------------------------------------------------------------------------------------------
  34. !hkkey.proc = @.proc = function(msg,vkcode,scancode,injected,flags,timeStamp,extraInfo){</font>
  35. ----------------------------------------------------------------------------------------------------------------------------------------------------------------
  36.         if( injected ) return;//忽略模拟按键
  37.     var kn = key.getName( vkcode );
  38.     select(msg) {
  39.             case 0x100/*_WM_KEYDOWN*/ ,0x104/*_WM_SYSKEYDOWN*/{
  40.                 io.print("按下",kn)
  41.             }
  42.             case 0x101/*_WM_KEYUP*/,0x105/*_WM_SYSKEYUP*/{
  43.                 io.print("弹起",kn)
  44.             }  
  45.     }   
  46.         __/*取消按键调用 return true;*/
  47. }
  48. !hkkey.close() = 释放按键录制钩子
  49. ?key.hook = !hkkey.
  50. end intellisense**/
  51.   
复制代码

这些个代码有点不明白,请论坛的高手们给我讲解讲解,谢谢!
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-10-12 18:16:10 | 显示全部楼层
aardio帮助文档里有智能提示的语法说明,很简单的。
http://bbs.aardio.com/doc/reference/libraries/intellisense.html
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-10-12 18:22:19 | 显示全部楼层
在发代码的时候,论坛编辑器切换到纯文本。
不要把高亮的放到code块里(可以放引用里,点那个双引号按钮)

在创建API用到的静态回调函数时,aardio代码是这样
..raw.tostdcall( LowLevelKeybdProc,"int(int nCode, INT wParam, int lParam)",this)
其中this对象,也就是key.hook对象,被指定为LowLevelKeybdProc的owner参数.

那么,
你在
LowLevelKeybdProc里的 owner.proc,也就是你的key.hook对象的proc成员。
也就是下面这个你定义的回调函数:
import key.hook;
var hook = key.hook();

//录制回调函数
hook.proc = function(msg,vkcode,scancode,injected,flags,timeStamp,extraInfo){
   
}


回复

使用道具 举报

9

主题

37

帖子

229

积分

二级会员

Rank: 3Rank: 3

积分
229
 楼主| 发表于 2017-10-12 18:22:36 | 显示全部楼层
Jacen.He 发表于 2017-10-12 18:16
aardio帮助文档里有智能提示的语法说明,很简单的。

智能提醒的能看懂,就是里面的
  1. !hkkey.proc = @.proc = function(msg,vkcode,scancode,injected,flags,timeStamp,extraInfo)
复制代码

这一句hkkey是什么有点不太懂,好像也没有hkkey的定义,@.proc也是!
还有这里的owner.proc
  1. if( ( type(owner.proc) == type.function)  &&  (owner.proc(wParam,ll.vkCode,ll.scanCode
  2.                         ,ll.flags & 0x10/*_LLKHF_INJECTED*/, ll.flags,ll.time,ll.extraInfo) )  ){
  3.                                  return 1;
  4.                 }
复制代码
回复

使用道具 举报

185

主题

2541

帖子

1万

积分

管理员

Rank: 9Rank: 9Rank: 9

积分
13973
发表于 2017-10-12 18:26:03 | 显示全部楼层
renmaoer 发表于 2017-10-12 18:22
智能提醒的能看懂,就是里面的

这一句hkkey是什么有点不太懂,好像也没有hkkey的定义,@.proc也是!

谁说没有,后面明明有
?key.hook = !hkkey.

不过这是老版的写法,现在一般推荐下面这样定义:
key.hook() = !hkkey.

用aardio代码表示就是
import key.hook;
var hook = key.hook();
proc是你自己定义,当然没有。

这些东西在上面的帮助文档,我给你的链接里都有解释。

回复

使用道具 举报

9

主题

37

帖子

229

积分

二级会员

Rank: 3Rank: 3

积分
229
 楼主| 发表于 2017-10-12 18:31:47 | 显示全部楼层
Jacen.He 发表于 2017-10-12 18:26
谁说没有,后面明明有

不过这是老版的写法,现在一般推荐下面这样定义:

看见了,谢谢!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-10-23 09:31 , Processed in 0.062500 second(s), 22 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表