精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

无码国产伦一区二区三区视频| 三上悠亚在线观看视频| 一区二区乱码| 国产精品午夜在线| 成人区精品一区二区| 99精品人妻国产毛片| 91av精品| 亚洲欧美色婷婷| 人妻体体内射精一区二区| 一个人看的www视频在线免费观看| 国产精品久久综合| 国产日韩二区| 国产精品一区二区黑人巨大| 国产日韩一区二区三区在线播放| 最近2019年好看中文字幕视频| 欧美一级片在线免费观看| 毛片无码国产| 亚洲亚洲精品在线观看| 亚洲午夜精品久久久中文影院av| 少妇高潮一区二区三区69| 美国欧美日韩国产在线播放| 国内精品免费午夜毛片| 亚洲av无一区二区三区| 日韩有码一区| 精品国产精品网麻豆系列 | 韩国自拍一区| 久久av红桃一区二区小说| 四虎影成人精品a片| 哺乳挤奶一区二区三区免费看| 欧美日韩国产乱码电影| www.欧美日本| 小草在线视频免费播放| 亚洲一区二区黄色| 超碰97在线看| 黄色大片在线播放| 中文字幕不卡在线观看| 欧美综合激情| 亚洲人午夜射精精品日韩| 国产成人精品一区二| 成人国产精品久久久| 亚洲av无码乱码国产精品fc2| 亚洲国产一区二区精品专区| 久久99久久久久久久噜噜| 色偷偷www8888| 天天做天天爱综合| 久久久精品免费| 91香蕉视频网| 91av精品| 九九精品在线观看| 成人免费毛片东京热| 91精品国产视频| 久久亚洲精品网站| 亚洲色图综合区| 欧美ab在线视频| 欧美激情视频播放| 国产在线一区视频| 亚洲国产美女| 日本伊人精品一区二区三区介绍| 日本特级黄色片| 美女诱惑一区| 国产精品久久久91| 亚洲综合精品在线| 国产米奇在线777精品观看| 亚洲a在线播放| 亚洲精品成人区在线观看| 成人动漫一区二区| 欧美高清性xxxxhdvideosex| 久蕉在线视频| 国产精品女上位| aaa免费在线观看| 人人澡人人添人人爽一区二区| 亚洲一区影音先锋| 国产精品免费观看久久| 免费在线观看一区| 91麻豆精品国产91久久久使用方法| 古装做爰无遮挡三级聊斋艳谭| 日本亚州欧洲精品不卡| 亚洲精品国产精品国自产在线| 黄色性生活一级片| 日韩三级在线| 久久久久久久爱| 欧美brazzers| 国产乱妇无码大片在线观看| 亚洲综合自拍一区| 欧美一区二区视频| 亚洲欧洲一区二区在线播放| 免费人成自慰网站| 国产麻豆久久| 精品国产一区二区三区久久影院| 少妇户外露出[11p]| 精品一区二区三区在线| 理论片在线不卡免费观看| 日韩三级视频在线| 日韩精品久久理论片| 亚洲va欧美va国产综合久久| 天天干在线观看| 国产精品国产馆在线真实露脸| 大陆极品少妇内射aaaaaa| 欧美调教sm| 欧美精选午夜久久久乱码6080| 麻豆tv在线观看| 欧洲grand老妇人| 欧美激情免费视频| 一卡二卡在线视频| 99re这里都是精品| 九一免费在线观看| 日韩三区在线| 亚洲第一网站免费视频| 久久久久人妻一区精品色| 国产情侣一区| 99三级在线| 在线国产91| 色婷婷激情一区二区三区| 在线观看免费视频国产| 久久一级电影| 国产精品xxx视频| 婷婷色在线观看| 夜夜嗨av一区二区三区网页| 日本在线观看免费视频| 亚洲最好看的视频| 国内成人精品视频| 国产黄a三级三级看三级| 日本一区二区高清| 欧美一级黄色影院| 亚洲精品动态| 91国内在线视频| 国产91免费在线观看| 亚洲欧洲制服丝袜| www.这里只有精品| 国产精品视频一区二区三区四蜜臂| 久久久在线免费观看| a级片在线播放| 成人免费在线视频观看| 视频在线观看免费高清| 欧美丝袜丝交足nylons172| 欧美在线视频观看| 香港三日本三级少妇66| 亚洲成av人片在线| 97人妻精品一区二区三区免费| 亚洲字幕久久| 亚洲一区中文字幕在线观看| 日韩毛片久久久| 欧美日韩电影一区| 999精品视频在线观看播放| 看电视剧不卡顿的网站| 亚洲一区免费看| 国产69精品久久久久9999人| 最近2019中文字幕在线高清| 欧美三级网站在线观看| 国产欧美精品区一区二区三区 | 日韩影院一区二区| 韩国av一区二区三区在线观看| 亚洲午夜精品一区二区| 高清久久精品| 欧美日韩福利电影| 人妻少妇精品无码专区| 偷拍一区二区三区四区| 欧美老熟妇乱大交xxxxx| 日韩精品成人一区二区在线| 日日夜夜精品网站| 亚瑟国产精品| 欧美成人激情视频免费观看| 亚洲成人黄色片| 精品久久久中文| 亚洲性猛交xxxx乱大交| 蜜桃视频一区二区| 欧美交换配乱吟粗大25p| 第一区第二区在线| 日本精品久久电影| 日本韩国在线视频爽| 日韩欧美在线1卡| 亚洲综合一二三| 欧美国产97人人爽人人喊| 中文字幕一区二区在线观看视频 | 欧美日韩精品一区二区视频| 国产精品吴梦梦| 少女频道在线观看高清| 精品小视频在线| 一区二区三区免费观看视频| 一二三区精品视频| 久久成人激情视频| 国产一区二区按摩在线观看| 18禁裸男晨勃露j毛免费观看| 精品一区免费| 91精品视频在线免费观看| av手机免费在线观看| 一本大道亚洲视频| www五月婷婷| 91久久精品午夜一区二区| 国产色无码精品视频国产| 91视频精品在这里| 日韩在线一区视频| 亚洲美女啪啪| 少妇熟女一区二区| 久草成人资源| 国产91社区| 精品女同一区二区三区在线观看| 久久久久久久久亚洲| 在线观看黄色av| 日韩电影视频免费| 99久久精品国产一区色| 在线一区二区观看| 黄色激情视频在线观看| 1区2区3区欧美| 久久国产柳州莫菁门| 成人一级片网址| 中文字幕22页| 老司机精品导航| 黄色一级片在线看| 亚洲草久电影| 四虎影院一区二区三区 | 午夜啪啪免费视频| 国产欧美高清视频在线| 国产欧美日韩视频一区二区三区| 色999韩欧美国产综合俺来也| 欧美亚洲成人精品| 99久久99视频只有精品| 欧美三级在线| 色婷婷久久av| 日本在线视频1区| 欧美成人r级一区二区三区| 亚洲一区二区三区高清视频| 天天影视网天天综合色在线播放 | 亚洲 小说区 图片区| 午夜影视日本亚洲欧洲精品| 2025国产精品自拍| 国产精品私人影院| 精品人伦一区二区| 久久亚洲精精品中文字幕早川悠里 | 亚洲黄色www| 亚洲精品第五页| 日韩三级免费观看| 国产精品视频在线观看免费| 欧美性色黄大片| 无码人妻精品一区二区三区不卡| 天天影视涩香欲综合网| 日韩黄色在线视频| 亚洲成人免费视频| 日韩视频免费观看高清| 五月天激情综合| 在线观看免费国产视频| 亚洲国产精品久久久久秋霞影院| 久久久91视频| 亚洲一区二区四区蜜桃| 国产无遮挡裸体免费视频| 亚洲电影在线播放| 日本少妇性生活| 色综合久久综合网97色综合| 亚洲va国产va天堂va久久| 中文字幕在线视频区| 综合久久五月天| a视频网址在线观看| 中文字幕日韩综合av| 黄色网页在线播放| 蜜臀久久99精品久久久久久宅男 | 亚洲欧美日韩网站| 国产一区二区毛片| 亚洲成人福利视频| 不卡欧美aaaaa| 色欲av无码一区二区三区| 国产午夜一区二区三区| 69xxx免费| 一区二区三区在线观看国产| 久久精品视频国产| 色综合天天天天做夜夜夜夜做| 一级黄色在线观看| 欧美喷潮久久久xxxxx| 99热这里只有精品在线| 精品91自产拍在线观看一区| 日韩a级作爱片一二三区免费观看| 亚洲毛片一区二区| 国产精品秘入口| 久久久精品久久久| 日韩大片免费观看| 国产免费一区二区三区在线观看 | 国产成a人亚洲精| 99热超碰在线| 国产日韩欧美综合在线| 久久久久亚洲av无码专区体验| 亚洲成人手机在线观看| 国产精品乡下勾搭老头1| 韩国一区二区三区四区| 久久久精品tv| 欧美日韩精品欧美日韩精品一综合| 91成人在线视频观看| 日韩在线观看一区| 久久手机在线视频| 欧美综合二区| 亚洲色图欧美自拍| 99久久99精品久久久久久| 日韩不卡av在线| 亚洲狠狠爱一区二区三区| 波多野结衣影片| 日韩免费一区二区| 国产在线黄色| 欧美国产第一页| 欧美日韩亚洲国产| 国产精品露出视频| 91欧美在线| a在线视频观看| 国产一区二区三区免费| 亚洲精品成人无码熟妇在线| 亚洲三级免费电影| 男操女视频网站| 亚洲国产精品网站| 久久日韩视频| 国产精品美女999| 粉嫩久久久久久久极品| 欧美亚洲视频一区| 视频一区二区国产| 亚洲精品第二页| 亚洲欧美日韩成人高清在线一区| 日韩美一区二区| 亚洲第一精品夜夜躁人人爽| 蜜芽在线免费观看| 国产精品久久久久久av| 久久资源综合| www.亚洲成人网| 国产一区二区三区四区五区美女 | 日韩精品一区二区三区中文 | 免费不卡的av| 亚洲免费观看高清完整版在线| 销魂美女一区二区| 日韩不卡中文字幕| 爱情岛亚洲播放路线| 亚洲va国产va天堂va久久| 日韩免费在线| 色一情一乱一伦一区二区三区日本| 99视频在线精品| 日韩黄色精品视频| 久久精品超碰| 国产在线观看91精品一区| 神马午夜久久| 我的公把我弄高潮了视频| 国产福利一区二区| 唐朝av高清盛宴| 欧美成人a∨高清免费观看| 精品自拍一区| 亚洲综合国产精品| 伊人久久大香线| 免费观看黄网站| 一区二区三区久久| 亚洲成人第一区| 久久久在线观看| 欧美五码在线| 国产亚洲综合视频| 91丝袜呻吟高潮美腿白嫩在线观看| 国产无套粉嫩白浆内谢| 亚洲国产高潮在线观看| 国产精品25p| 免费看成人片| 美女在线观看视频一区二区| 亚洲女同二女同志奶水| 3atv一区二区三区| 天堂亚洲精品| 国产伦精品一区二区三区照片91| 亚洲成人资源| 精品无码人妻一区| 欧美手机在线视频| 国产在线激情| 国产青春久久久国产毛片| 久久精品盗摄| 午夜影院黄色片| 91精品免费在线| 黄色的视频在线观看| 蜜桃狠狠色伊人亚洲综合网站| 久久国产直播| 色老板免费视频| 欧美成人精品二区三区99精品| 91福利在线尤物| 日本黑人久久| 国产原创一区二区| 日本三级黄色大片| 亚洲图片制服诱惑| 欧美9999| 国产午夜福利视频在线观看| 中文字幕第一区第二区| 亚洲经典一区二区三区| 国产99视频精品免视看7| 国产精品久久久久无码av| 大尺度在线观看| 色婷婷激情一区二区三区| 99热国产在线中文| 欧美高清视频一区| 国产毛片精品视频| 国产污污视频在线观看| 最近2019年日本中文免费字幕 | 亚洲高清久久网| 中文.日本.精品| 日韩亚洲欧美视频| 国产精品久久午夜| 网站黄在线观看| 国产精品一区电影| 一区二区高清| 亚洲二区在线播放| 亚洲欧美精品在线| 日韩中文字幕一区二区高清99| 一区二区成人在线视频| 99在线观看免费| 国产精品18久久久久久首页狼|