• 
    

      <address id="upfr9"><pre id="upfr9"><strike id="upfr9"></strike></pre></address>
      1. <address id="upfr9"><tr id="upfr9"></tr></address><dl id="upfr9"></dl>

        vb.net外部鉤子的簡單介紹

        VB .net中如何調(diào)用底層鍵盤鉤子或其他方法屏蔽全局所有按鍵

        .net的代碼真木有寫過。

        創(chuàng)新互聯(lián)公司主要為客戶提供服務(wù)項(xiàng)目涵蓋了網(wǎng)頁視覺設(shè)計(jì)、VI標(biāo)志設(shè)計(jì)、全網(wǎng)整合營銷推廣、網(wǎng)站程序開發(fā)、HTML5響應(yīng)式重慶網(wǎng)站建設(shè)公司、成都做手機(jī)網(wǎng)站、微商城、網(wǎng)站托管及成都網(wǎng)站維護(hù)、WEB系統(tǒng)開發(fā)、域名注冊、國內(nèi)外服務(wù)器租用、視頻、平面設(shè)計(jì)、SEO優(yōu)化排名。設(shè)計(jì)、前端、后端三個建站步驟的完善服務(wù)體系。一人跟蹤測試的建站服務(wù)標(biāo)準(zhǔn)。已經(jīng)為圍欄護(hù)欄行業(yè)客戶提供了網(wǎng)站開發(fā)服務(wù)。

        VB 可以屏蔽 包括ctrl+alt+del在內(nèi)的所有鍵盤按鍵消息

        其實(shí)你只要后臺截獲按鍵的消息后,直接屏蔽掉就可以了。

        VB代碼我有 net木有。

        什么是鉤子函數(shù)?鉤子函數(shù)的使用。

        WINDOWS的鉤子函數(shù)可以認(rèn)為是WINDOWS的主要特性之一。利用它們,您可以捕捉您自己進(jìn)程或其它進(jìn)程發(fā)生的事件。通過“鉤掛”,您可以給WINDOWS一個處理或過濾事件的回調(diào)函數(shù),該函數(shù)也叫做“鉤子函數(shù)”,當(dāng)每次發(fā)生您感興趣的事件時,WINDOWS都將調(diào)用該函數(shù)。一共有兩種類型的鉤子:局部的和遠(yuǎn)程的。

        局部鉤子僅鉤掛您自己進(jìn)程的事件。

        遠(yuǎn)程的鉤子還可以將鉤掛其它進(jìn)程發(fā)生的事件。遠(yuǎn)程的鉤子又有兩種:

        基于線程的 它將捕獲其它進(jìn)程中某一特定線程的事件。簡言之,就是可以用來觀察其它進(jìn)程中的某一特定線程將發(fā)生的事件。

        系統(tǒng)范圍的 將捕捉系統(tǒng)中所有進(jìn)程將發(fā)生的事件消息。 當(dāng)您創(chuàng)建一個鉤子時,WINDOWS會先在內(nèi)存中創(chuàng)建一個數(shù)據(jù)結(jié)構(gòu),該數(shù)據(jù)結(jié)構(gòu)包含了鉤子的相關(guān)信息,然后把該結(jié)構(gòu)體加到已經(jīng)存在的鉤子鏈表中去。新的鉤子將加到老的前面。當(dāng)一個事件發(fā)生時,如果您安裝的是一個局部鉤子,您進(jìn)程中的鉤子函數(shù)將被調(diào)用。如果是一個遠(yuǎn)程鉤子,系統(tǒng)就必須把鉤子函數(shù)插入到其它進(jìn)程的地址空間,要做到這一點(diǎn)要求鉤子函數(shù)必須在一個動態(tài)鏈接庫中,所以如果您想要使用遠(yuǎn)程鉤子,就必須把該鉤子函數(shù)放到動態(tài)鏈接庫中去。當(dāng)然有兩個例外:工作日志鉤子和工作日志回放鉤子。這兩個鉤子的鉤子函數(shù)必須在安裝鉤子的線程中。原因是:這兩個鉤子是用來監(jiān)控比較底層的硬件事件的,既然是記錄和回放,所有的事件就當(dāng)然都是有先后次序的。所以如果把回調(diào)函數(shù)放在DLL中,輸入的事件被放在幾個線程中記錄,所以我們無法保證得到正確的次序。故解決的辦法是:把鉤子函數(shù)放到單個的線程中,譬如安裝鉤子的線程。

        鉤子一共有14種,以下是它們被調(diào)用的時機(jī):

        WH_CALLWNDPROC 當(dāng)調(diào)用SendMessage時

        WH_CALLWNDPROCRET 當(dāng)SendMessage的調(diào)用返回時

        WH_GETMESSAGE 當(dāng)調(diào)用GetMessage 或 PeekMessage時

        WH_KEYBOARD 當(dāng)調(diào)用GetMessage 或 PeekMessage 來從消息隊(duì)列中查詢WM_KEYUP 或 WM_KEYDOWN 消息時

        WH_MOUSE 當(dāng)調(diào)用GetMessage 或 PeekMessage 來從消息隊(duì)列中查詢鼠標(biāo)事件消息時

        WH_HARDWARE 當(dāng)調(diào)用GetMessage 或 PeekMessage 來從消息隊(duì)列種查詢非鼠標(biāo)、鍵盤消息時

        WH_MSGFILTER 當(dāng)對話框、菜單或滾動條要處理一個消息時。該鉤子是局部的。它時為那些有自己的消息處理過程的控件對象設(shè)計(jì)的。

        WH_SYSMSGFILTER 和WH_MSGFILTER一樣,只不過是系統(tǒng)范圍的

        WH_JOURNALRECORD 當(dāng)WINDOWS從硬件隊(duì)列中獲得消息時

        WH_JOURNALPLAYBACK 當(dāng)一個事件從系統(tǒng)的硬件輸入隊(duì)列中被請求時

        WH_SHELL 當(dāng)關(guān)于WINDOWS外殼事件發(fā)生時,譬如任務(wù)條需要重畫它的按鈕.

        WH_CBT 當(dāng)基于計(jì)算機(jī)的訓(xùn)練(CBT)事件發(fā)生時

        WH_FOREGROUNDIDLE 由WINDOWS自己使用,一般的應(yīng)用程序很少使用

        WH_DEBUG 用來給鉤子函數(shù)除錯

        附:如何使用鉤子函數(shù)(接收到字母A按下時,窗體由最小化彈出的完整的代碼)

        Public Declare Function CallNextHookEx Lib "user32" _

        (ByVal hHook As Long, _

        ByVal nCode As Long, _

        ByVal wParam As Long, _

        ByVal lParam As Long) As Long

        Public Declare Function UnhookWindowsHookEx Lib "user32" _

        (ByVal hHook 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 Const WH_KEYBOARD = 2

        Public Const KEY_WINSTART = 91

        Public Const KEY_WINMENU = 93

        Global hHook As Long

        Public Function KeyboardProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

        If nCode = 0 Then

        If wParam = KEY_WINMENU Or wParam = KEY_WINSTART Then

        If (lParam And HC0000000) = 0 Then

        MsgBox "", , ""

        KeyboardProc = 1

        Exit Function

        End If

        End If

        End If

        KeyboardProc = CallNextHookEx(hHook, nCode, wParam, lParam)

        End Function

        Option Explicit

        Private Sub Command1_Click()

        form2.Show 1

        End Sub

        Private Sub form_Load()

        hHook = SetWindowsHookEx(WH_KEYBOARD, AddressOf KeyboardProc, 0, App.ThreadID)

        Me.Show

        End Sub

        Private Sub form_Unload(Cancel As Integer)

        Call UnhookWindowsHookEx(hHook)

        End Sub

        VB攔截message消息

        在Windows使用SetWindowsHookEx來實(shí)現(xiàn)hook(鉤子)。鉤子分類很多,其中消息鉤子可以獲取對象所接受大部分Message消息。不管是消息鉤子或鍵盤鉤子或其他鉤子,安裝鉤子的SetWindowsHookEx函數(shù)需要一個回調(diào)函數(shù)指針。Windows收到某個消息以后確認(rèn)并且發(fā)送應(yīng)用程序前通知我們的回調(diào)函數(shù)。

        鉤子有兩種

        1)全局鉤子,也就是說我們的程序可以攔截所有外部程序收的的消息。

        2)非全局鉤子,攔截當(dāng)前進(jìn)程所收到的消息。

        為了實(shí)現(xiàn)全局鉤子,回調(diào)函數(shù)必須在DLL中。好像用VB不能編寫真正的動態(tài)鏈接庫。

        以下是簡單代碼:'Option Explicit

        'uses

        ' Windows, Messages, SysUtils, TlHelp32;

        'Delphi 中一些頭引用,相當(dāng)于C++的 *.h

        '鍵盤HOOK類型

        Private Type tagKBDLLHOOKSTRUCT

        vkCode As Long

        scanCode As Long

        flags As Long

        time As Long

        dwExtraInfo As Long

        End Type'定義API函數(shù)指針,VB不支持該定義

        'RegSerProc=Function(dwProcessID,dwType:Integer):Integer;stdcall;Const WH_KEYBOARD_LL = 13

        Const WH_MOUSE_LL = 14

        '鉤子消息及指針

        Private lpMsg As TagMsg

        Private lpHook As Long

        '動態(tài)調(diào)用DLL函數(shù)指針

        Private hDll As Long

        'VB不支持該定義

        'RegPointer:POINTER;

        'RegServiceProc:RegSerProc;

        '版本

        Private OsInfo As OSVERSIONINFO

        'QQ窗口的一些句柄

        Private buf_hWnd As Long '前臺窗口句柄

        Private CheckBuf_hWnd As Long '判斷是否還是前臺窗口句柄

        Private RichChat_hWnd As Long 'RichEdit20A句柄

        Private CheckPaste As Long '判斷是否在進(jìn)行粘貼

        '定時執(zhí)行程序

        Sub TimerWork()

        MessageBox 0, "一個消息", "哈哈", 64

        End Sub'粘貼代碼

        Sub PasteMsg()

        Dim hMem As Long

        Dim pStr() As Byte

        Dim S As String

        S = vbCrLf + vbCrLf + "恭喜你,你已經(jīng)中招了!哈哈"

        hMem = GlobalAlloc(GHND Or GMEM_SHARE, (LenB(S) * 2) + 4)

        pStr = GlobalLock(hMem)

        lstrcpy pStr(0), S

        GlobalUnLock hMem

        OpenClipboard 0

        EmptyClipboard

        SetClipboardData CF_TEXT, hMem

        CloseClipboard

        GlobalFree hMem

        '發(fā)送WM_PASTE對QQ2006 and 2007 已經(jīng)不起作用

        'PostMessage(lphWnd,WM_PASTE,0,0);

        CheckPaste = True

        keybd_event VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), 0, 0

        keybd_event Ord("V"), MapVirtualKey(Ord("V"), 0), 0, 0

        keybd_event Ord("V"), MapVirtualKey(Ord("V"), 0), KEYEVENTF_KEYUP, 0

        keybd_event VK_CONTROL, MapVirtualKey(VK_CONTROL, 0), KEYEVENTF_KEYUP, 0

        CheckPaste = False

        End Sub

        'Enum窗口

        Function EnumProc(ByVal hWnd As Long, ByVal lParam As Long) As Boolean

        Dim RichName As String, ParentName As String 'RichEdit20A,AfxWnd42類名

        Dim RichBuf As String * 255, ParentBuf As String * 255

        Dim ParenthWnd As Long

        '獲取父窗口,通過AfxWnd42進(jìn)行窗口查找

        ParenthWnd = GetParent(hWnd)

        GetClassName hWnd, RichBuf, 256

        RichName = Left(RichBuf, InStr(RichBuf, vbNullChar) - 1)

        If RichChat_hWnd 0 Then

        EnumProc = False

        Exit Function

        End If

        If LCase(RichName) = "richedit20a" Then

        '獲取父窗口類名

        If ParenthWnd 0 Then

        GetClassName ParenthWnd, ParentBuf, 256

        ParentName = Left(ParentBuf, InStr(ParentBuf, vbNullChar) - 1)

        End If

        '通過父窗口類名進(jìn)行比較,判斷是否為輸入窗口

        If LCase(ParentName) = "afxwnd42" Then

        PasteMsg

        RichChat_hWnd = hWnd

        EnumProc = False

        Exit Function

        End If

        End If

        '繼續(xù)查找子窗口

        EnumChildWindows hWnd, AddressOf EnumProc, 0

        EnumProc = True

        End Function'Hook代碼

        Function HookProc(ByVal nCode As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

        Dim qqBuf As String * 255

        Dim frmBuf As String * 255

        Dim frmName As String '窗口名稱

        Dim clsName As String '獲取類名

        Dim p As KBDLLHOOKSTRUCT '鍵盤按鍵指針類型

        If nCode = HC_ACTION Then

        If (wParam = WM_KEYDOWN) And (Not CheckPaste) Then begin

        'p:=PKBDLLHOOKSTRUCT(lParam);

        '此處應(yīng)該翻譯為以下:

        CopyMemory p, ByVal lParam, Len(p)

        '判斷是否Ctrl+V發(fā)送

        If (p.vkCode = VK_RETURN) And ((GetKeyState(VK_CONTROL) And H8000) 0) Then

        '獲取當(dāng)前前臺窗口

        buf_hWnd = GetForegroundWindow

        GetWindowText buf_hWnd, frmBuf, 256

        GetClassName buf_hWnd, qqBuf, 256

        frmName = Left(frmBuf, InStr(frmBuf, vbNullChar) - 1) '該地方只是一個處理而已

        clsName = Left(qqBuf, InStr(qqBuf, vbNullChar) - 1)

        '通過判斷是否還是當(dāng)前窗口,如果不是則執(zhí)行重復(fù)操作

        If (CheckBuf_hWnd buf_hWnd) Then CheckBuf_hWnd = buf_hWnd

        '查找QQ窗口

        If (InStr(clsName, "#32770") 0) And ((InStr(frmName, "聊天中") 0) Or (InStr(frmName, " 群") 0)) Then

        '重新初始化QQ編輯控件句柄

        If RichChat_hWnd 0 Then RichChat_hWnd = 0

        '遍歷子窗口進(jìn)行查找

        EnumChildWindowsmbuf_hWnd , AddressOf EnumProc, 0

        End If

        '如果是原來窗口,那么直接進(jìn)行處理操作

        ElseIf (InStr(clsName, "#32770") 0) And ((InStr(frmName, "聊天中") 0) Or (InStr(frmName, " 群") 0)) Then

        PasteMsg

        End If

        End If

        End If

        HookProc = CallNextHookEx(lpHook, nCode, wParam, lParam)

        End FunctionPublic Sub Main()

        '注冊鉤子時先判斷操作系統(tǒng)版本

        OsInfo.dwOSVersionInfoSize = Len(OsInfo)

        GetVersionEx OsInfo

        If OsInfo.dwPlatformId = VER_PLATFORM_WIN32_NT Then

        '如果是NT系統(tǒng)那么向系統(tǒng)注冊鉤子

        lpHook = SetWindowsHookEx(WH_KEYBOARD_LL, AddressOf HookProc, hInstance, 0)

        如果向系統(tǒng)注冊鉤子失敗

        If lpHook = 0 Then SetTimer 0, 0, 500, AddressOf TimerWork

        Else

        '向9x注冊系統(tǒng)服務(wù)

        hDll = LoadLibrary("kernel32.dll")

        RegPointer = GetProcAddress(hDll, "RegisterServiceProcess")

        If RegPointer 0 Then

        'VB不支持該指針,所以就不翻譯了

        'RegServiceProc:=RegSerProc(RegPointer);

        'RegServiceProc(GetCurrentProcessID,1);

        Else

        '如果沒有向9x注冊成功服務(wù)器,以Timer進(jìn)行操作

        SetTimer 0, 0, 500, AddressOf TimerWork

        End If

        End If

        '消息循環(huán),永駐內(nèi)存

        Do While GetMessage(lpMsg, 0, 0, 0)

        TranslateMessage lpMsg

        DispatchMessage lpMsg

        Loop

        End Sub

        vb.net編寫的程序屏蔽系統(tǒng)熱鍵

        使用VB.net編寫屏蔽熱鍵的方法有很多中,比如說使用系統(tǒng)的API函數(shù),也可以使用鉤子來進(jìn)行屏蔽.還有一種就是.net帶的一種方法,首先來判斷所按下去的鍵,然后再執(zhí)行操作等事件.比如說:if (e.keycode==keys.D){e.handle=true}在keydown事件里面處理!這樣就可以屏蔽了D鍵. 實(shí)例:if ((Control.ModifierKeys == Keys.Alt) (e.KeyCode == Keys.F4))

        {

        e.Handled = true;

        }還有一種辦法就是不通過屏蔽熱鍵來實(shí)現(xiàn),就是通過設(shè)置焦點(diǎn).你可以把你程序窗口設(shè)置為主焦點(diǎn),這樣其他程序一般就無法在你的程序前面了.實(shí)現(xiàn)屏蔽的作用.至于任務(wù)管理器的話可以通過殺掉進(jìn)程的辦法做到.如下: Process[] p = Process.GetProcesses(); foreach (Process p1 in p)

        {

        try

        {

        if (p1.ProcessName.ToLower().Trim() == "taskmgr")//這里判斷是任務(wù)管理器

        {

        p1.Kill();

        return;

        }

        }

        catch

        {

        return;

        }

        }}以上是使用C#編寫的,稍微改下就可以了,在,NET里面都差不多!

        網(wǎng)站欄目:vb.net外部鉤子的簡單介紹
        當(dāng)前URL:http://www.jbt999.com/article12/phjsdc.html

        成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供企業(yè)建站、品牌網(wǎng)站制作、做網(wǎng)站外貿(mào)建站、靜態(tài)網(wǎng)站、虛擬主機(jī)

        廣告

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

        成都定制網(wǎng)站建設(shè)

      2. 
        

          <address id="upfr9"><pre id="upfr9"><strike id="upfr9"></strike></pre></address>
          1. <address id="upfr9"><tr id="upfr9"></tr></address><dl id="upfr9"></dl>
            日本A黄色大片在线看免费在线看 | 在线观看av的网站 | 国产视频swag | 欧美高清无码 在线观看 | 日韩三级免费观看 | 欧美日本高清视频 | 午夜第一页 | 欧美日韩亚洲不卡 | 淫色视频在线观看 | 黄色性视频网站 |