精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

淺談VB.NET中的跨進程消息鉤子

開發 后端
本文將簡單談談VB.NET中的跨進程消息鉤子,在VB6里面可以用API函數來進行子類化,以處理自身的窗體過程;如果跨進程,這就麻煩了,就需要用到文中的方法。

我們都知道在VB6里面可以用API函數來進行子類化,以處理自身的窗體過程;如果跨進程,這就麻煩了,由于我們的函數在我們的進程中(廢話),而目標進程的窗口的消息處理函數在目標進程(還是廢話),所以只能想辦法把我們的代碼放到對方進程中去執行——并且要告知我們的進程得到了什么消息。恐怕寫匯編就有點嚇人了,于是大家都寫DLL,其原理就是把回調函數放到一個DLL里面注入到對方進程,DLL去修改目標窗口的默認處理函數——把消息發送給我們。

當然也有“另類”一點的:http://www.it-berater.org/ThueDownloads/index.shtml上面有一個DLL包,其中含有一個dssubcls.dll,用它,可以輕松的完成我們的工作:就像調用一個API一樣簡單,而且在我們的程序中使用回調函數!呵呵,省去了自己寫DLL的麻煩之后,這些好處足以吸引各位觀眾了吧?

好了,VB6的代碼大家可以在下載的壓縮包中找到,作者提供了一個以記事本為基礎的實例(在\dssubcls目錄下),非常詳細無需詳細敘述了。關鍵是在VB.NET里面如何使用它——如何聲明API,如何進行回調,看用來子類化的API的VB6聲明先:

Declare Function SubClass& Lib "dssubcls" (ByVal HwndSubclass&, _
 Optional ByVal Address& = 0, _
 Optional ByVal OldStyle& = 0, _
 Optional ByVal NewStyle& = 0, _
 Optional ByVal Ext& = 0, _
 Optional ByVal SubClass& = 0)
轉化成VB.NET的聲明類似下面的樣子(習慣使然,我把&展開成了As Integer):

Declare Function SubClass Lib "dssubcls" (ByVal HwndSubclass As Integer, Optional ByVal Address As Integer = 0, Optional ByVal OldStyle As Integer = 0, Optional ByVal NewStyle As Integer = 0, Optional ByVal Ext As Integer = 0, Optional ByVal SubClass As Integer = 0) As Integer

這不是很好嘛?問題來了,這樣的聲明在VB6里面可以使用Addressof function來傳入第二個參數(參見你下載的源碼),但是在VB.NET里面直接Addressof就不成了——我們需要委托一個回調:

