VB如何實現執行緒鉤子,VB如何實現PING命令?

2025-03-03 07:40:22 字數 3623 閱讀 8577

1樓:匿名使用者

windows的鉤子函式分兩種,一種是全域性的,一種是執行緒的。全域性的鉤子函式可以捕獲任何應用程式的訊息,但必須是標準的dll才能實現,vb做不了。vb可以實現執行緒的,就告如是當前應用程式的訊息,這對滑鼠訊息的捕捉有影響。

setwindowshookex定義如下:

declare function setwindowshookex lib "user32" alias "setwindowshookexa" (byval idhook as long, byval lpfn as long, byval hmod as long, byval dwthreadid as long) as long

idhook是鉤子型別,如wh_keyboard捕捉鍵盤訊息,而wh_mouse捕捉滑鼠訊息。hmod用於全襪銀啟局鉤子,vb要實現鉤子,必須設為用於執行緒鉤子vb中可以設定為為鉤子函式,在vb中可以使用addressof獲得鉤子函式的位址。這個函式因搏運為鉤子型別不同而有所不同。

如鍵盤鉤子為:

public function keyboardproc(byval ncode as long, _

byval wparam as long, _

byval lparam as long) as long

如果code不為0,鉤子函式必須呼叫callnexthookex,將訊息傳遞給下面的鉤子。wparam和lparam不是按鍵。

可以到這裡看看。

2樓:匿名使用者

1-vb的低層鉤子毋須dll 2-vb通過第三方外掛程式可以生成標準dll

vb如何實現ping命令?

3樓:瑞安阿芳

在vb工程中引用「microsoft wmi scripting library」,然後在按鈕單擊事件中寫上如下的**:

dim objwmiservice as swbemservices '定義swbemservices物件。

dim colitems as swbemobjectset 'swbem物件集合。

dim objitem as swbemobject 'swbem單個物件。

set objwmiservice = getobject("winmgmts:\oot\cimv2")

set colitems = "select * from win32_pingstatus where address='" & "'") '這裡寫了text1控制項,具體的ip位址你來決定。

for each objitem in colitems

if = 0 then

這裡自己新增顯示通的**。

else這裡自己新增顯示不通的**。

end if

next

vb hook鍵盤鉤子

4樓:網友

完整的hook**,我第一次接觸hook就是從這個例子中學習的。

5樓:網友

是截獲其他執行緒還是程序?

截獲其他程序要做成dll形式的。

vb鉤子 鉤其他執行緒 的鍵盤事件 總是記憶體出錯

6樓:遠風的夢想家

研究到大半夜得出結論是vb做不到這一點,具體原因入下:

vb可以寫出標準dll,用一些特殊的外掛程式或者自己編寫一些小工具可以做到這一點,上我也過,驗證是可行的,你寫的注入**除了我前面提到過的那一點之外,也都是正確的,但是vb確實每次都會讓目標程序崩潰,用ida查了一下,發現總是死在這個函式里vbasetsystemerror ,在csdn上查了一下,這個函式是vb編譯時候自動加上的,它會檢查每次呼叫api的返回值,但是因為我們是在dll內部掉api,vb本身設計時沒考慮這一點,所以到這個函式里頭,它就崩潰了,而我們也沒辦法阻止我們自己的**呼叫這個函式,所以這個只能說是vb自身的問題,確實沒辦法用vb做執行緒鉤子,只能用vc去做。

查了一下,如何去掉這個函式網上也提了一些說法,不過整體上感覺過於複雜,不值得使用,其中主要的手段就是修改彙編指令,把這個函式從記憶體裡改掉,這個辦法通用性差,不值得使用,別的方法就不太有效了。

所以最後總結下來vb就是不支援這麼做,沒有辦法了。

private declare function callnexthookex lib "user32" (byval hhook as long, byval ncode as long, byval wparam as long, lparam as any) as long

這個api是從api瀏覽器上拷貝下來的吧?這麼幹是不行的。。

必須這樣:private declare function callnexthookex lib "user32" (byval hhook as long, byval ncode as long, byval wparam as long, byval lparam as long) as long

你**裡沒有callnexthook,這樣恐怕不行吧。

怎麼用vb做鍵盤鉤子

7樓:乙翠桃敏星

用vb作鍵盤鉤子似乎有點費力,這種程式最好用vc++編寫。

8樓:刀頡寇和

加到100分我給你一段真正能用的vb全域性鍵盤鉤子**,dll注入都不用,很簡單。

vb的鉤子具體是幹什麼用的

9樓:萌神

public declare function setwindowshook lib "user32" alias "setwindowshooka" (byval nfiltertype as long, byval pfnfilterproc as long) as long public declare function setwindowshookex lib "user32" alias "setwindowshookexa" (byval idhook as long, byval lpfn as long, byval hmod as long, byval dwthreadid as long) as long public declare function setwindowlong lib "user32" alias "setwindowlonga" (byval hwnd as long, byval nindex as long, byval dwnewlong as long) as long 你研究下這幾個函式msdn裡有具體的說明,英文不好就用詞霸,翻譯翻譯慢慢看。 windows程式設計是基於事件響應的,事件是通過訊息來啟用的。 舉個簡單的例子,每個窗體都有乙個控制代碼。

如果你想讓這個視窗響應某個事件,比如滑鼠點選的事件,你不必非得把滑鼠放在上面,而只需要sendmessage(),裡邊填上引數,wm_click,這是個常數。 當然你要是想在某個視窗發生某個事件的時候做點事情(不一定就是記錄人家的鍵盤輸入做些偷雞摸狗的事),就可以使用這些函式,方法不是隻有乙個。 拿個例子說:

系統的文字框有自帶的選單,如果你想讓它只出現你的選單,你就可以用setwindowlong()你看一下修改處理訊息程序位址引數,改為module級別的public函式的位址。你就可以自己篩選一下訊息,然後做出反應。這是最簡單的hook,你當然也可以用別的方法。

就說這麼多了,你自己得多琢磨琢磨。

(VB如何實現滑鼠模擬,怎樣用VB程式碼實現滑鼠單擊的效果

通過鍵盤輸入一個自然數,求該數的因子數 vb模擬滑鼠點選 不知道想幹什麼,滑鼠點的那個位置有什麼用啊 怎樣用vb 實現滑鼠單擊的效果 給你寫了一個示例,你自己可以看明白的 private declare sub mouse event lib user32 byval dwflags as long...

VB如何實現label 顯示滑鼠位置座標

在物件mousemove的事件中加入 改變label的caption屬性。例 滑鼠在表單上移動時,標籤label會顯示滑鼠位置座標。private sub form mousemove button as integer,shift as integer,x as single,y as singl...

VB6程式條怎麼實現,VB6如何讓程式只執行一個程式例項

實現方法很多呀。如果自帶進度條。可以用自帶的做。太久不用vb6了。放了是否自帶了。這種做法就是設定一個總值。比如100,然後把你程式要做的工作分成若干個任務,比如10個。這樣每次一個任務執行完,更新進度條的值。10,20,30.還有更靈活的。不如利用picture box。在flash裡面做一個動畫...