VB6实现对Windows消息的拦截

合集下载

拦截Windows消息

拦截Windows消息
息相对应的执行函数的指针。
具体做法为:
菜单响应时消息类型为WM_COMMAND,16进制为0111H。其值的获得参
看《MADN Library Visual Studio 6.0》中WM_COMMAND的QuickInfo所指的Winuser.h。
语言编写其消息响应路线相对于这个程序是不变的。所谓水涨船高既是此道理~!~怎么有点像
AutoCAD画图使用基准点后,以基准点为中心狂画参考线呀!!!呵呵,又想到一点有时我们也要机
动灵活别闹出刻舟求剑的笑话就行!嘿嘿
.
.
.
4. 在OllyDbg或IDA中载入要分析的程序并在已知响应函数入口地址点设置断点,运行载入程序。
在载入程序中进行相应操作后来到前面设置的断点上,查看[ESP]中的值或"运行直到返回"都可看
:bpx k23thk1632prolog
:g
:bc*
:g ret
一般都会来到如下程序处:
可看到WM_COMMAND的常量定义或使用SoftIce的"WMSG WM_COMMAND"查看其定义的值(这
管保好使~!~)。
2. 利用资源探测器Resscope查到这个菜单项ID,将其转换为16进制(可利用Resscope将
所有菜单项ID都列出并制作成Excel表格,为什么? ~!~好好想想)
---------------
#define ID_PROJECT_OPENND 00H 7DD3H 7DD3H 0CH 004508A0H
| |
我们关心的位置处!!
5)在我们找寻拦截断点时是否有规律可循呢?
现在我们一步一步来看如何解决上述5难题,给后来者提供一个可参考的路标,让他们顺利

vb api 处理windows 消息 范例

vb api 处理windows 消息 范例

vb api处理windows消息范例详解
在VB(Visual Basic)中,处理Windows消息通常涉及到使用Windows API函数。

这些函数允许你的应用程序与操作系统进行交互,响应各种事件,如用户输入、系统事件等。

下面是一个简单的示例,演示了如何使用Windows API来处理Windows 消息。

首先,你需要导入Windows API函数。

你可以通过在你的代码文件的顶部添加以下语句来导入user32.dll中的PeekMessage函数:
然后,你可以使用以下代码来处理Windows消息:
在这个示例中,我们创建了一个Form1类,它重写了WndProc方法以处理Windows 消息。

我们使用PeekMessage函数来检查消息队列中是否有消息。

如果有消息,我们将其从队列中取出并处理它。

我们通过TranslateMessage方法来翻译消息(例如,将键盘按键转换为字符),并通过DispatchMessage方法来分派消息(例如,如果消息是退出消息,我们关闭窗口)。

请注意,这只是一个简单的示例。

在实际的应用程序中,你可能需要处理更多的Windows消息类型,并执行更复杂的逻辑来响应用户输入和系统事件。

谈Windows消息拦截

谈Windows消息拦截

1 Wid w n o s的运 行 机 制
Wi o s 作 系 统 运 行 的 基 础 是 “ 件 触 发 ” n w操 d 事
“ 息驱 动 ”机 制 , 消 所谓 的 “ 消息 ” 是 在 Widw 运 就 nos
行过 程 中 , 件 ( 事 内部事 件或 外 部事 件 ) 生 后 , n 发 Wi— dw 操 作 系统 内部 产 生 的一 个 唯 一 的值 , 个 值 被 0s 这 操作 系统 收 到 , 能 告 诉 什 么 事 件 发 生 了 以及 需 要 它 由什么 窗 口采用 什 么样 的 动 作来 响应 。
如 窗 口收 到 一 条 WM— E F C S消 息 , 么 第 三 个 STO U 那 参数 会 包含 一个 句 柄 , 于 指 出刚 才 丢失 输 入 焦 点 用
的那 个 窗 口。
2 Widw n o s消 息 的传 递 过 程
在 Widw n o s中 , 个 窗 口并 不 一 定 非 要 用 默 认 每 的窗 口函 数 。对 窗 口来 说 , 全 可 以调 用 由用 户 自 完 定 义 的一个 窗 口函数 。这个 用 户 自定 义 函数 能处 理

作 系统执 行 程序 的次 序 , 变 某 一 事 件 发 生 时操 作 改
系统 的默认 执行 功 能 。例如 更 改点 击 鼠标 右 键 的 功 能 、 口 I0、 端 / 中断 等 。这 样 的 任务 在 D S操 作 系统 O 下较 易实现 , 以通 过 截取 D S中断 , 自己编 制 的 可 O 用 程 序 作 为 中 断服 务 程 序 , 以完 成 特 定 功 能 而 达 到 目 的 。但 在 Wi o s 作系统 下 , 更 改系 统 程序 的默 n w操 d 要 认 功能 , 以达到 某种特定 目的 , 就要显 得较 困难 。

VBA与Windows操作系统交互的技巧与方法

