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

2016-02-19 19:23 10 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是五个必须的热键注册、反注册函数;使用它们一定要小心谨慎,否则可能会导致开发平台的暂时崩溃,你不得不看到“该程序执行了非法操作,即将被关闭”的警示窗口,而且你的工作成果会立即化为乌有;但是如果你按照本文的编写方法,保你“一路平安”;

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

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

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

  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
  '本函数得到当前鼠标所在位置的屏幕坐标

  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开发平台。

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

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

->

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

延伸阅读
在VB6的报表使用过程中,我们会发现这样的一个问题,那就是报表中的数据只能读一次,不管你的库中字段增加也好,删除也好,以及让它显示新的查询结果等,它都不会记变。经过查资料才搞清楚,原来是DataEnvironment的问题.原来,只要Command对象中含有数据记录集合,它就不会重新执行SQL语句,就算是把新的查询语句给DataEnvironment后它也不会执行,解决...
小弟用VB6.0编制了一个小程序,使用win32的关于internet 的API来下载文件。程序用户界面如下 本程序包括两个文件 frmDownLoad.frm (主窗体)和clsCount.cls(计算下载速度的类模块) 大家建立一个简单的VB应用程序项目,将两个文件加入项目即可 我觉得clsCount.cls有问题,望有心人查查 '##################################################...
嘿嘿,看到这个题目,想必吓了一大跳吧,或者是摆出一副不相信的表情?不用着急,请听我慢慢道来。 话说这个VB6,很是无耻,居然内置了支持Unicode的功能,也就是说,当你读入一个字符串时,它根据本地缺省语言的对应关系将之转换为Unicode,输出时,再从Unicode转换为本地编码。一方面,它当然方便啦,随便出个什么语言的版本都好方便的,...
在VB程序中经常会用到背景色彩(backcolor)和前景色彩(forecolor)来设置颜色,除了调出调色板直接选用相应的颜色外,在代码中我们也经常根据程序需要而改变其色彩的设置。学过VB的人都知道有两个函数来表示颜色,一个是QBCOLOR(),一个是RGB(R,G,B)。前者只能生成16种色彩,而后者可用来设置更加丰富多彩的颜色,但参数设置却很难掌握。怎...
'' Q B a s i c N i b b l e s'' Copyright (C) Microsoft Corporation 1990'' Nibbles is a game for one or two players. Navigate your snakes' around the game board trying to eat up numbers while avoiding' running into walls or other snakes....

经验教程

546

收藏

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