【请教】VB全局钩子 游戏窗口HOOK

gaerelva 2012-07-20 12:38:52
我用VB做了个类是全局的钩子,但是在钩子DLL里怎么也呼不出FORM2.show
(VB EXE + VB标准DLL 做的钩子 用MsgBox 可以测试出HOOK好用 但是FORM2.show就没反映,FORM2在DLL工程内)

我不知道我的做法是否可行:

1.打开form1
2.登录游戏
3.按HOME呼出FORM2


这种思路纯用VB做是否可以做到?

请教大牛指点,谢谢!
...全文
280 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
myjisgreat 2012-07-20
  • 打赏
  • 举报
回复
额,看错了,你是键盘钩子是么?
好像不会加载到目标进程的
理论上你是可行的,因为我做过个VB老板键原理与你应该相同的
myjisgreat 2012-07-20
  • 打赏
  • 举报
回复
你的DLL是VB写的?
还有请注意!
参考钩子原理,其他进程一旦被钩子钩住,你的DLL便加载进入这个进程的内存空间,就是说你的DLL中show一个窗口与你自己原来的程序进程已经无关了,窗口会加载到被钩进程中
zydscaline 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用楼主 的回复:]
我用VB做了个类是全局的钩子,但是在钩子DLL里怎么也呼不出FORM2.show
(VB EXE + VB标准DLL 做的钩子 用MsgBox 可以测试出HOOK好用 但是FORM2.show就没反映,FORM2在DLL工程内)

我不知道我的做法是否可行:

1.打开form1
2.登录游戏
3.按HOME呼出FORM2


这种思路纯用VB做是否可以做到?
请教大牛指……
[/Quote]VB肯定能做到
gaerelva 2012-07-20
  • 打赏
  • 举报
回复
to Veron_04 ,谢谢你的回复

我是不知道VB能不能行得通,有好的例子推荐给我看看也好

求理论求真想。。。
贝隆 2012-07-20
  • 打赏
  • 举报
回复
无代码,无真相
gaerelva 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

额,看错了,你是键盘钩子是么?
好像不会加载到目标进程的
理论上你是可行的,因为我做过个VB老板键原理与你应该相同的
[/Quote]

谢谢回复
我用VC 做是可以 VC做个EXE FORM1 VC 钩子DLL FORM2
我开游戏 运行EXE安装钩子 在游戏窗口按HOME FORM2 就出来了

我用同样的方法模拟用VB做就不好用。。。可能还是写法的问题
DLL钩子主要的代码(DLL为标准的DLL 我用插件生成的 测试后是工作的):
生成为add.dll

Function DLLMain(ByVal A As Long, ByVal B As Long, ByVal c As Long) As Long
Instance = A
Init
DLLMain = 1
End Function
Sub Main()
End Sub

Function SetHok()
Dim hwnd As Long
hwnd = FindWindow("TFrmMain", "传奇3")
If hwnd = 0 Then
MsgBox "先运行游戏"
Exit Function
End If

Dim tid As Long
Dim pid As Long
Dim SH As Long
tid = GetWindowThreadProcessId(hwnd, vbNull)

'方法一 不行
SH = SetWindowsHookEx(WH_KEYBOARD, AddressOf LowLevelKeyboardProc, Instance, 0)

'方法二 不行
SH = SetWindowsHookEx(WH_KEYBOARD, AddressOf LowLevelKeyboardProc, GetModuleHandle("add.dll"), tid)
End Function

Function LowLevelKeyboardProc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

‘ MsgBox "ok"
If ncode = HC_ACTION Then
CopyMemory p, ByVal lParam, Len(p)

If p.VKCode = VK_HOME Then
Form1.Show

End If
End If

CallNextHookEx WH_KEYBOARD, ncode, wParam, lParam
End Function

Function Init() As Boolean
hModule = LoadLibrary("ws2_32.dll")
PfConnect = GetProcAddress(hModule, "connect")
If PfConnect = 0 Then
Init = False
Else

End If
End Function

gaerelva 2012-07-20
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 的回复:]

额,看错了,你是键盘钩子是么?
好像不会加载到目标进程的
理论上你是可行的,因为我做过个VB老板键原理与你应该相同的
[/Quote]

谢谢回复
我用VC 做是可以 VC做个EXE FORM1 VC 钩子DLL FORM2
我开游戏 运行EXE安装钩子 在游戏窗口按HOME FORM2 就出来了

我用同样的方法模拟用VB做就不好用。。。可能还是写法的问题
DLL钩子主要的代码(DLL为标准的DLL 我用插件生成的 测试后是工作的):
生成为add.dll

Function DLLMain(ByVal A As Long, ByVal B As Long, ByVal c As Long) As Long
Instance = A
Init
DLLMain = 1
End Function
Sub Main()
End Sub

Function SetHok()
Dim hwnd As Long
hwnd = FindWindow("TFrmMain", "传奇3")
If hwnd = 0 Then
MsgBox "先运行游戏"
Exit Function
End If

Dim tid As Long
Dim pid As Long
Dim SH As Long
tid = GetWindowThreadProcessId(hwnd, vbNull)

'方法一 不行
SH = SetWindowsHookEx(WH_KEYBOARD, AddressOf LowLevelKeyboardProc, Instance, 0)

'方法二 不行
SH = SetWindowsHookEx(WH_KEYBOARD, AddressOf LowLevelKeyboardProc, GetModuleHandle("add.dll"), tid)
End Function

Function LowLevelKeyboardProc(ByVal ncode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

‘ MsgBox "ok"
If ncode = HC_ACTION Then
CopyMemory p, ByVal lParam, Len(p)

If p.VKCode = VK_HOME Then
Form1.Show

End If
End If

CallNextHookEx WH_KEYBOARD, ncode, wParam, lParam
End Function

Function Init() As Boolean
hModule = LoadLibrary("ws2_32.dll")
PfConnect = GetProcAddress(hModule, "connect")
If PfConnect = 0 Then
Init = False
Else

End If
End Function

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