VBA与Windows操作系统交互的技巧与方法

VBA与Windows操作系统交互的技巧与方法随着信息化时代的到来,计算机软件在生活和工作中扮演着越来越重要的角色。

在Windows操作系统中,VBA (Visual Basic for Applications) 是一种被广泛应用的编程语言,可以与操作系统进行高效的交互。

在本文中,我们将探讨一些VBA与Windows操作系统交互的技巧与方法,帮助读者更好地利用VBA来优化自己的工作流程。

一、获取系统信息VBA提供了一些函数来获取Windows操作系统的信息。

其中一个常用的函数是Environ,通过该函数可以获取当前用户的环境变量。

例如,使用VBA代码`Environ("UserName")` 可以获取当前登录用户的用户名。

另外,VBA还提供了一些其他的函数,比如获取计算机名称、操作系统版本、用户目录等等。

二、操作文件和文件夹VBA可以通过操作系统提供的接口来对文件和文件夹进行创建、删除、复制、重命名等操作。

例如,使用VBA的`MkDir`命令可以创建一个新的文件夹,`Kill`命令可以删除文件。

在操作文件时,VBA还可以利用Windows操作系统的剪贴板功能来实现文件的复制和粘贴,以及获取剪贴板中的内容。

通过VBA的`GetObject`函数,可以获取剪贴板中的对象,并进行进一步的操作。

三、控制应用程序VBA可以通过Windows操作系统的API来控制其他应用程序。

例如,可以使用VBA代码来自动打开、关闭、激活其他应用程序的窗口。

通过获取其他应用程序的句柄,可以实现对其进行操作,并模拟用户的操作。

四、发送和接收电子邮件在Windows操作系统中,VBA可以通过Microsoft Outlook来实现与邮件系统的交互。

通过VBA代码,可以自动创建、发送电子邮件,并读取邮件服务器中的邮件。

通过使用VBA的Outlook对象模型,可以实现对邮件的各种操作,例如添加附件、设置邮件的优先级和重要性、保存邮件为草稿等等。

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

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

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
End If
End If
注释:如果不是热键,或者不是我们设置的热键,交还控制权给
注释:系统,继续监测热键
Wndproc = CallWindowProc(preWinProc, hwnd, Msg, wParam, lParam)
End Function
Public Sub hideDONE()注释:最关键的项目隐藏过程
注释:向系统注册一个指定的热键
Public Declare Function UnregisterHotKey Lib "user32" (ByVal hwnd As Long, ByVal ID As Long) As Long
注释:取消热键并释放占用的资源
注释:上述五个API函数是注册系统级热键所必需的,具体实现过程如后文所示
注释:拒绝隐藏程序自身
Chinahide.List1.AddItem (MyhWnd)
注释:注释:添加相关信息
ShowWindow MyhWnd, SW_HIDE
注释:执行隐藏功能
End Sub
‘模块结束
本文代码不仅将向编程爱好者展示“隐藏引擎”的魅力,也将让您立刻成为一个后台控制和系统级热键的编程高手。它适用于windows95/98/nt4/me/2000,vb5/6开发平台。

VB动态添加WebBrowser控件,并拦截弹出窗口(不用引用任何组件)

VB动态添加WebBrowser控件,并拦截弹出窗口(不用引用任何组件)

VB动态添加WebBrowser控件,并拦截弹出窗⼝(不⽤引⽤任何组件)WBCustomizer.dll 这个1、注册::在开始菜单中输⼊RegSvr32路径(WBCustomizer.dll⽂件所在的绝对路径),若果注册成功,会提⽰2、引⽤:在⼯程--》引⽤中,选择microsoft webbrows customizer sample object3、使⽤:如下举例Dim CustomWB As WBCustomizerSet CustomWB = New WBCustomizerWith CustomWB.EnableAccelerator vbKeyN, vbKeyControl, True'表⽰启⽤ctrl+N键.EnableAccelerator vbKeyO, vbKeyControl, fasle '禁⽤ctrl+O键.EnableContextMenus = True'启⽤右键菜单若赋值false 禁⽤右键菜单.EnableAllAccelerators = TrueSet .WebBrowser = WebBrowser1End With新建空⽩窗体,然后粘帖下⾯代码:1Option Explicit2Public WithEvents br As VBControlExtender34Private Sub br_ObjectEvent(Info As EventInfo)5If = "NewWindow2"Then6'Dim fm As New Form17'fm.Show8'Info.EventParameters(0) = br.object ‘根据需要可实现在⾃⼰的新开窗⼝打开弹出窗⼝9 Info.EventParameters(1) = True'拦截弹出窗⼝10End If11End Sub1213Private Sub Form_Click()14 br.object.Navigate "/"15End Sub1617Private Sub Form_Load()18On Error Resume Next19If Licenses.Count = 0Then Licenses.Add "Shell.Explorer.2", "Shell.Explorer.2"20Set br = Me.Controls.Add("Shell.Explorer.2", "br")21'br.Width = 150 * Screen.TwipsPerPixelX22'br.Height = 50 * Screen.TwipsPerPixelY23 br.Visible = True24End Sub。

