用VB6编写强力的windows隐藏引擎

2016-02-19 19:23 16 1 收藏

只要你有一台电脑或者手机,都能关注图老师为大家精心推荐的用VB6编写强力的windows隐藏引擎,手机电脑控们准备好了吗?一起看过来吧!

【 tulaoshi.com - 编程语言 】

用VB6编写强力的windows隐藏引擎

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

  一、编程原理

  (1)WINDOWSAPI函数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(用来纪录句柄);两个标签控件用来显示有关提示信息。调整上述控件到适当位置和合适大小,双击窗体,写入以下代码:

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  DimLasthWndAsInteger'被隐藏项目句柄

  PrivateSubForm_Load()
   '程序启动时注册功能热键F12
   preWinProc=GetWindowLong(Me.hwnd,GWL_WNDPROC)
   SetWindowLongMe.hwnd,GWL_WNDPROC,AddressOfWndproc
   uVirtKey=vbKeyF12
   RegisterHotKeyMe.hwnd,1,Modifiers,uVirtKey
  EndSub

  PrivateSubuNhideall_Click()
   '恢复所有被隐藏项目
   Forres=0ToList1.ListCount-1
  LasthWnd=List1.List(res)
  ShowWindowLasthWnd,SW_SHOW
   Nextres
   List1.Clear
   '清空句柄列表框
  EndSub

  PublicSubhideOK_Click()
   '当"开始隐藏"按钮被点击时,将窗口最小化
   Me.WindowState=1
  EndSub

  PrivateSubUNHIDE_Click()
   '恢复一个选定的被隐藏项目
   IfList1.ListIndex0Then
  MsgBox"请首先选择一个被恢复的隐藏项目!",vbExclamation
  ExitSub
   EndIf'验证句柄列表栏目是否已经被选中
   hideINDEX=List1.ListIndex
   LasthWnd=List1.List(hideINDEX)
   X=ShowWindow(LasthWnd,SW_SHOW)
   '恢复选定的被隐藏项目
   List1.RemoveItem(hideINDEX)
   '移除该项目有关信息
  EndSub

  PrivateSubForm_Unload(CancelAsInteger)
   '当程序被关闭时,取消已经注册的热键
   SetWindowLongMe.hwnd,GWL_WNDPROC,preWinProc
   UnregisterHotKeyMe.hwnd,uVirtKey
   '取消系统级热键,释放资源
   End'终止程序运行
  EndSub
   '主窗体代码结束
  

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

  PublicDeclareFunctionSetWindowLongLib"user32"Alias"SetWindowLongA"(ByValhwndAsLong,ByValnIndexAsLong,ByValdwNewLongAsLong)AsLong
  '在窗口结构中为指定的窗口设置信息

  PublicDeclareFunctionGetWindowLongLib"user32"Alias"GetWindowLongA"(ByValhwndAsLong,ByValnIndexAsLong)AsLong
  '从指定窗口的结构中取得信息

  PublicDeclareFunctionCallWindowProcLib"user32"Alias"CallWindowProcA"(ByVallpPrevWndFuncAsLong,ByValhwndAsLong,ByValMsgAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLong
  '运行指定的进程

  PublicDeclareFunctionRegisterHotKeyLib"user32"(ByValhwndAsLong,ByValIDAsLong,ByValfsModifiersAsLong,ByValvkAsLong)AsLong
  '向系统注册一个指定的热键

  PublicDeclareFunctionUnregisterHotKeyLib"user32"(ByValhwndAsLong,ByValIDAsLong)AsLong
  '取消热键并释放占用的资源
  '上述五个API函数是注册系统级热键所必需的,具体实现过程如后文所示

  PublicDeclareFunctionShowWindowLib"user32"(ByValhwndAsLong,ByValnCmdShowAsLong)AsLong
  '本函数是实现隐藏的核心,参数HWND既是需要隐藏项目的句柄
  'nCmdShow参数可以决定使隐藏还是显示

  PublicDeclareFunctionGetCursorPosLib"user32"(lpPointAsPOINTAPI)AsLong
  '本函数得到当前鼠标所在位置的屏幕坐标

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  PublicDeclareFunctionWindowFromPointXYLib"user32"Alias"WindowFromPoint"(ByValxPointAsLong,ByValyPointAsLong)AsLong
  '本函数根据屏幕坐标返回被隐藏项目的句柄

  PublicTypePOINTAPI
   XAsLong
   YAsLong
  EndType'鼠标坐标类型定义

  PublicConstSW_HIDE=0'隐藏常数
  PublicConstSW_SHOW=5'显示常数

  PublicConstWM_HOTKEY=&H312
   '热键标志常数,用来判断当键盘按键被按下时是否命中了我们设定的热键
  PublicConstGWL_WNDPROC=(-4)

  PublicpreWinProcAsLong,MyhWndAsLong,uVirtKeyAsLong
   '定义系统的热键,原中断标示,被隐藏的项目句柄
   '请紧记下面的热键拦截函数,它将对你将来编写WINDOWS32高级控制程序大有帮助!
  PublicFunctionWndproc(ByValhwndAsLong,ByValMsgAsLong,ByValwParamAsLong,ByVallParamAsLong)AsLong
  '热键拦截过程
   IfMsg=WM_HOTKEYThen'如果拦截到热键标志常数
  IfwParam=1Then
   '如果是我们的定义的热键F12...
   '为了节省篇幅,我对热键拦截处理不是非常严密...
   hideDONE
   '执行隐藏鼠标所指项目
  EndIf
  EndIf
  '如果不是热键,或者不是我们设置的热键,交还控制权给
  '系统,继续监测热键
  Wndproc=CallWindowProc(preWinProc,hwnd,Msg,wParam,lParam)
  EndFunction

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

  看到这里,你一定会想到能够将它应用到哪里了吧(譬如加个密码就可以保护你的桌面!)——心动不如行动,DOITBYYOUSELF!

->

来源:http://www.tulaoshi.com/n/20160219/1620891.html

延伸阅读
嘿嘿,看到这个题目,想必吓了一大跳吧,或者是摆出一副不相信的表情?不用着急,请听我慢慢道来。 话说这个VB6,很是无耻,居然内置了支持Unicode的功能,也就是说,当你读入一个字符串时,它根据本地缺省语言的对应关系将之转换为Unicode,输出时,再从Unicode转换为本地编码。一方面,它当然方便啦,随便出个什么语言的版本都好方便的,...
在VB6的报表使用过程中,我们会发现这样的一个问题,那就是报表中的数据只能读一次,不管你的库中字段增加也好,删除也好,以及让它显示新的查询结果等,它都不会记变。经过查资料才搞清楚,原来是DataEnvironment的问题.原来,只要Command对象中含有数据记录集合,它就不会重新执行SQL语句,就算是把新的查询语句给DataEnvironment后它也不会执行,解决...
标签: ASP
  接着上回,新建一个ActiveX DLLs类型的工程,并将缺省的工程名由“Project1”改为“Songbird”(当然你也有权不这样改,呵呵),将缺省的类名由“Class1”改为“FileUp”,至于为什么要这样改,以后你便知道了。     要想实现读取上传文件字节数据的功能,势必要涉及到Request对象,可是在VB中该怎么做呢?简单,只...
标签: ASP
  最近在单位做的一个项目里需要有文件上传的功能,正好手头一本书的附赠光盘里有一个上传组件,心中大喜。可惜随之便发现这是一个试用版,不给钱就只能用50次,太小气了!!好在头头催得不紧,时间充裕,干脆自己试着做一个,既可长经验值,又能长成就感,不试白不试!以下介绍的便是俺折腾了两天半捣鼓出来的一个只能说是雏形的玩意,区...
  和.Net 中不同,VB6 中默认是使用 ByRef 来传递参数了,看来似乎没有什么可以优化得地方。 可是,实际上 如果你调用 API 得话,从 API浏览器复制下来得代码却是 强制使用 ByVal 传参得 这就给了我们优化得机会。 我又重新使用该代码 分别测试了一下 ByRef ,ByVal 得区别,结果很振奋: ByRef 比 ByVal 提高了16倍 代码如下,插入Comb...

经验教程

877

收藏

89
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部