免费高清特黄a大片,九一h片在线免费看,a免费国产一级特黄aa大,国产精品国产主播在线观看,成人精品一区久久久久,一级特黄aa大片,俄罗斯无遮挡一级毛片

分享

用VB6編寫強(qiáng)力的windows隱藏引擎

 玉雪龍山999 2012-02-14

用VB6編寫強(qiáng)力的windows隱藏引擎

發(fā)布時(shí)間:2008-04-03 10:45:54  來源:編程愛好者網(wǎng)站  作者:編程愛好者網(wǎng)站  點(diǎn)擊:229

編程愛好者一定經(jīng)常見到能夠隱藏桌面項(xiàng)目和狀態(tài)欄等的軟件,其中最著名的就是Hide-It。其實(shí)我們能夠編寫一個(gè)功能更加強(qiáng)大的即時(shí)超級(jí)隱藏引擎,它不僅可以隱藏桌面項(xiàng)目、開始按鈕、狀態(tài)欄、時(shí)鐘欄,而且可以隱藏任何軟件的按鈕、菜單、工具欄、文本框、狀態(tài)欄等等,只要是能夠看見的獨(dú)立部分??當(dāng)然也可以輕松的將它們恢復(fù)出來。操作更是方便到了點(diǎn)擊“開始隱藏”按鈕,然后將鼠標(biāo)放到需要隱藏的項(xiàng)目上,按下F12鍵即可??點(diǎn)哪就隱藏哪??這也是我稱之為“隱藏引擎”的原因。

  一、編程原理

 ?。?)WINDOWS API函數(shù)ShowWindow可以實(shí)現(xiàn)對(duì)程序界面(包括WINDOWSArrayX和其他應(yīng)用軟件)以及子項(xiàng)目的顯示控制,通過調(diào)用相關(guān)消息常數(shù)SW_HIDE = 0(隱藏)和SW_SHOW = 5(顯示)就可以執(zhí)行對(duì)指定界面項(xiàng)目的隱藏和重新顯示出來。它所需要的另外一個(gè)參數(shù)是被隱藏項(xiàng)目的句柄;

  (2)GetCursorPos函數(shù)能夠返回當(dāng)前鼠標(biāo)所在位置的屏幕坐標(biāo),而函數(shù)WindowFromPointXY恰好能夠根據(jù)屏幕坐標(biāo)返回該位置的窗體項(xiàng)目句柄??這正是我們所需要的!

 ?。?)為了方便操作,我們需要為它注冊(cè)一個(gè)系統(tǒng)級(jí)工作(激活)熱鍵,我選擇了F12;SetWindowLong、GetWindowLong、CallWindowProc、RegisterHotKey、UnregisterHotKey是五個(gè)必須的熱鍵注冊(cè)、反注冊(cè)函數(shù);使用它們一定要小心謹(jǐn)慎,否則可能會(huì)導(dǎo)致開發(fā)平臺(tái)的暫時(shí)崩潰,你不得不看到“該程序執(zhí)行了非法操作,即將被關(guān)閉”的警示窗口,而且你的工作成果會(huì)立即化為烏有;但是如果你按照本文的編寫方法,保你“一路平安”;

 ?。?)為了方便“記憶力”不好的朋友,我們需要一個(gè)列表框來顯示已經(jīng)被隱藏的項(xiàng)目的句柄,以便能夠適當(dāng)、必要的提醒。
  二、編程實(shí)踐

  (1)啟動(dòng)vb6,建立一個(gè)標(biāo)準(zhǔn)exe工程,添加一個(gè)窗體CHINAHIDE,添加四個(gè)command控件hideOK對(duì)應(yīng)“開始隱藏”、unhide對(duì)應(yīng)“恢復(fù)一個(gè)”、uNhideall對(duì)應(yīng)“全部恢復(fù)”;添加listbox控件list1(用來紀(jì)錄句柄);兩個(gè)標(biāo)簽控件用來顯示有關(guān)提示信息。調(diào)整上述控件到適當(dāng)位置和合適大小,雙擊窗體,寫入以下代碼:

Dim LasthWnd As Integer ’被隱藏項(xiàng)目句柄

Private Sub Form_Load()
 ’程序啟動(dòng)時(shí)注冊(cè)功能熱鍵F12
 preWinProc = GetWindowLong(Me.hwnd, GWL_WNDPROC)
 SetWindowLong Me.hwnd, GWL_WNDPROC, AddressOf Wndproc
 uVirtKey = vbKeyF12
 RegisterHotKey Me.hwnd, 1, Modifiers, uVirtKey
End Sub

Private Sub uNhideall_Click()
 ’恢復(fù)所有被隱藏項(xiàng)目
 For res = 0 To List1.ListCount - 1
  LasthWnd = List1.List(res)
  ShowWindow LasthWnd, SW_SHOW
 Next res
 List1.Clear
 ’清空句柄列表框
End Sub

Public Sub hideOK_Click()
 ’當(dāng)"開始隱藏"按鈕被點(diǎn)擊時(shí),將窗口最小化
 Me.WindowState = 1
End Sub