[汇总]VB6实现对Windows消息的拦截

[汇总]VB6实现对Windows消息的拦截

VB6实现对Windows消息的拦截众所周知,VB 的功能没有 VC++、Delphi 这样的全功能开发平台强大,但她也足以完成我们绝大部分的工作,只要你开动脑筋,敢想敢干,我们可以让 VB 发挥最大的效能,做出许多令人惊叹的软件。

开发高难度软件,并不只是 VC++ 和 Delphi 的专利!过去普遍认为 VB 无法自定义拦截 Windows 的消息,只能靠VB 本身提供的几个有限的事件来编程,这有很大的局限性。

缺少消息捕获,同时又被认为不支持回调函数机制(主要是因为 VB 没有指针,更谈不上函数指针),这造成了 VB 编程的很大局限性。

事实上,VB 可以采用别的办法变相地实现这一机制。

从 VB 5.0 开始就提供了 AddressOf 操作符,利用这个操作符可以获取 VB 自定义函数的地址。

有了函数地址就可以采用回调函数的机制了。

当然,VB 仍然无法实现 VB 函数之间的地址传递,她只支持 VB 函数到 DLL 的函数抵制传递。

但是,这已经足够了。

下面这个程序,就是采用了这一方法,程序中只有一个主窗体,通过设置属性,使得主窗体没有边框,没有标题栏,不能改变大小,不能通过标题栏托动。

但是通过拦截Windows 消息可以使得鼠标处在窗体中的任意位置都可以托动它,就像按住标题栏托动一样。

这个程序没有用到任何附加的控件,全部采用 VB 代码完成。

注意,请增加一个公共模块,以便声明一些函数和常数。

以下代码在 VB 6.0 中通过。

’ ===================================’ 这是公共模块的代码Attribute VB_Name = "Module1"Option ExplicitPublic Const WM_NCHITTEST = &H84Public Const VK_LBUTTON = &H1Public Const HTCAPTION = 2Public Const HTCLIENT = 1Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As IntegerPublic 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 LongPublic Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongPublic Const GWL_WNDPROC = -4Global lpPrevWndProc As LongGlobal gHW As Long’ 这里是关键,我自定义了一个窗口函数(回调函数),以替代 VB 窗体自己的默认窗口函数。

windows消息处理机制和VB

windows消息处理机制和VB

windows消息处理机制和VB在开始具体的VB知识讲述之前,吉⼤的教程为我们讲述了windows的消息处理机制,并⽤C语⾔,简单描述了windows内部的消息处理机制,分了:注册窗⼝类,创建窗⼝,显⽰消息循环,取出发给窗⼝,函数执⾏说实在的,我有点没听明⽩,后来⼜查询了⼀些资料,⼤概了解了windows消息处理机制是怎么⼀回事。

⾸先说⼀下消息,消息是任何⾯向对象系统的关键部分,windows环境与应⽤程序之间的交互,及其与外界的交互就是通过消息来完成的。

Windows发出的⼀个通知,告诉应⽤程序某个事情发⽣了。

例如,单击⿏标、改变窗⼝尺⼨、按下键盘上的⼀个键都会使Windows发送⼀个消息给应⽤程序。

消息本⾝是作为⼀个记录传递给应⽤程序的,这个记录中包含了消息的类型以及其他信息。

Windows的消息系统是由3个部分组成的:消息队列:Windows能够为所有已注册的应⽤程序维护⼀个消息队列。

应⽤程序必须从消息队列中获取消息,然后分派给某个窗⼝。

消息循环:通过这个循环机制应⽤程序从消息队列中检索消息,再把它分派给适当的窗⼝,然后继续从消息队列中检索下⼀条消息,再分派给适当的窗⼝,依次进⾏。

窗⼝过程:每个窗⼝都有⼀个窗⼝过程来接收传递给窗⼝的消息,它的任务就是获取消息然后响应它,窗⼝过程是⼀个回调函数;处理了⼀个消息后,它通常要返回⼀个值给Windows。

注意回调函数是程序中的⼀种函数,它是由Windows或外部模块调⽤的。

⼀个消息从产⽣到被⼀个窗⼝响应,其中有5个步骤:1) 系统中发⽣了某个事件。

2) Windows把这个事件翻译为消息,然后把它放到消息队列中。

3) 应⽤程序从消息队列中接收到这个消息,把它存放在记录中。

4) 应⽤程序把消息传递给⼀个适当的窗⼝的窗⼝过程。

5) 窗⼝过程响应这个消息并进⾏处理。

步骤3和4构成了应⽤程序的消息循环。

消息循环往往是Windows应⽤程序的核⼼,因为消息循环使⼀个应⽤程序能够响应外部的事件。

vb6暂停和恢复语句

vb6暂停和恢复语句

