當前位置:編程學習大全網 - 編程語言 - vb中如何使用PostMessage?

vb中如何使用PostMessage?

此函數將消息放入(發送)與指定窗口創建的線程相關聯的消息隊列,並在不等待線程處理消息的情況下返回。消息隊列中的消息是通過調用GetMessage和PeekMessage獲得的。

函數原型:B00L PostMessage(HWND hWnd,UINT Msg,WPARAM wParam,lparam lparam);

參數

窗口程序接收消息的窗口的句柄。可以取兩個具有特定含義的值:

HWND。廣播:消息被發送到系統的所有頂層窗口,包括無效或不可見的非自有窗口、覆蓋窗口和彈出窗口。消息不會發送到子窗口。

NULL:該函數的操作與調用PostThreadMessage函數相同,將參數dwThread設置為當前線程的標識符。

Msg:指定要發送的消息。

WParam:指定特定於消息的附加信息。

IParam:指定特定於消息的附加信息。

返回值:如果函數調用成功,返回非零值;如果函數調用失敗,返回值為零。要獲得更多錯誤信息,請調用GetLastError函數。

例子:遊戲掛機。如果壹個簡單的遊戲只靠點擊鼠標就掛了,那麽我們可以用VB做壹個簡單的插件,用SetCursorPos()等函數把鼠標移動到指定的位置點擊,但這種情況下遊戲界面必須在前臺。但是如果使用postmessage()函數,即使遊戲最小化,鼠標點擊事件仍然可以發送到遊戲中。這就是郵件的好處。試試下面的例子:

API聲明

私有聲明函數PostMessage Lib“user 32”別名“PostMessageA”(ByVal hwnd為Long,ByVal wMsg為Long,ByVal wParam為Long,ByVal lParam為Long)為Long

私有聲明函數FindWindow Lib "user32 "別名" FindWindowA" (ByVal lpClassName為字符串,ByVal lpWindowName為字符串)為Long

私有聲明子睡眠庫“kernel 32”(ByVal dw milliseconds壹樣長)

常數聲明

私有常量WM _ LBUTTONDBLCLK = & ampH203

私有常量WM _ LBUTTONDOWN = & ampH201

私有常量WM _ LBUTTONUP = & ampH202

私有常量WM _ MBUTTONDBLCLK = & ampH209

私有Const WM _ MBUTTONDOWN = & ampH207

私有Const WM _ MBUTTONUP = & ampH208

私有常量WM _ RBUTTONDBLCLK = & ampH206

私有常量WM _ RBUTTONDOWN = & ampH204

私有常量WM _ RBUTTONUP = & ampH205

私有子命令1_Click()

Dim lpClassName為String,lpWindowName為String,hWndX為Long

LpClassName = "在這裏填寫遊戲窗口的類名。"可以用VB企業版自帶的SPY++工具查看遊戲窗口的類名和標題。

LpWindowName = "在此填寫遊戲窗口的標題"

Hwndx = FindWindow (LP類名,LP窗口名)'這壹步是獲取遊戲窗口的句柄,發送消息時需要用到。

Dim wMsg為Long,wParam為Long,lParam為Long,Rx為Long,xx為Integer,yy為Integer

Xx=100 '單擊X坐標。

Yy=100 '點擊Y坐標。

WMsg = WM_LBUTTONDOWN '左鍵單擊該消息。

wParam = 1

lParam =yy*65536+xx

調用postmessage (hwndx,wmsg,wparam,lparam)'發送消息。

睡眠300

WMsg = WM_LBUTTONUP '左鍵單擊引發消息。

wParam = 1

lParam = yy*65536+xx

調用postmessage (hwndx,wmsg,wparam,lparam)'發送消息。

末端接頭

這個程序的目的是實現遊戲中的鼠標點擊~ ~ ~ ~ ~比如100 438+000的位置。

  • 上一篇:零基礎為什麽建議學習Java?
  • 下一篇:江西人工智能規劃方案解答
  • copyright 2024編程學習大全網