转至繁体中文版     | 网站首页 | 图文教程 | 资源下载 | 站长博客 | 图片素材 | 武汉seo | 武汉网站优化 | 
最新公告:     敏韬网|教学资源学习资料永久免费分享站!  [mintao  2008年9月2日]        
您现在的位置: 学习笔记 >> 图文教程 >> 软件开发 >> VB.NET程序 >> 正文
Visual Basic6.0设计强力Windows隐藏引擎         ★★★★

Visual Basic6.0设计强力Windows隐藏引擎

作者:闵涛 文章来源:闵涛的学习笔记 点击数:904 更新时间:2009/4/23 14:59:44
  编程爱好者一定经常见到能够隐藏桌面项目和状态栏等的软件,其中最著名的就是Hide-It。其实我们能够编写一个功能更加强大的即时超级隐藏引擎,它不仅可以隐藏桌面项目、开始按钮、状态栏、时钟栏,而且可以隐藏任何软件的按钮、菜单、工具栏、文本框、状态栏等等,只要是能够看见的独立部分——当然也可以轻松的将它们恢复出来。操作更是方便到了点击“开始隐藏”按钮,然后将鼠标放到需要隐藏的项目上,按下F12键即可——点哪就隐藏哪——这也是我称之为“隐藏引擎”的原因。

  一、编程原理

  (1)WINDOWS API函数ShowWindow可以实现对程序界面(包括WINDOWS9X和其他应用软件)以及子项目的显示控制,通过调用相关消息常数SW_HIDE = 0(隐藏)和SW_SHOW = 5(显示)就可以执行对指定界面项目的隐藏和重新显示出来。它所需要的另外一个参数是被隐藏项目的句柄;

  (2)GetCursorPos函数能够返回当前鼠标所在位置的屏幕坐标,而函数WindowFromPointXY恰好能够根据屏幕坐标返回该位置的窗体项目句柄。

  (3)为了方便操作,我们需要为它注册一个系统级工作(激活)热键,我选择了F12;SetWindowLong、GetWindowLong、CallWindowProc、RegisterHotKey、UnregisterHotKey是五个必须的热键注册、反注册函数;使用它们一定要小心谨慎,否则可能会导致开发平台的暂时崩溃,你不得不看到“该程序执行了非法操作,即将被关闭”的警示窗口,而且你的工作成果会立即化为乌有;但是如果你按照本文的编写方法,保你“一路平安”;

  (4)为了方便“记忆力”不好的朋友,我们需要一个列表框来显示已经被隐藏的项目的句柄,以便能够适当、必要的提醒。

  二、编程实践

  (1)启动VB6,建立一个标准exe工程,添加一个窗体CHINAHIDE,添加四个Command控件hideOK对应“开始隐藏”、unhide对应“恢复一个”、uNhideall对应“全部恢复”;添加listbox控件list1(用来纪录句柄);两个标签控件用来显示有关提示信息。调整上述控件到适当位置和合适大小,双击窗体,写入以下代码:

Dim LasthWnd As Integer 注释:被隐藏项目句柄

Private Sub Form_Load()
 注释:程序启动时注册功能热键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()
 注释:恢复所有被隐藏项目
 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()
 注释:当"开始隐藏"按钮被点击时,将窗口最小化
 Me.WindowState = 1
End Sub

Private Sub UNHIDE_Click()
 注释:恢复一个选定的被隐藏项目
 If List1.ListIndex < 0 Then
  MsgBox "请首先选择一个被恢复的隐藏项目!", vbExclamation
  Exit Sub
 End If注释:验证句柄列表栏目是否已经被选中
 hideINDEX = List1.ListIndex
 LasthWnd = List1.List(hideINDEX)
 X = ShowWindow(LasthWnd, SW_SHOW)
 注释:恢复选定的被隐藏项目
 List1.RemoveItem (hideINDEX)
 注释:移除该项目有关信息
End Sub

Private Sub Form_Unload(Cancel As Integer)
 注释:当程序被关闭时,取消已经注册的热键
 SetWindowLong Me.hwnd, GWL_WNDPROC, preWinProc
 UnregisterHotKey Me.hwnd, uVirtKey
 注释:取消系统级热键,释放资源
 End注释:终止程序运行
End Sub
 注释:主窗体代码结束


  (2)添加一个标准模块,命名为MOULDLE1,写入以下代码:

Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
注释:在窗口结构中为指定的窗口设置信息

Public Declare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long) As Long
注释:从指定窗口的结构中取得信息

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
注释:运行指定的进程