vb6暂停和恢复语句全文共四篇示例,供读者参考第一篇示例:VB6语言是一种编程语言,常用于开发Windows应用程序。

在编写程序时,经常会遇到需要控制程序暂停和恢复的情况。

在VB6中,可以使用一些语句来实现程序的暂停和恢复。

一、暂停程序的方法在VB6中,可以使用DoEvents语句来实现程序的暂停。

DoEvents语句会使程序在执行过程中暂停,等待操作系统处理其他消息。

这样可以在程序执行过程中允许用户进行其他操作,比如点击按钮或者输入信息。

下面是一个简单的示例代码,演示了如何使用DoEvents语句实现程序的暂停:```vbPrivate Sub Command1_Click()Dim i As IntegerFor i = 1 To 10Label1.Caption = iDoEventsSleep 1000 ' 暂停1秒Next iEnd Sub```上面的代码中,当用户点击按钮时,程序会循环执行10次,并逐步将数字显示在Label1控件中。

在每次循环中,使用DoEvents语句来实现程序的暂停,让操作系统可以处理其他消息。

还可以使用Sleep函数来实现程序的暂停。

Sleep函数会使程序暂停一定的时间,然后再继续执行。

上面的示例代码中使用了Sleep函数来让程序暂停1秒。

二、恢复程序的方法在VB6中,恢复程序通常是指终止程序的暂停状态,让程序继续执行。

一般情况下,程序会在执行完成后自动恢复。

在一些特殊情况下,可能需要手动终止程序的暂停状态。

可以使用Exit Sub语句来实现程序的终止。

当程序执行到Exit Sub语句时,会立即退出当前函数或过程,并继续执行后续代码。

总结:在VB6中,可以使用DoEvents语句和Sleep函数来实现程序的暂停,以及使用Exit Sub语句来终止程序的暂停。

这些方法可以实现对程序的控制,让程序更加灵活和易于使用。

希望本文能帮助读者理解程序的暂停和恢复操作,提高编程技能和效率。

如何在VBA中操作Windows系统

如何在VBA中操作Windows系统

如何在VBA中操作Windows系统VBA(Visual Basic for Applications)是一种用于编写Microsoft Office应用程序的编程语言,它可以帮助用户自动化各种任务。

在VBA中,我们可以使用各种方法来操作Windows系统,从而实现一些高效的自动化操作。

本文将介绍如何在VBA中操作Windows系统的一些常见技术和方法。

一、监控系统事件在VBA中,我们可以使用Windows API来监控系统事件,如窗口的打开、关闭、焦点改变等。

以下是一个示例代码,演示了如何使用VBA来监控系统窗口的焦点改变事件:```Option Explicit' 声明API函数Declare Function SetWinEventHook Lib "user32" (ByVal eventMin As Long, ByVal eventMax As Long, ByVal hmodWinEventProc As Long, ByVal pfnWinEventProc As Long, ByVal idProcess As Long, ByVal idThread As Long, ByVal dwFlags As Long) As LongDeclare Function UnhookWinEvent Lib "user32" (ByVal hWinEventHook As Long) As Long' 声明系统事件常量Private Const EVENT_SYSTEM_FOREGROUND = &H3Private Const WINEVENT_OUTOFCONTEXT = &H0' 系统事件处理函数Private Sub HandleSystemEvent(ByVal event As Long, ByVal hwnd As Long, ByVal idObject As Long, ByVal idChild As Long, ByVal dwEventThread As Long, ByVal dwmsEventTime As Long)' 在此处编写处理代码Debug.Print "系统事件:焦点改变,窗口句柄:" & hwndEnd Sub' 监控系统事件Sub MonitorSystemEvent()Dim hWinEventHook As Long' 监控焦点改变事件hWinEventHook =SetWinEventHook(EVENT_SYSTEM_FOREGROUND,EVENT_SYSTEM_FOREGROUND, 0, AddressOf HandleSystemEvent, 0, 0, WINEVENT_OUTOFCONTEXT)' 循环等待系统事件Do Until MsgBox("停止监控系统事件?", vbYesNo + vbQuestion) = vbYesDoEventsLoop' 取消监控UnhookWinEvent hWinEventHookEnd Sub```运行上述代码,在VBA中监控系统焦点改变事件,并在控制台输出相关信息。

怎么屏蔽对方电脑信息通知

怎么屏蔽对方电脑信息通知

怎么屏蔽对方电脑信息通知
随着科技的发展,我们越来越依赖电脑进行工作和生活。

然而,在使用电脑的过程中,我们可能会遇到一些烦人的问题,比如不断弹出的对方电脑信息通知。

这些通知可能会打断我们的工作节奏,影响我们的效率。

那么,如何屏蔽对方电脑的信息通知呢?
首先,我们可以通过调整系统设置来屏蔽对方电脑的信息通知。

在Windows系统中,我们可以进入“设置”菜单,然后点击“系统”,再选择“通知和动作中心”。

在这里,我们可以找到“显示通知”选项,将其关闭或者选择只显示关键通知。