Private Delegate Function HookCallBack(ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer

這個委托,對應的是以下函數:

Private Function mCallback(ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
‘在這里處理得到的消息

End Function

使用時,需要注意先實例化這個委托:

Private fix_COCD = New HookCallBack(AddressOf mCallback)

此時,fix_COCD就是我們的mCallback函數引用了,用更直觀的觀點來看,fix_COCD就是一個指向mCallback的指針,相當于VB6里面的Addressof function得到的結果,看似問題解決了,于是我們寫了以下代碼來搞對方的進程窗體消息:

SubClass(Handle, fix_COCD, 0, 0, 0, 1) '修改處理函數

問題真是接踵而至!IDE提示變量類型不符!!事實確實如此,我們把一個HookCallBack類型當做Integer來傳遞,無法通過檢查,那么強行轉換吧?當然,你可以去試試。這時,我所做的是,修改這個API聲明:

Private Declare Function SubClass Lib "dssubcls" (ByVal HwndSubclass As Integer, Optional ByVal Address As HookCallBack = Nothing, Optional ByVal OldStyle As Integer = 0, Optional ByVal NewStyle As Integer = 0, Optional ByVal Ext As Integer = 0, Optional ByVal SubClass As Integer = 0) As Integet

使之符合我們的調用?有點倒行逆施?并非如此,當你習慣了修改API聲明之后,會發現有些事變得如此簡單,有些事需要你重新認識——對于WIN32 API也是如此。

 

至此,大功告成:

較為完整的代碼如下:

Code
Private Declare Function SubClass Lib "dssubcls" (ByVal HwndSubclass As Integer, Optional ByVal Address As HookCallBack = Nothing, Optional ByVal OldStyle As Integer = 0, Optional ByVal NewStyle As Integer = 0, Optional ByVal Ext As Integer = 0, Optional ByVal SubClass As Integer = 0) As Integer
Private Declare Function UseSendMessage Lib "dssubcls" (ByVal use As Integer) As Integer
'實例化的委托
Private fix_COCD = New HookCallBack(AddressOf mCallback)
'委托
Private Delegate Function HookCallBack(ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
Public Sub Hook(ByVal Handle As Integer)
proc = SubClass(Handle, fix_COCD, 0, 0, 0, 1) '修改處理函數
UseSendMessage(1)
End Sub

Private Function mCallback(ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer

End Function

 

用這個代碼的時候,可能會碰見一些“意外情況“,例如wm_datacopy,此時,我們需要進一步去獲取LPARTM所指向的結構并對其進行解析(我們要讀的是對方窗口所在進程的內存,具體地址由lParam確定——實際上lParam一直是一個指針——IntPrt,但它與Integer完全就是一回事(如果你使用VB2005可能需要使用Intprt.toint32或intprt=new intprt(integer)這些):

Code
Public Class GetMsg
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByVal lpBuffer() As Byte, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
Public Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Integer, ByVal lpBaseAddress As Integer, ByRef int As Integer, ByVal nSize As Integer, ByRef lpNumberOfBytesWritten As Integer) As Integer
Public Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Integer, ByVal bInheritHandle As Integer, ByVal dwProcessId As Integer) As Integer
Public Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Integer) As Integer
Private hProc As IntPtr
Sub New(ByVal PID As Integer)
hProc = OpenProcess(&HFFFF, False, PID)
End Sub

Function readmsg(ByVal address As Integer) As Byte()
Dim buf(19) As Byte
ReadProcessMemory(hProc, address, buf, 20, 0)
Return buf
End Function

Protected Overrides Sub Finalize()
CloseHandle(hProc)
MyBase.Finalize()
End Sub
End Class
這個類提供了Readmsg方法來讀取一些內容——但這并不是完整的,我們知道,LPARAM指向的結構是這樣的:

_
Public Structure COPYDATASTRUCT
Public dwData As Integer
Public cbData As Integer
Public lpData As IntPtr
End Structure

其中dwData我們不是很關心,當然其中也可能存在一些有用信息(這里不想多說,網上有些文章純屬誤導)

而cbData是一個長度:lpData的長度

lpData這里被聲明為指針,看起來更直觀了——它就是地址

有了地址和長度,如何讀取代碼就自己寫吧。

提示一下:參考我重載的ReadProcessMemory可能對你有不少幫助。

當然,上面提到的只是“特殊情況”中的一個典型,還有很多時候,進程是用自定義消息(>&H40A)來傳遞數據的,例如我所開發的這個工程,打印mCallBack的參數后,得到的是如下結果(十六進制,只提取了有用的信息):

4731442257D0

其中lParam就是一個指針,我讀了其中的一部分:

Function readmsg(ByVal address As Integer) As Byte()
Dim buf(19) As Byte
ReadProcessMemory(hProc, address, buf, 20, 0)
Return buf
End Function

現在就明白為什么上面的代碼是那樣了:)

然后進行了一個處理,得到了我想要的信息:

'消息解碼后得到的移動棋子信息:玩家,起X,起Y,止X,止Y,棋子編號,走棋總步數
Event Move(ByVal player As Byte, ByVal sx As Byte, ByVal sy As Byte, ByVal dx As Byte, ByVal dy As Byte, ByVal name As Byte, ByVal [step] As Byte)
Private Function mCallback(ByVal wMsg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
If wParam = &H14 Then
Dim s As Byte() = msg.readmsg(lParam)
RaiseEvent Move(s(1), s(10), s(11), s(12), s(13), s(14), s(16))
End If
End Function

當然,在我的工程里面重載的ReadProcessMemory并沒有被使用。

補充一下咯:

在VB.NET中,處理自己的窗體的消息只需要重載窗體消息處理過程就可以了,無需子類化:)

有補充一下:

對于wm_datacopy來說,還有一些數據獲取的問題沒有說清楚,實際上都可以用一些方法來解決。

【編輯推薦】

  1. 淺談VB.NET中的跨進程消息鉤子
  2. VB.NET中的動態代碼生成技巧
  3. C#和VB.NET類型相關知識匯總向
  4. VB.NET中有用的通用對象列表
  5. VB.NET和C#逐層橫向對比
責任編輯:彭凡 來源: cnblogs
相關推薦

2009-10-14 12:51:41

VB.NET Data

2009-10-20 09:39:04

VB.NET Butt

2009-10-28 10:31:23

VB.NET Impl

2009-10-13 11:22:46

VB.NET調用Web

2009-10-16 10:14:26

VB.NET使用Fil

2009-10-12 13:32:58

VB.NET線程構造器

2010-01-07 16:51:56

VB.NET窗體鉤子

2009-06-29 10:50:18

VB.NET面向對象能力

2010-01-22 15:56:03

VB.NET獲取當前U

2009-10-19 11:28:42

VB.NET語言.NET開發語言

2010-01-21 17:23:05

VB.NET Radi

2010-01-21 15:10:37

VB.NET靜態托盤程

2009-10-26 17:07:17

VB.NET UNDO

2009-12-24 14:30:56

VB.NET

2009-10-20 14:03:48

VB.NET數組聲明VB.NET數組初始化

2010-01-22 13:08:50

VB.NET創建數組

2009-11-02 16:55:50

VB.NET Smar

2009-10-29 14:02:24

VB和VB.NET比較

2011-06-17 11:05:22

VB.NET

2009-06-24 15:45:32

VB.NET
點贊
收藏

51CTO技術棧公眾號

午夜片欧美伦| 日本成人伦理电影| 成人免费高清视频| 97成人精品区在线播放| 国产jk精品白丝av在线观看| 欧美另类激情| 亚洲图片自拍偷拍| 日韩精品久久一区二区三区| aaa国产视频| 亚洲一区免费| 久久久国产精品亚洲一区| jjzz黄色片| 亚洲日本网址| 亚洲香蕉伊在人在线观| 日本不卡一区二区三区视频| 国产情侣一区二区| 久久一日本道色综合久久| 久久电影一区二区| 波多野结衣av在线观看| 亚洲不卡视频| 欧美无砖专区一中文字| 青青草成人免费在线视频| 1024视频在线| 99免费精品在线| 国产一区二中文字幕在线看 | 911美女片黄在线观看游戏| 红桃视频国产精品| 久久精品99无色码中文字幕| 欧美熟妇一区二区| 高清精品视频| 欧美一级午夜免费电影| 别急慢慢来1978如如2| av成人 com a| 一区二区三区产品免费精品久久75| 欧美一区二视频在线免费观看| 性网爆门事件集合av| 美女精品一区二区| 国产精品va在线播放| 日本三级理论片| 欧美日韩三级电影在线| 久久精品成人一区二区三区| 在线观看亚洲大片短视频| 香蕉久久夜色精品国产使用方法| 欧美哺乳videos| 男女视频在线观看网站| 日本一区二区三区中文字幕| 日本道色综合久久| 中文字幕无码精品亚洲35| 日本一本在线免费福利| 亚洲乱码日产精品bd| 久久免费视频2| 午夜免费视频在线国产| 国产精品无圣光一区二区| 秋霞毛片久久久久久久久| 毛片在线播放网址| 久久久久久麻豆| 免费成人av网站| 可以免费看污视频的网站在线| 91视频在线观看免费| 久久精品aaaaaa毛片| 性xxxx视频| 91美女在线视频| 欧美极品视频一区二区三区| 黄色毛片在线看| 欧美高清一级片在线观看| 日韩精品另类天天更新| 1pondo在线播放免费| 成人欧美一区二区三区小说| 一区二区三区在线观看www| 婷婷成人激情| 亚洲另类色综合网站| 成人午夜视频免费观看| 成人影音在线| 色综合天天综合网天天看片| 超碰av在线免费观看| 欧美一级做a| 日韩欧美精品在线| 私密视频在线观看| 国产精品免费大片| 神马久久久久久| 久久久久久久久久久久久久免费看| 国产专区一区| 欧美在线精品免播放器视频| 中文字幕在线观看第二页| 精品在线你懂的| 成人久久18免费网站漫画| 超碰在线观看av| 99久久精品国产网站| 日韩精品久久久免费观看| 国产美女福利在线| 精品免费在线视频| 丝袜制服一区二区三区| 日韩在线观看一区二区三区| 日韩av网址在线| 人妻大战黑人白浆狂泄| 午夜精品毛片| 51视频国产精品一区二区| 亚洲图片中文字幕| 成人av在线影院| 伊人久久av导航| 国产激情视频在线看| 欧美日韩1234| 国产老熟女伦老熟妇露脸| 日韩在线观看| 国产91精品高潮白浆喷水| 在线播放成人av| 成人免费观看视频| 亚洲一区在线直播| 精精国产xxx在线视频app| 欧美欧美欧美欧美首页| 香港三级日本三级| 在线成人直播| 国产精品久久久久77777| 亚洲免费成人网| 国产精品久线在线观看| 一区二区传媒有限公司| 国产精品久久久久久久久久辛辛| 亚洲男人7777| 久久精品国产亚洲av高清色欲 | 毛片免费在线播放| 一个色在线综合| 激情黄色小视频| 一区二区三区日本久久久| 欧美大片免费观看| 一区二区三区在线免费观看视频| 26uuu亚洲综合色| 久久这里只有精品8| 亚洲精品777| 国产一区二区三区精品久久久| 久久精品性爱视频| 国产精品18久久久久久vr| 亚洲精品成人自拍| 正在播放日韩精品| 亚洲第一偷拍网| 欧美黄色一级网站| 精品一二三四区| 视频一区视频二区视频三区高| 深夜av在线| 精品国产91九色蝌蚪| 欧美视频www| 国精品**一区二区三区在线蜜桃| 视频一区国产精品| 久久久精品一区二区毛片免费看| 亚洲天堂网站在线观看视频| 亚洲GV成人无码久久精品| 99久久精品国产一区| 久久视频这里有精品| 国产精品jk白丝蜜臀av小说| 欧美激情18p| 欧美 日韩 国产 成人 在线 91 | 欧州一区二区三区| 久久在线免费观看视频| 99久久免费国产精精品| 亚洲日韩欧美一区二区在线| 在线观看日本www| 中文字幕一区二区精品区| 成人有码在线播放| 97影院秋霞午夜在线观看| 日韩一区二区三区免费看| 欧美激情国产精品免费| 粉嫩欧美一区二区三区高清影视| 欧洲精品在线播放| 最新精品在线| 91成人在线视频| 黄色片在线免费观看| 欧美日韩亚洲另类| 最新一区二区三区| 成人精品免费网站| 116极品美女午夜一级| 精品久久中文| 91久久久久久久久| 美女精品导航| 国产视频亚洲视频| 在线观看国产黄| 亚洲精品国产a| 玖玖爱在线精品视频| 狂野欧美一区| 婷婷视频在线播放| 99a精品视频在线观看| 91国产精品电影| 亚洲成人三级| 亚洲黄在线观看| 国产无遮挡又黄又爽又色视频| 最近日韩中文字幕| 在线天堂www在线国语对白| 久久精品国产清高在天天线| 亚洲人成77777| 成人另类视频| 国产精自产拍久久久久久| 午夜成年人在线免费视频| 国产视频精品久久久| 91麻豆视频在线观看| 亚洲一区二区三区视频在线播放| 午夜理伦三级做爰电影| 激情综合色丁香一区二区| 很污的网站在线观看| jizzjizz欧美69巨大| www.成人三级视频| 日本精品在线中文字幕| 欧美黄色片免费观看| 97超碰人人在线| 欧美精品一区二区久久婷婷| 久久这里只有精品9| 亚洲图片欧美色图| 日日碰狠狠添天天爽| 91香蕉视频mp4| 天堂av手机在线| 久久久久久久欧美精品| 日韩成人三级视频| 欧美第十八页| 欧美二区三区在线| 一本一道久久a久久| 国产精品亚洲第一区| 人在线成免费视频| 久热在线中文字幕色999舞| 黄视频在线播放| 日韩av在线不卡| 精品人妻一区二区三区日产乱码| 欧美日韩中文字幕一区| 久久夜色精品亚洲| 亚洲黄色片在线观看| 免费看一级黄色| 久久男人中文字幕资源站| 麻豆短视频在线观看| 激情综合色综合久久综合| 黄色永久免费网站| 视频在线观看91| 欧美在线观看成人| 99xxxx成人网| 欧美一级视频免费看| 国产精品a级| 水蜜桃在线免费观看| 欧美成免费一区二区视频| 日韩欧美精品久久| 综合亚洲色图| 久久亚洲国产精品日日av夜夜| 国产女人18毛片水真多18精品| 99国内精品久久久久久久软件| 亚洲一区二区av| 国产一区红桃视频| 亚洲成a人片777777久久| 国产精品视频久久| 国产精品毛片久久久久久久久久99999999 | 国产精品第七页| 国产a精品视频| 三级黄色片播放| 国产伦精品一区二区三区免费| 亚洲精品永久视频| 精品一区二区三区在线播放| www.国产视频.com| 经典三级在线一区| 波多野结衣在线免费观看| 国产综合色在线| 在线观看中文av| 国产成人一级电影| 久久亚洲欧美日韩精品专区 | 人成在线免费视频| 亚洲精品一区二区三区不| 可以在线观看的黄色| 一级做a爰片久久毛片美女图片| 久草福利在线| 日韩性xxxx爱| 欧美aaaaaaa| 97在线观看视频| 玛雅亚洲电影| 国产一区二区在线免费| 亚洲无线观看| 欧美日韩国产免费一区二区三区 | 国产亚洲欧美aaaa| √天堂资源地址在线官网| 北条麻妃一区二区三区中文字幕| a毛片在线看免费观看| 高清一区二区三区四区五区| 一本大道色婷婷在线| 国产精品视频一区二区三区四| 中文字幕成人| 国外成人免费视频| 国产一区二区三区电影在线观看| 一区二区精品国产| 精品96久久久久久中文字幕无| 九色在线视频观看| 蜜臀av性久久久久蜜臀av麻豆| 国产人妻精品久久久久野外| 91在线观看免费视频| 国产三级aaa| 五月婷婷另类国产| 在线观看黄色网| 亚洲激情国产精品| 三区四区在线视频| 午夜精品久久久久久久久久久久久| 国产精品毛片久久久久久久久久99999999| 成人在线免费观看视视频| 日韩av三区| 国产高清免费在线| 香蕉成人久久| 青娱乐国产精品视频| 91麻豆国产在线观看| 午夜爽爽爽男女免费观看| 精品久久久久久中文字幕一区奶水| 香蕉污视频在线观看| 亚洲精品在线免费播放| 在线国产情侣| 欧洲亚洲妇女av| 亚洲精品观看| 亚洲欧美国产不卡| 亚洲一区日韩| 岛国精品一区二区三区| 亚洲国产精品传媒在线观看| 日韩免费黄色片| 欧美疯狂做受xxxx富婆| 激情视频在线观看免费| 欧美激情手机在线视频| 青青青国产精品| 欧美日韩精品免费看| 欧美涩涩网站| 亚洲理论中文字幕| 国产日本亚洲高清| 日韩免费一级片| 日韩视频免费观看高清在线视频| av在线首页| 1769国内精品视频在线播放| 亚洲1区在线观看| 三上悠亚免费在线观看| 日本vs亚洲vs韩国一区三区二区 | 91a在线视频| 成人午夜三级| 国内少妇毛片视频| 国产精品99久久久久久似苏梦涵| www.99re6| 欧美丝袜第三区| 国产视频第一区| 日产精品久久久一区二区福利| 国产精品巨作av| 美女扒开大腿让男人桶| 国产一区二区三区四区五区美女 | 粉嫩高清一区二区三区精品视频 | 欧美国产精品久久| 亚洲成人第一网站| 亚洲免费视频观看| 伊人久久国产| 欧美日韩在线高清| 麻豆成人精品| a天堂中文字幕| 欧美性色欧美a在线播放| 国产高清视频在线| 国产精品一区久久| 不卡在线一区二区| av网站在线不卡| 国产精品久久久99| 91国在线视频| 超碰91人人草人人干| 清纯唯美激情亚洲| 欧美中日韩在线| 99久久久国产精品免费蜜臀| 欧美一二三区视频| 日韩国产欧美精品一区二区三区| 周于希免费高清在线观看| 欧美极品一区| 老鸭窝一区二区久久精品| 99热这里只有精品4| 制服丝袜日韩国产| 日本无删减在线| 久精品国产欧美| 日韩国产在线观看一区| 日本女人性生活视频| 日韩一区二区免费电影| 黑人另类精品××××性爽| 久久精品aaaaaa毛片| 日本在线不卡一区| 99久久99久久精品国产| 精品久久久久久最新网址| 美女露胸视频在线观看| 丝袜美腿玉足3d专区一区| 精品一区二区在线视频| 国产一级视频在线播放| 精品亚洲一区二区三区| 丁香婷婷久久| 热久久最新地址| 91在线播放网址| 中文字幕av网站| 久久乐国产精品| 国产真实有声精品录音| 超碰在线超碰在线| 欧美日韩性视频| 免费av毛片在线看| 国产一区二区无遮挡| 蜜乳av一区二区三区| 精品无码人妻一区二区三| 亚洲欧美日韩国产成人| 99国内精品久久久久| 国产午夜福利视频在线观看| 18欧美乱大交hd1984| 亚洲欧洲综合在线| 成人日韩在线电影| 欧美亚洲一区| 国产精品九九九九九九| 亚洲视频网站在线观看| 国产劲爆久久| 一级做a爱视频| 日本韩国欧美一区|