Public Declare Function RegisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal ID As Long, ByVal fsModifiers As Long, ByVal vk As Long) As Long
注释:向系统注册一个指定的热键

Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal ID As Long) As Long
注释:取消热键并释放占用的资源
注释:上述五个API函数是注册系统级热键所必需的,具体实现过程如后文所示

Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long
注释:本函数是实现隐藏的核心,参数HWND既是需要隐藏项目的句柄
注释:nCmdShow参数可以决定使隐藏还是显示

Public Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
注释:本函数得到当前鼠标所在位置的屏幕坐标

Public Declare Function WindowFromPointXY Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
注释:本函数根据屏幕坐标返回被隐藏项目的句柄

Public Type POINTAPI
 X As Long
 Y As Long
End Type注释:鼠标坐标类型定义

Public Const SW_HIDE = 0 注释:隐藏常数
Public Const SW_SHOW = 5 注释:显示常数

Public Const WM_HOTKEY = &H312
 注释:热键标志常数,用来判断当键盘按键被按下时是否命中了我们设定的热键
Public Const GWL_WNDPROC = (-4)

Public preWinProc As Long, MyhWnd As Long,uVirtKey As Long
 注释:定义系统的热键,原中断标示,被隐藏的项目句柄
 注释:请紧记下面的热键拦截函数,它将对你将来编写WINDOWS32高级控制程序大有帮助!
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注释:如果拦截到热键标志常数
  If wParam = 1 Then
   注释:如果是我们的定义的热键F12...
   注释:为了节省篇幅,我对热键拦截处理不是非常严密...
   hideDONE
   注释:执行隐藏鼠标所指项目
  End If
 End If
  注释:如果不是热键,或者不是我们设置的热键,交还控制权给
  注释:系统,继续监测热键
 Wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End Function

Public Sub hideDONE()注释:最关键的项目隐藏过程
Public Sub hideDONE()
Dim pt32 As POINTAPI
GetCursorPos pt32 注释:注释:得到鼠标屏幕坐标
MyhWnd = WindowFromPointXY(pt32.X, pt32.Y)
注释:注释:得到所在位置窗体项目句柄
If MyhWnd = Chinahide.hwnd Then Exit Sub
 注释:拒绝隐藏程序自身
 Chinahide.List1.AddItem (MyhWnd)
 注释:注释:添加相关信息
 ShowWindow MyhWnd, SW_HIDE
 注释:执行隐藏功能
End Sub
‘模块结束
 
  本文代码不仅将向编程爱好者展示“隐藏引擎”的魅力,也将让您立刻成为一个后台控制和系统级热键的编程高手。它适用于windows95/98/nt4/me/2000,vb5/6开发平台。


[系统软件]Visual Studio 2005 Express Beta Products 下载链…  [系统软件]Visual FoxPro9.0中扩展报表系统功能
[系统软件]Visual FoxPro:我是旁观者  [系统软件]Visual Studio 2005 Express Editions Beta 2 下载…
[系统软件]Boost库在XP+Visual C++.net中的安装  [系统软件]Visual Studio 2005 Express Edition 正式版下载地…
[常用软件]Visual Foxpro通用报表打印程序  [常用软件]Visual FoxPro 6.0与大型数据库的无数据源连接
[常用软件]Visual Foxpro 的一个BUG  [VB.NET程序]Visual Basic 6 逆向工程与反逆向工程 (2)
教程录入:mintao    责任编辑:mintao 
  • 上一篇教程:

  • 下一篇教程:
  • 【字体: 】【发表评论】【加入收藏】【告诉好友】【打印此文】【关闭窗口
      注:本站部分文章源于互联网,版权归原作者所有!如有侵权,请原作者与本站联系,本站将立即删除! 本站文章除特别注明外均可转载,但需注明出处! [MinTao学以致用网]
      网友评论:(只显示最新10条。评论内容只代表网友观点,与本站立场无关!)

    同类栏目
    · C语言系列  · VB.NET程序
    · JAVA开发  · Delphi程序
    · 脚本语言
    更多内容
    热门推荐 更多内容
  • 没有教程
  • 赞助链接
    更多内容
    闵涛博文 更多关于武汉SEO的内容
    500 - 内部服务器错误。

    500 - 内部服务器错误。

    您查找的资源存在问题,因而无法显示。

    | 设为首页 |加入收藏 | 联系站长 | 友情链接 | 版权申明 | 广告服务
    MinTao学以致用网

    Copyright @ 2007-2012 敏韬网(敏而好学,文韬武略--MinTao.Net)(学习笔记) Inc All Rights Reserved.
    闵涛 投放广告、内容合作请Q我! E_mail:admin@mintao.net(欢迎提供学习资源)

    站长:MinTao ICP备案号:鄂ICP备11006601号-18

    闵涛站盟:医药大全-武穴网A打造BCD……
    咸宁网络警察报警平台