这样,对方的电脑信息通知就不会再弹出来打扰我们了。

其次,我们可以使用第三方软件来屏蔽对方电脑的信息通知。

市面上有很多可以屏蔽通知的软件,比如“通知管理器”、“桌面通知助手”等。

这些软件可以帮助我们自定义屏蔽通知的方式和范围,让我们更好地控制对方电脑的通知内容。

此外,我们还可以通过调整对方电脑的通知设置来屏蔽信息通知。

如果我们有对方电脑的访问权限,我们可以进入对方电脑的系统设置,然后找到“通知和动作中心”,在这里关闭或者调整通知的显示方式。

当然,在进行这样的操作之前,我们需要获得对方的允许,并且要谨慎处理对方电脑的设置。

总的来说,屏蔽对方电脑的信息通知可以通过调整系统设置、使用第三方软件或者调整对方电脑的通知设置来实现。

无论采取哪种方法,我们都应该尊重对方的隐私和个人需求,并且在操作之前与对方进行充分的沟通和协商。

只有在双方的共同理解和同意下,我们才能够更好地屏蔽对方电脑的信息通知,提高工作效率和生活质量。

VB环境中直接处理Windows消息的方法研究

VB环境中直接处理Windows消息的方法研究

VB环境中直接处理Windows消息的方法研究
邬晓岚;李世新;等
【期刊名称】《后勤工程学院学报》
【年(卷),期】2000(016)004
【摘要】讨论了在VB中直接处理Windows消息的三种方法:编制动态链接库、使用Addressof运算符以及借助消息处理控件,并针对不同的方法分别给出了具
体的源程序及说明。

【总页数】4页(P39-41,52)
【作者】邬晓岚;李世新;等
【作者单位】后勤自动化工程系;重庆大学
【正文语种】中文
【中图分类】TP316.7
【相关文献】
1.VB程序在Win32 API及Windows消息开发中的应用 [J], 陈勇孝;陆宜清
2.在VB中运用Windows消息机制 [J], 王德群
3.在VB中调用API函数截获Windows消息 [J], 王忠贵
4.在程序中截获、处理Windows消息 [J], 王同琛;王克文
5.在VB程序中截取Windows消息 [J], 周春晖
因版权原因,仅展示原文概要,查看原文内容请购买。

用BCB拦截Windows消息

用BCB拦截Windows消息

用BCB拦截Windows消息转载自C++ Builder开发者---- C++ Builder不愧为Borland公司的优秀产品,用它来开发Windows程序非常快捷高效,但在编程过程中你也会发现它的一些限制性,让你无法实现自己的想法。

比如你无法在修改表单的系统菜单;比如使用跟踪栏时,你找不到StartTrack和EndTrack事件,而偏偏你的程序需要这两个事件。

Windows API编程中,你就不会有这些麻烦,只需处理一下WM_SYSCOMMAND和WM_HSCROLL(或WM_VSCROLL)消息,就能实现上述功能。

Windows API的缺点是编程十分麻烦,太多的时间要耗在细节上面,但它的功能却是最强大的。

C++ Builder的VCL在功能上只是它的一个子集,因为VCL是在API的基础上封装的,封装时舍弃了一些不常用到的功能。

但是程序员的想象力没有被封装,他们总怀着更大的热情去实现别出心裁的想法,修改系统菜单和给跟踪栏增加StartTrack和ndTrack事件只是其中的小把戏而已。

可是VCL并没有这些功能,怎么办?---- 幸好,Borland公司没有把路堵死,而是留了个后门——允许程序员自己拦截并处理Windows消息,就象API编程一样。

于是,办法有了...---- 拦截Windows消息需要以下几步:---- 在表单头文件内(如Unit1.h)---- 1. 在类声明中建立消息映射表,把某条消息的处理权交给自定义的消息处理函数。

BEGIN_MESSAGE_MAPMESSAGE_HANDLER(Windows消息名,TMessage,消息处理函数名)MESSAGE_HANDLER(...)END_MESSAGE_MAP(TForm)---- 2. 在类声明的private区内声明消息处理函数。

private: // User declarationsvoid __fastcall 消息处理函数名(TMessage &Message);在表单文件内(如Unit1.cpp)---- 3. 写出消息处理函数,在这里实现你需要的功能。

让VB程序穿越Windows防火墙

让VB程序穿越Windows防火墙

让VB程序穿越Windows防火墙我们知道Windows XP SP2大大增强了内置防火墙的功能,只要Windows防火墙检测到应用程序与外部网络之间的传入通讯,就会自动进行拦截。

而绕过这种检测机制的最佳办法就是使应用程序具有自动添加到Windows防火墙的例外列表功能,就像eMule、Bitcomet这类工具一样。

一、编程原理要使应用程序具有自动添加Windows防火墙例外列表的功能,必须用到以下Windows Firewall API接口,包括INetFwMgr、INetFwPolicy、INetFwAuthorizedApplication。

