vb.net微信消息 vbs打開(kāi)微信

vb.net中SendMessager的問(wèn)題

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As String, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long

創(chuàng)新互聯(lián)建站專(zhuān)注為客戶(hù)提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于網(wǎng)站設(shè)計(jì)制作、成都做網(wǎng)站、武昌網(wǎng)絡(luò)推廣、小程序開(kāi)發(fā)、武昌網(wǎng)絡(luò)營(yíng)銷(xiāo)、武昌企業(yè)策劃、武昌品牌公關(guān)、搜索引擎seo、人物專(zhuān)訪、企業(yè)宣傳片、企業(yè)代運(yùn)營(yíng)等,從售前售中售后,我們都將竭誠(chéng)為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供武昌建站搭建服務(wù),24小時(shí)服務(wù)熱線:13518219792,官方網(wǎng)址:muchs.cn

改為

Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As String, ByVal wMsg As integer, ByVal wParam As integer , ByVal lParam As String) As integer

再試試,

可能你的聲明使用vb6。0 復(fù)制過(guò)來(lái)的,long 全部改成integer

微信小程序 消息推送 vb。net怎么配置token

你這個(gè)口令令牌錯(cuò)誤啊,需要在你的公眾號(hào)的后臺(tái)去獲取你的口令令牌地址填寫(xiě)上去才行。另外你的url服務(wù)器地址也要填寫(xiě)正確,不能有錯(cuò)誤,這樣配置出來(lái)的信息才正確。

淺談VB.NET中的跨進(jìn)程消息鉤子

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

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

好了 VB 的代碼大家可以在下載的壓縮包中找到 作者提供了一個(gè)以記事本為基礎(chǔ)的實(shí)例(在\dssubcls目錄下) 非常詳細(xì)無(wú)需詳細(xì)敘述了 關(guān)鍵是在VB NET里面如何使用它——如何聲明API 如何進(jìn)行回調(diào) 看用來(lái)子類(lèi)化的API的VB 聲明先

Declare Function SubClass Lib dssubcls (ByVal HwndSubclass _Optional ByVal Address = _Optional ByVal OldStyle = _Optional ByVal NewStyle = _Optional ByVal Ext = _Optional ByVal SubClass = )轉(zhuǎn)化成VB NET的聲明類(lèi)似下面的樣子(習(xí)慣使然 我把展開(kāi)成了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

這不是很好嘛?問(wèn)題來(lái)了 這樣的聲明在VB 里面可以使用Addressof function來(lái)傳入第二個(gè)參數(shù)(參見(jiàn)你下載的源碼) 但是在VB NET里面直接Addressof就不成了——我們需要委托一個(gè)回調(diào)

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

這個(gè)委托 對(duì)應(yīng)的是以下函數(shù)

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

End Function

使用時(shí) 需要注意先實(shí)例化這個(gè)委托

Private fix_COCD = New HookCallBack(AddressOf mCallback)

此時(shí) fix_COCD就是我們的mCallback函數(shù)引用了 用更直觀的觀點(diǎn)來(lái)看 fix_COCD就是一個(gè)指向mCallback的指針 相當(dāng)于VB 里面的Addressof function得到的結(jié)果 看似問(wèn)題解決了 于是我們寫(xiě)了以下代碼來(lái)搞對(duì)方的進(jìn)程窗體消息

SubClass(Handle fix_COCD ) 修改處理函數(shù)

問(wèn)題真是接踵而至!IDE提示變量類(lèi)型不符?。∈聦?shí)確實(shí)如此 我們把一個(gè)HookCallBack類(lèi)型當(dāng)做Integer來(lái)傳遞 無(wú)法通過(guò)檢查 那么強(qiáng)行轉(zhuǎn)換吧?當(dāng)然 你可以去試試 這時(shí) 我所做的是 修改這個(gè)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

使之符合我們的調(diào)用?有點(diǎn)倒行逆施?并非如此 當(dāng)你習(xí)慣了修改API聲明之后 會(huì)發(fā)現(xiàn)有些事變得如此簡(jiǎn)單 有些事需要你重新認(rèn)識(shí)——對(duì)于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 實(shí)例化的委托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 ) 修改處理函數(shù)UseSendMessage( )End Sub

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

End Function

用這個(gè)代碼的時(shí)候 可能會(huì)碰見(jiàn)一些 意外情況 例如wm_datacopy 此時(shí) 我們需要進(jìn)一步去獲取LPARTM所指向的結(jié)構(gòu)并對(duì)其進(jìn)行解析(我們要讀的是對(duì)方窗口所在進(jìn)程的內(nèi)存 具體地址由lParam確定——實(shí)際上lParam一直是一個(gè)指針——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這個(gè)類(lèi)提供了Readmsg方法來(lái)讀取一些內(nèi)容——但這并不是完整的 我們知道 LPARAM指向的結(jié)構(gòu)是這樣的

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

其中dwData我們不是很關(guān)心 當(dāng)然其中也可能存在一些有用信息(這里不想多說(shuō) 網(wǎng)上有些文章純屬誤導(dǎo))

而cbData是一個(gè)長(zhǎng)度 lpData的長(zhǎng)度

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

有了地址和長(zhǎng)度 如何讀取代碼就自己寫(xiě)吧

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

當(dāng)然 上面提到的只是 特殊情況 中的一個(gè)典型 還有很多時(shí)候 進(jìn)程是用自定義消息(H A)來(lái)傳遞數(shù)據(jù)的 例如我所開(kāi)發(fā)的這個(gè)工程 打印mCallBack的參數(shù)后 得到的是如下結(jié)果(十六進(jìn)制 只提取了有用的信息)

D

其中l(wèi)Param就是一個(gè)指針 我讀了其中的一部分

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

現(xiàn)在就明白為什么上面的代碼是那樣了 )

然后進(jìn)行了一個(gè)處理 得到了我想要的信息

消息解碼后得到的移動(dòng)棋子信息 玩家 起X 起Y 止X 止Y 棋子編號(hào)

走棋總步數(shù)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

當(dāng)然 在我的工程里面重載的ReadProcessMemory并沒(méi)有被使用

補(bǔ)充一下咯

在VB NET中 處理自己的窗體的消息只需要重載窗體消息處理過(guò)程就可以了 無(wú)需子類(lèi)化 )

有補(bǔ)充一下

lishixinzhi/Article/program/net/201311/12647

請(qǐng)問(wèn)VB.NET 如何利用PostMessage 向窗口的指定Edit發(fā)送信息

你不用程序的情況能不能用TAB切換焦點(diǎn)。如果這樣不行的話你用程序控件是沒(méi)用的。

或都直接對(duì)第二個(gè)編輯框發(fā)送消息。

ASP.net(VB) 怎么接收POST內(nèi)容啊

不確的消息?

你要觀察下到底收到什么了?

是亂碼還是為空?

這樣才能有解決辦法

當(dāng)前題目:vb.net微信消息 vbs打開(kāi)微信
標(biāo)題網(wǎng)址:http://muchs.cn/article40/hgideo.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、Google、企業(yè)網(wǎng)站制作手機(jī)網(wǎng)站建設(shè)、ChatGPT網(wǎng)站制作

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

網(wǎng)站優(yōu)化排名