Private Sub UNHIDE_Click()
 ’恢復(fù)一個(gè)選定的被隱藏項(xiàng)目
 If List1.ListIndex < 0 Then
  MsgBox "請(qǐng)首先選擇一個(gè)被恢復(fù)的隱藏項(xiàng)目!", vbExclamation
  Exit Sub
 End If’驗(yàn)證句柄列表欄目是否已經(jīng)被選中
 hideINDEX = List1.ListIndex
 LasthWnd = List1.List(hideINDEX)
 X = ShowWindow(LasthWnd, SW_SHOW)
 ’恢復(fù)選定的被隱藏項(xiàng)目
 List1.RemoveItem (hideINDEX)
 ’移除該項(xiàng)目有關(guān)信息
End Sub

Private Sub Form_Unload(Cancel As Integer)
 ’當(dāng)程序被關(guān)閉時(shí),取消已經(jīng)注冊(cè)的熱鍵
 SetWindowLong Me.hwnd, GWL_WNDPROC, preWinProc
 UnregisterHotKey Me.hwnd, uVirtKey
 ’取消系統(tǒng)級(jí)熱鍵,釋放資源
 End’終止程序運(yùn)行
End Sub
 ’主窗體代碼結(jié)束


 ?。?)添加一個(gè)標(biāo)準(zhǔn)模塊,命名為MOULDLE1,寫入以下代碼:

Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
’在窗口結(jié)構(gòu)中為指定的窗口設(shè)置信息

Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
’從指定窗口的結(jié)構(gòu)中取得信息

Public Declare Function CallWindowProc Lib "user32" Alias "CallWindowProcA" (ByVal lpPrevWndFunc As Long, ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
’運(yùn)行指定的進(jìn)程

Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal ID As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
’向系統(tǒng)注冊(cè)一個(gè)指定的熱鍵

Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal ID As Long) As Long
’取消熱鍵并釋放占用的資源
’上述五個(gè)API函數(shù)是注冊(cè)系統(tǒng)級(jí)熱鍵所必需的,具體實(shí)現(xiàn)過程如后文所示

Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
’本函數(shù)是實(shí)現(xiàn)隱藏的核心,參數(shù)HWND既是需要隱藏項(xiàng)目的句柄
’nCmdShow參數(shù)可以決定使隱藏還是顯示

Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
’本函數(shù)得到當(dāng)前鼠標(biāo)所在位置的屏幕坐標(biāo)

Public Declare Function WindowFromPointXY Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
’本函數(shù)根據(jù)屏幕坐標(biāo)返回被隱藏項(xiàng)目的句柄

Public Type POINTAPI
 X As Long
 Y As Long
End Type’鼠標(biāo)坐標(biāo)類型定義

Public Const SW_HIDE = 0’隱藏常數(shù)
Public Const SW_SHOW = 5’顯示常數(shù)

Public Const WM_HOTKEY = &H312
 ’熱鍵標(biāo)志常數(shù),用來判斷當(dāng)鍵盤按鍵被按下時(shí)是否命中了我們?cè)O(shè)定的熱鍵
Public Const GWL_WNDPROC = (-4)

Public preWinProc As Long, MyhWnd As Long,uVirtKey As Long
 ’定義系統(tǒng)的熱鍵,原中斷標(biāo)示,被隱藏的項(xiàng)目句柄
 ’請(qǐng)緊記下面的熱鍵攔截函數(shù),它將對(duì)你將來編寫WINDOWS32高級(jí)控制程序大有幫助!
Public Function Wndproc(ByVal hwnd As Long, ByVal Msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
’熱鍵攔截過程
 If Msg = WM_HOTKEY Then’如果攔截到熱鍵標(biāo)志常數(shù)
  If wParam = 1 Then
   ’如果是我們的定義的熱鍵F12...
   ’為了節(jié)省篇幅,我對(duì)熱鍵攔截處理不是非常嚴(yán)密...
   hideDONE
   ’執(zhí)行隱藏鼠標(biāo)所指項(xiàng)目
  End If
  End If
  ’如果不是熱鍵,或者不是我們?cè)O(shè)置的熱鍵,交還控制權(quán)給
  ’系統(tǒng),繼續(xù)監(jiān)測(cè)熱鍵
  Wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End Function

Public Sub hideDONE()’最關(guān)鍵的項(xiàng)目隱藏過程
Public Sub hideDONE()
Dim pt32 As POINTAPI
GetCursorPos pt32 ’’得到鼠標(biāo)屏幕坐標(biāo)
MyhWnd = WindowFromPointXY(pt32.X, pt32.Y)
’’得到所在位置窗體項(xiàng)目句柄
If MyhWnd = Chinahide.hwnd Then Exit Sub
’拒絕隱藏程序自身
Chinahide.List1.AddItem (MyhWnd)
’’添加相關(guān)信息
ShowWindow MyhWnd, SW_HIDE
’執(zhí)行隱藏功能
End Sub
‘模塊結(jié)束
 
  本文代碼不僅將向編程愛好者展示“隱藏引擎”的魅力,也將讓您立刻成為一個(gè)后臺(tái)控制和系統(tǒng)級(jí)熱鍵的編程高手。它適用于windowsArray5/Array8/nt4/me/2000,vb5/6開發(fā)平臺(tái)。

  看到這里,你一定會(huì)想到能夠?qū)⑺鼞?yīng)用到哪里了吧(譬如加個(gè)密碼就可以保護(hù)你的桌面!)??心動(dòng)不如行動(dòng),DO IT BY YOUSELF!

    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多