INetFwMgr接口主要用来获取当前计算机上的防火墙配置对象,所有与防火墙配置相关的操作都需要用到该接口;INetFwPolicy接口用来获取Windows防火墙的配置信息,并提供了AuthorizedApplications属性与INetFwAuthorizedApplication接口关联;INetFwAuthorizedApplication接口则用来访问Windows例外列表中通过认证的应用程序的属性;通过上述三个接口,不仅可以将我们自己的程序增加到Windows防火墙的例外列表,而且还可以获取(修改)Windows防火墙的配置信息。

二、代码实现在了解实现原理之后,接下来就可以编写具体的代码了。

由于微软在发布上述接口的同时,还提供了一个封装上述API的COM对象,因此大大简化了程序代码的编写。

1.添加COM对象的引用在VB下单击菜单“工程”、“引用”,然后在弹出窗口的列表中选中“NetCon 1.0 Library”和“NetFwTypeLib”,单击确定。

2.本应用程序的界面设计比较简单在VB窗体上放置了三个命令按钮和一个Label,三个命令按钮分别用来实现启用防火墙、禁用防火墙、添加到防火墙例外列表,Label控件用来显示防火墙的当前状态。

vba如何去屏蔽一些功能?看完这些代码你应该会得到启发!

vba如何去屏蔽一些功能?看完这些代码你应该会得到启发!

vba如何去屏蔽⼀些功能?看完这些代码你应该会得到启发!献给今⽇头条的朋友们:常⽤的屏蔽代码:mandBars(''Worksheet Menu Bar'').Enabled = False ''屏蔽菜单栏Application.DisplayFormulaBar = False ''屏蔽编辑栏Application.DisplayStatusBar = False ''屏蔽状态栏下⾯任选⼀组即可,不可同时出现。

mandBars(''Standard'').Visible = False ''屏蔽常⽤⼯具栏,右键可选mandBars(''Formatting'').Visible = False ''屏蔽格式⼯具栏,右键可选mandBars(''Standard'').Enabled = False ''去除常⽤⼯具栏,右键也删掉mandBars(''Formatting'').Enabled = False ''去除格式⼯具栏,右键也删掉mandBars(''Toolbar list'').Enabled = False ''屏蔽右键⼯具栏mandBars(''cell'').Enabled = False ''屏蔽单元格右键单击mandBars(''Column'').Enabled = False ''屏蔽列右键单击mandBars(''Row'').Enabled = False ''屏蔽⾏右键单击Application.Assistant.Visible = False ''应⽤程序的辅助的可见mandBars.DisableCustomize = True ''去除右键⼯具栏中的“⾃定义”ActiveWindow.DisplayHeadings = False ''屏蔽⾏号列标ActiveWindow.DisplayWorkbookTabs = False ''屏蔽⼯作表标签ActiveWindow.DisplayVerticalScrollBar = False ''屏蔽垂直滚动条ActiveWindow.DisplayHorizontalScrollBar = False ''屏蔽⽔平滚动条mandBars(''ply'').Enabled = False ''屏蔽⼯作表标签右键单击mandBars(''Visual basic'').Enabled = False ''屏蔽应⽤程序的<命令块>(''Visualbasic'' )的激活Application.OnKey ''%{f11}'', '' '' ''屏蔽组合键ALT+F11,%代表ALTApplication.OnKey ''%{F11}'' ''解除屏蔽ALT+F11Application.OnKey ''%{f8}'', '' '' ''屏蔽组合键ALT+F8Application.OnKey ''%{f8}'' ''解除屏蔽ALT+F8Application.OnKey ''^{f11}'', ''VBEdit'' ''屏蔽组合键Ctrl+F11,插⼊宏表,^代表CtrlApplication.OnKey ''^{f11}'' ''恢复组合键Ctrl+F11,插⼊宏表Application.OnKey ''^f'', '' '' ''屏蔽组合键Ctrl+F,查找Application.OnKey ''^h'', '' '' ''屏蔽组合键Ctrl+H,替换Application.OnKey ''^{Break}'', '' '' ''屏蔽CTRL+Break中断Application.OnKey ''^{Break}'' ''解除CTRL+Break中断崋说简单传播。

VB禁止移动窗口

VB禁止移动窗口

VB禁⽌移动窗⼝--VB禁⽌移动窗⼝--禁⽌⼀个窗⼝被移动最简单的⽅法是设置Form的Moveable属性为False,这样就⽆法拖动标题栏来改变窗⼝的位置了,同时系统菜单的“移动”命令变成了灰⾊,除此之外,还有两种⽅法也可禁⽌移动窗⼝。

