bl双性强迫侵犯h_国产在线观看人成激情视频_蜜芽188_被诱拐的少孩全彩啪啪漫画

vb點虐 十六進制補零的簡單介紹

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

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

成都創新互聯公司主要業務有網站營銷策劃、成都網站設計、成都網站建設、微信公眾號開發、微信小程序、H5場景定制、程序開發等業務。一次合作終身朋友,是我們奉行的宗旨;我們不僅僅把客戶當客戶,還把客戶視為我們的合作伙伴,在開展業務的過程中,公司還積累了豐富的行業經驗、成都全網營銷推廣資源和合作伙伴關系資源,并逐漸建立起規范的客戶服務和保障體系。 

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

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

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

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

這不是很好嘛?問題來了 這樣的聲謹毀明在VB 里面可以使用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的指針 相余大當于VB 里面的Addressof function得到的結果 看似問題解決了 于是我們寫了以下代碼來搞對方的進程窗體消息

SubClass(Handle fix_COCD ) 修改處理函數

問題真是接踵而至!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 = Optional ByVal NewStyle As Integer = Optional ByVal Ext As Integer = Optional ByVal SubClass As Integer = ) As Integet

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

至此 大功告成

較為完整的代碼如下

CodePrivate Declare Function SubClass Lib dssubcls (ByVal HwndSubclass As Integer Optional ByVal Address As HookCallBack = Nothing Optional ByVal OldStyle As Integer = Optional ByVal NewStyle As Integer = Optional ByVal Ext As Integer = Optional ByVal SubClass As Integer = ) As IntegerPrivate 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 IntegerPublic Sub Hook(ByVal Handle As Integer)proc = SubClass(Handle fix_COCD ) 修改處理函數UseSendMessage( )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完全就是一回事(如果你使用VB 可能需要使用Intprt toint 或intprt=new intprt(integer)這些)

CodePublic Class GetMsgPublic Declare Function ReadProcessMemory Lib kernel (ByVal hProcess As Integer ByVal lpBaseAddress As Integer ByVal lpBuffer() As Byte ByVal nSize As Integer ByRef lpNumberOfBytesWritten As Integer) As IntegerPublic Declare Function ReadProcessMemory Lib kernel (ByVal hProcess As Integer ByVal lpBaseAddress As Integer ByRef int As Integer ByVal nSize As Integer ByRef lpNumberOfBytesWritten As Integer) As IntegerPublic Declare Function OpenProcess Lib kernel (ByVal dwDesiredAccess As Integer ByVal bInheritHandle As Integer ByVal dwProcessId As Integer) As IntegerPublic Declare Function CloseHandle Lib kernel (ByVal hObject As Integer) As IntegerPrivate hProc As IntPtrSub New(ByVal PID As Integer)hProc = OpenProcess(HFFFF False PID)End Sub

Function readmsg(ByVal address As Integer) As Byte()Dim buf( ) As ByteReadProcessMemory(hProc address buf )Return bufEnd Function

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

_Public Structure COPYDATASTRUCTPublic dwData As IntegerPublic cbData As IntegerPublic lpData As IntPtrEnd Structure

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

而cbData是一個長度 lpData的長度

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

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

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

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

D

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

Function readmsg(ByVal address As Integer) As Byte()Dim buf( ) As ByteReadProcessMemory(hProc address buf )Return bufEnd 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 IntegerIf wParam = H ThenDim s As Byte() = msg readmsg(lParam)RaiseEvent Move(s( ) s( ) s( ) s( ) s( ) s( ) s( ))End IfEnd Function

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

補充一下咯

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

有補充一下

lishixinzhi/Article/program/net/201311/12647

vb點虐 的serialport控件實時采集16進制單片機溫度值,新手實在沒看懂,大家進來幫我看一下,謝謝啦

1 那里只是重新搏寬給String賦值。

2 空字符不存在基世亮要消除。

3 datastr是數組!

4 這和采集的數返盯據有關,重點是 dec = val(hexString)

十六進制計算方法

0-9對應0-9;

A-F對應10-15;

十六進制數的加減法的進/借位規則為:借一當十六,逢十六進一。

十六進制數同二進制數及十進制數一樣,也可以寫成展開式的形式。

十進制整數轉十六進制數:“除以16取余,逆序排列”(除16取余法)

例:(1765)10=(6E5)2

1765/16=110.......5

110/16=6........14

616=0......6

因為14對應E

十六進制數轉換成二進制數:把每一個十六進制數轉換成4位的二進制數,就得到一個二進制數。

十六進制數字與二進制數字的對應關系如下:

0000 - 0 0100 - 4 1000 - 8 1100 - C

0001 - 1 0101 - 5 1001 - 9 1101 - D

0010 - 2 0110 - 6 1010 - A 1110 - E

0011 - 3 0111 - 7 1011 - B 1111 - F

例:將十六進制數5DF.9 轉換成二進制:

5 D F . 9 0101 1101 1111 .1001

即:(5DF.9)16 =(10111011111.1001)2

例:將二進制數1100001.111 轉換成十六進制:

0110 0001 . 1110 6 1 . E

即:(1100001.111)2 =(61.E)16

擴展資料:

進制轉換的理論:

1、 二進制數、十六進制數轉換為十進制數:

用按權展開法把一個任意R 進制數a n a n-1 ...a1a 0 . a -1 a -2...a -m轉換成十進制數,其十進制數值為每一位數字與其位權之積的和。

a n ×Rn+ a n-1×R n-1 +…+ a 1×R 1 + a 0×R 0 + a -1 ×R -1+ a -2×R -2+ …+ a -m ×R -m

2、 十進制轉化成R 進制十進制數輪換成R 進制數要分兩個部分:

整數部分要除R 取余數,直到商為0,得到的余數即為二進數各位的數碼,余數從右到左排列(反序排 列) 。小數部分要乘R 取整數,得到的整數即為二進數各位的數碼,整數從左到右排列(順序排列) 。

3、十六進制轉化成二進制:每一位十六進制數對應二進制的四位,逐位展開。

4、 二進制轉化成十六進制:將二進制數從小數點開始分別向左(對二進制整數)或向右(對二進制小數)每四位組成一組,不足四位補零。

參考資料:

十六進制轉換_百度百科

進制轉換-百度百科

VB.NET 如何通過TCP/IP協議通訊實現16進制數據的接收?

傳輸Integer 數據類啟鬧型來傳輸比較方便.因為Integer 的取值可以是0x0000-0xFFFF .當你把讓旁液數據發送到坦物目的主機后可以利用Hex() 把接收到的數據從十進制轉換到十六進制..

網頁題目:vb點虐 十六進制補零的簡單介紹
網頁URL:http://vcdvsql.cn/article24/ddpshce.html

成都網站建設公司_創新互聯,為您提供網站導航靜態網站面包屑導航網站制作品牌網站設計網站維護

廣告

聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯

營銷型網站建設