• 全部
  • VC综合技术
  • 互联网技术
  • MFC AppLauncher
  • .NET 技术
  • 界面
  • 进程
  • 算法
  • 硬件/系统
  • 数据库
  • VC++技术资源

急!高分在线求,InitializeLpkHooks的定义以及调用示例,顶也加分

wkoji 2007-06-05 11:11:33
我想知道这个api到底是做什么用的,如何调用?
或者这里有没有人做过不写驱动,在应用层下用hook来截获非标准键盘的多媒体键?
已经确认hook_keyboard, hook_keyboard_ll都没有反应。

要多少分给多少,我还有几千
...全文
226 点赞 收藏 13
写回复
13 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
q309499712 2010-02-27
一个未公开函数InitializeLpkHooks,这个函数在网上能找到的资料更少,只有一个声明而已。但是它名称中最后那个“Hooks”误导了我,我以为又是一个可以用来注入DLL的不错函数,用OD反出来一看,原来只是个局部HOOK而已。虽然没太大用,还是一并写上吧,也许谁用得着呢。InitializeLpkHooks顾名思义就是HOOK LPK的,Windows有个lpk.dll,就是支持多语言包的那么个功能。测试发现好多程序在TextOut之前似乎是要调用lpk.dll里面的相关函数的,可能是支持多语言的程序就需要用这个来判断到底要显示那种语言吧。而InitializeLpkHooks,就是用来HOOK lpk.dll里面的4个函数的,这4个函数是LpkTabbedTextOut,LpkPSMTextOut,LpkDrawTextEx,LpkEditControl。我们先打开VB,在窗体中加入以下代码吧:
Private Sub Form_Load()
DLLhwnd = LoadLibrary("lpk.dll") '加载DLL
DLLFunDre = GetProcAddress(DLLhwnd, "LpkDrawTextEx") '获取回调函数地址

LpkHooksInfo.lpHookProc_LpkTabbedTextOut = 0
LpkHooksInfo.lpHookProc_LpkPSMTextOut = 0
LpkHooksInfo.lpHookProc_LpkDrawTextEx = GetLocalProcAdress(AddressOf HookProc1) '设置要HOOK的LPK函数
LpkHooksInfo.lpHookProc_LpkEditControl = 0
InitializeLpkHooks LpkHooksInfo
End Sub

Private Sub Form_Unload(Cancel As Integer)
LpkHooksInfo.lpHookProc_LpkTabbedTextOut = 0
LpkHooksInfo.lpHookProc_LpkPSMTextOut = 0
LpkHooksInfo.lpHookProc_LpkDrawTextEx = DLLFunDre
LpkHooksInfo.lpHookProc_LpkEditControl = 0
InitializeLpkHooks LpkHooksInfo
FreeLibrary DLLhwnd
End Sub


然后新建一个模块,在模块中加入以下代码:
Public Declare Funti*n LoadLibrary Lib "kernel32" Alias "LoadLibraryA" (ByVal lpLibFileName As String) As Long
Public Declare Fun*ti*n GetProcAddress Lib "kernel32" (ByVal hModule As Long, ByVal lpProcName As String) As Long
Public Declare Fun*ti*n FreeLibrary Lib "kernel32" (ByVal hLibModule As Long) As Long
' ----------------未公开函数--------------------------------------
Public Declare Sub InitializeLpkHooks Lib "user32" (lpProcType As Any)

Type LpkHooksSetting
lpHookProc_LpkTabbedTextOut As Long
lpHookProc_LpkPSMTextOut As Long
lpHookProc_LpkDrawTextEx As Long
lpHookProc_LpkEditControl As Long
End Type

' -------------------------------
Public DLLhwnd As Long, DLLFunDre As Long
Public LpkHooksInfo As LpkHooksSetting

Public Fun*ti*n GetLocalProcAdress(ByVal lpProc As Long) As Long
GetLocalProcAdress = lpProc
End Fun*ti*n

Fun*ti*n HookProc1(ByVal a1 As Long, ByVal a2 As Long, ByVal a3 As Long, ByVal a4 As Long, ByVal a5 As Long, ByVal a6 As Long, ByVal a7 As Long, ByVal a8 As Long, ByVal a9 As Long, ByVal a10 As Long) As Long
HookProc1 = 0
End Fun*ti*n

运行一下看看,是不是窗体中标题栏和按钮上的文字都没有了,因为我们把函数LpkDrawTextEx替换成自己的函数HookProc1了。这个函数有10个参数,其中几个好像是字符串指针,似乎可以用来截获窗体要显示的文字,然后改成另一种语言的文字,我猜想,也许就是这个用途吧。哈哈,纯属猜测。以上就是函数InitializeLpkHooks的用法了。

以上就是全部。
本文所有示例代码的下载地址是: http://www.pen88.com/download/imehook.rar
回复
oldn123 2007-07-05
这么神奇
未公开的函数..那我们怎么调用这个函数呢?
回复
sky_123 2007-07-05
帮顶
回复
wkoji 2007-06-06
ding
回复
mudunke775 2007-06-05
没找到InitializeLpkHooks这个函数,是自定义的吧。既然是截获键盘事件,在程序中截获消息并判断处理不就好了,我键盘上没有那几个键,所以无法测试。
回复
rainstormed 2007-06-05
up
回复
rainstormed 2007-06-05
关注...
回复
dayong576 2007-06-05
研究

关注
回复
guduhen 2007-06-05
研究+顶
不会哦
回复
smallcrocodile 2007-06-05
研究
回复
wkoji 2007-06-05
怎么这么多高手都没人知道???
InitializeLpkHooks是user32.dll里的一个未公开函数,查msdn都查不到的,查google就只查到四条记录,而且最多只得到一个函数定义。
我不知道这个函数到底在hook什么,也不知道它的参数是个函数指针,这个函数指针的定义和参数是什么???
回复
菜牛 2007-06-05
InitializeLpkHooks应该是自己定义个函数。
回复
wkoji 2007-06-05
已经确认hook_keyboard, hook_keyboard_ll都抓不到这个键盘击键消息。
我写驱动去截获硬件的键盘中断可以抓到,
但是我现在希望在应用层用hook实现,找到有一个例子,但没有源代码。
分析它的dll,确定是调用了hook,此外最有关联的调用就是InitializeLpkHooks和GetMessageExtraInfo。所以希望能多了解一点这两个函数的作用和调用方式
回复
发帖
VC/MFC
创建于2007-09-28

1.5w+

社区成员

VC/MFC相关问题讨论
申请成为版主
帖子事件
创建了帖子
2007-06-05 11:11
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……