1.拦截拖动标题栏的消息当⽤户在标题栏的空⽩处上按下会产⽣WM_NCLBUTTONDOWN消息和HTCAPTION附加消息,我们可以拦截这个消息来防⽌⽤户通过拖动标题栏来移动窗⼝,此外还要拦截系统菜单的“移动”命令,所以我们还要处理WM_SYSCOMMAND消息,代码如下:'Form1中'-----------------------------------------------------------Private Sub Form_Load()Me.ShowhWindow = Me.hWndOldWindowProc = SetWindowLong(hWindow, GWL_WNDPROC, AddressOf WindowProc)End SubPrivate Sub Form_Unload(Cancel As Integer)Call SetWindowLong(hWindow, GWL_WNDPROC, OldWindowProc)End Sub'Module1中'-----------------------------------------------------------Option ExplicitDeclare Function GetWindowLong Lib "user32" Alias "GetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long) As LongDeclare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hWnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As LongDeclare 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 LongPublic Const GWL_WNDPROC = (-4)Public Const WM_NCLBUTTONDOWN = &HA1Public Const WM_SYSCOMMAND = &H112Public Const HTCAPTION = 2Public Const SC_MOVE = &HF010&Public hWindow As LongPublic OldWindowProc As Long'⼦类消息Public Function WindowProc(ByVal hWnd As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long'拦截拖动标题栏消息If uMsg = WM_NCLBUTTONDOWN And wParam = HTCAPTION Then Exit Function'拦截系统菜单的“移动”消息If uMsg = WM_SYSCOMMAND And wParam = SC_MOVE Then Exit FunctionWindowProc = CallWindowProc(OldWindowProc, hWnd, uMsg, wParam, lParam)End Function2.修改窗⼝结构全⾯禁⽌移动窗⼝上⾯两种⽅法都可以禁⽌移动⼀个窗⼝,但是这种⽅法只能欺骗⽤户,⽽⽆法欺骗操作系统,即它不能防⽌⽤户通过其它第三⽅⼯具来改变⼀个窗⼝的位置,如调⽤MoveWindow或SetWindowPos函数来改变⼀个窗⼝的位置,然⽽下⾯这种⽅法就可以。

Windows消息拦截技术的应用

Windows消息拦截技术的应用

Windows消息拦截技术的应用一、前言众所周知,Windows程式的运行是依靠发生的事件来驱动。

换句话说,程式不断等待一个消息的发生,然后对这个消息的类型进行判断,再做适当的处理。

处理完此次消息后又回到等待状态。

从上面对Windows 程式运行机制的分析不难发现,消息在用户与程式之间进行交流时起了一种中间“语言”的作用。

在程式中接收和处理消息的主角是窗口,它通过消息泵接收消息,再通过一个窗口过程对消息进行相应的处理。

消息拦截的实现是在窗口过程处理消息之前拦截到消息并做相关处理后再传送给原窗口过程。

通常情况下,程序员可以在窗口过程中处理接收到的消息,这就要求窗口过程必须在开发程序时完成,但是在一些应用中常常需要获取和处理另外应用程序或其它单元模块中的消息,实现此类功能的技术也就本文要讨论的主题――消息拦截技术。

二、理解Windows消息机制在深入探讨消息拦截技术实现原理之前,让我们先来温习一下Windows消息机制原理知识。

1、消息的产生消息作为程序与外界交流的“语言”,它的产生自然来自外界,但这里所说的外界,不只是简单的指程序之外或软件系统之外,而是泛指消息处理模块之外的模块、Windows系统、其它应用程序以及硬件等。

通常根据消息产生的方式将其分为两大类,即硬件消息和软件消息。

硬件消息,常指由硬件装置所产生的事件(如鼠标或键盘被按下),放在系统消息队列(System Queue)中,再由系统消息处理机构将消息发送给应用程序消息队列中。

软件消息,常指由Windows系统或其它应用程序发送的信息,它直接放入应用程序消息队列(Application Queue)中,再由应用程序消息处理机构将消息传递给相应的窗口。

2、消息的组成一个消息由一个消息名称(UINT),和两个参数(WPARAM,LPARAM)。

当用户进行了输入或是窗口的状态发生改变时系统都会发送消息到某一个窗口。

例如当菜单转中之后会有WM_COMMAND消息发送,WPARAM的高字中(HIWORD(wParam))是命令的ID号,对菜单来讲就是菜单ID。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

ShowInTaskbar = 0 ’False
StartUpPosition = 3 ’窗口缺省
Begin mandButton Command1
Caption = "Command1"
Private Sub Form_Load()
gHW = Me.hwnd ’ 保存窗体的句柄
’ 下面是关键,完成两个工作:1、将我们自己的全局函数替换为新的窗体回调函数
’ 2、保存原来的 VB 默认窗户口函数地址
’ 其他消息我们懒得处理,交给 VB 默认的窗口函数去处理吧。
Select Case uMsg
Case WM_NCHITTEST ’ 拦截 WM_NCHITTEST 消息
If GetAsyncKeyState(VK_LBUTTON) < 0 Then ’ 是否有鼠标左键在窗体客户区按下?
BorderStyle = 0 ’None
ClientHeight = 3195
ClientLeft = 0
ClientTop = 0
ClientWidth = 4680
Public Const WM_NCHITTEST = &H84
Public Const VK_LBUTTON = &H1
Public Const HTCAPTION = 2
Public Const HTCLIENT = 1
Function WindowProc(ByVal hw As Long, ByVal uMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
’ 我们也进行消息过滤,不过我们指拦截我们感兴趣的消息
Public Declare Function GetAsyncKeyState Lib "user32" (ByVal vKey As Long) As Integer
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
lpPrevWndProc = SetWindowLong(gHW, GWL_WNDPROC, AddressOf WindowProc)
End Sub
其实,一切就这么简单。有了这种办法,Windows 中需要回调函数的 API 函数我们都可以调用了,有很多的功能我们都可以用 VB 来实现了。注意,我们自定义的回调函数只能是模块中定义的全局函数!不能在窗体中定义。
LinkTopic = "Form1"
MaxButton = 0 ’False
MinButton = 0 ’False
ScaleHeight = 3195
ScaleWidth = 4680
’ 这里又是关键,因为其他我们不关心的消息我们自己不处理,所以必须由 VB 的默认处理函数处理
’ lpPrevWndProc 其实就是一个函数指针,它指向 VB 默认窗口函数
WindowProc = CallWindowProc(lpPrevWndProc, hw, uMsg, wParam, lParam)
’ ===================================
’ 这是公共模块的代码
Attribute VB_Name = "Module1"
Option Explicit
End Function
’ ===================================
ቤተ መጻሕፍቲ ባይዱ
’ 这是窗体的代码
VERSION 5.00
Begin VB.Form Form1
’ 如果是,函数返回值被设置为 HTCAPTION,欺骗 Windows,让它以为鼠标是按在标题栏
’ Windows 是通过窗口函数的返回值进行判断处理的
WindowProc = HTCAPTION
Exit Function
Attribute VB_Exposed = False
Private Sub Command1_Click()
Unload Me ’ 按下这个按钮就退出了
End Sub
Attribute VB_Name = "Form1"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = False
Attribute VB_PredeclaredId = True
众所周知,VB 的功能没有 VC++、Delphi 这样的全功能开发平台强大,但她也足以完成我们绝大部分的工作,只要你开动脑筋,敢想敢干,我们可以让 VB 发挥最大的效能,做出许多令人惊叹的软件。开发高难度软件,并不只是 VC++ 和 Delphi 的专利!
过去普遍认为 VB 无法自定义拦截 Windows 的消息,只能靠 VB 本身提供的几个有限的事件来编程,这有很大的局限性。缺少消息捕获,同时又被认为不支持回调函数机制(主要是因为 VB 没有指针,更谈不上函数指针),这造成了 VB 编程的很大局限性。事实上,VB 可以采用别的办法变相地实现这一机制。从 VB 5.0 开始就提供了 AddressOf 操作符,利用这个操作符可以获取 VB 自定义函数的地址。有了函数地址就可以采用回调函数的机制了。当然,VB 仍然无法实现 VB 函数之间的地址传递,她只支持 VB 函数到 DLL 的函数抵制传递。但是,这已经足够了。下面这个程序,就是采用了这一方法,程序中只有一个主窗体,通过设置属性,使得主窗体没有边框,没有标题栏,不能改变大小,不能通过标题栏托动。但是通过拦截 Windows 消息可以使得鼠标处在窗体中的任意位置都可以托动它,就像按住标题栏托动一样。这个程序没有用到任何附加的控件,全部采用 VB 代码完成。注意,请增加一个公共模块,以便声明一些函数和常数。以下代码在 VB 6.0 中通过。
Height = 375
Left = 2160
TabIndex = 0
Top = 720
Width = 1575
End
End
Public Const GWL_WNDPROC = -4
Global lpPrevWndProc As Long
Global gHW As Long
’ 这里是关键,我自定义了一个窗口函数(回调函数),以替代 VB 窗体自己的默认窗口函数。’ 窗口函数是干什么的?它就是负责处理 Windows 发送给它的消息,并加以过滤,筛选出它感兴趣’ 的消息,映射成为事件供我们使用。VB 中每个窗口都有一个默认的窗口函数,我们是看不到的。’ 有很多消息都被 VB 的默认窗口函数过滤掉了。了解 C/C++/Delphi 程序设计的朋友应该知道这些。
Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
Else
’ 其他的我们不管,还是规规矩矩的该怎么样就怎么样
WindowProc = HTCLIENT
Exit Function
End If
End Select
写出来只是想抛砖引玉,其实有很多功能不需要到处去找控件的。我现在在研究用 VB 6 + DirectX 7/8 写游戏。游戏速度当然不可能达到 C++ 的程度,但是足够应付一些中小型的游戏题材了,比如 RPG 的。这又有很多值得写出来的了。虽然不是什么新鲜的话题,但是其中仍不乏许多的技巧和编程思想。希望对此有研究的朋友能够多多出来交流指点一二。
相关文档
最新文档