关于vb.net子类化其它窗口的问题

问题描述

在网上看到一个例程,把“AboutMe”加到窗口的系统菜单,程序如下,vb.net的:PublicClassForm1'–引用Win32ApiPrivateDeclareFunctionGetSystemMenuLib"user32"(ByValhWndAsIntPtr,ByValbRevertAsInt32)AsInt32PrivateDeclareFunctionInsertMenuLib"user32"Alias"InsertMenuA"(ByValhMenuAsInt32,ByValnPositionAsInt32,ByValwFlagsAsInt32,ByValwIDNewItemAsInt32,ByVallpNewItemAsString)AsInt32PrivateConstMF_BYCOMMAND=&H0&PrivateConstMF_BYPOSITION=&H400&PrivateConstMF_STRING=&H0&PrivateConstMF_SEPARATOR=&H800&PrivateConstWM_SYSCOMMAND=&H112PrivateSubForm1_Load(ByValsenderAsSystem.Object,ByValeAsSystem.EventArgs)HandlesMyBase.LoadInsertMenu(GetSystemMenu(Me.Handle,False),0,MF_BYPOSITIONOrMF_SEPARATOR,2001,"")InsertMenu(GetSystemMenu(Me.Handle,False),0,MF_BYPOSITIONOrMF_STRING,2002,"AboutMe(&A)")EndSubProtectedOverridesSubWndProc(ByRefmAsSystem.Windows.Forms.Message)'类化窗口--覆盖WndProc过程Ifm.Msg=WM_SYSCOMMANDThenIfm.WParam.ToInt32=2002ThenMsgBox("AboutContext",vbInformation,"About...")EndIfEndIf'调用窗口默认的处理过程MyBase.WndProc(m)EndSubEndClass

突发奇想,能不能给记事本的系统菜单加入“Aboutme”呢?用spy++找到记事本的句柄,替换了InsertMenu里的me.handle,发现记事本的系统菜单加入了“Aboutme”,但是点击“Aboutme”没有任何反应,不会弹出MsgBox,请问这是为什么,要怎么样才能实现?

解决方案

解决方案二:
他是本进程的,你是跨进程的,你的消息只是在本进程用,所以没反应,你注册一个全局消息试试
解决方案三:
引用1楼bdmh的回复:

他是本进程的,你是跨进程的,你的消息只是在本进程用,所以没反应,你注册一个全局消息试试

怎么做全局消息?这个不懂啊!

时间: 2024-09-21 20:00:07

关于vb.net子类化其它窗口的问题的相关文章

汇编教程之窗口子类化

在这一讲,我们将学习什么是窗口子类化和怎样按你所想要的方式方便地使用它. 理论: 如果你曾经在 Windows 环境下编过程序,有时候就会发现:有一个现成的窗口,几乎有你所需要的全部功能,但还不完全一样(否则就没有必要讲这一节了).你曾遇到过这样的处境吗,如果你需要一个具有过滤特殊字符功能的 Edit 控件.当然最直接的方法就是自己用代码来实现,但这的确是一个费时又很困难的任务,而窗口子类化就可以用来做这种事情. 窗口子类化允许你接管被子类化的窗口,使你对它有绝对的控制权.举个例子了来阐明一下:

利用窗口子类化隐藏系统图标

窗口子类化是一种非常有用的技术,通常它用在Windows GUI编程方面,我们用这种技术来创建新的控件,比如让SubClassing一个Edit控件添加一些消息处理让它变成MaskEdit控件等等.反过来想想如果我们SubClassing一个有ES_PASSWORD风格的窗口控件,得到它的密码是难是吗?很简单,不过是一句CallWindowProc调用,只不过在NT等系统上需要Inject一个DLL到目标进程来SubClassing一个进程中的窗口或是子窗口. 用Spy++看了一下,资源管理器里

眼见为实(2):介绍Windows的窗口、消息、子类化和超类化

眼见为实(2):介绍Windows的窗口.消息.子类化和超类化 这篇文章本来只是想介绍一下子类化和超类化这两个比较"生僻"的名词.为了叙述的完整性而讨论了Windows的窗口和消息,也简要讨论了进程和线程.子类化(Subclassing)和超类化(Superclassing)是伴随Windows窗口机制而产生的两个复用代码的方法.不要把"子类化.超类化"与面向对象语言中的派生类.基类混淆起来."子类化.超类化"中的"类"是指W

窗口子类化-实例应用

所谓窗口子类化:改变一个已经存在的窗口实例的性质:消息处理与其他实例属性.   通常在SDK中所谓的窗口子类化就是改变一个窗口函数(如GetWindowLong()和SetWindowLong())通过这两个函数来设置窗口的属性等:   而今天我们主要内容是介绍MFC中的子类化,它跟SDK中的子类化不太一样: 所有MFC窗口有相同的窗口函数,由该窗口函数根据窗口句柄查找窗口实例,在把消息映射到该窗口类(class)得消息处理函数上.为了利用MFC的消息映射机制,不宜改变窗口函数(名),MFC也把

窗口的子类化与超类化

1. 子类化 改变一个已经存在的窗口实例的性质:消息处理与其他实例属性.在SDK编程范畴内,子类化就是改变一个窗口实例的窗口函数(通过GetWindowLong()和SetWindowLong()),子类化所要做的就是为某窗口实例编写新的窗口函数.其操作是在实例级别上进行的.在MFC中子类化的情况有所不同:所有MFC窗口有相同的窗口函数,由该窗口函数根据窗口句柄查找窗口实例,在把消息映射到该窗口类(class)得消息处理函数上.为了利用MFC的消息映射机制,不宜改变窗口函数(名),MFC也把子类

子类化

子类化 如果你曾经在 Windows 环境下编过程序,有时候就会发现:有一个现成的窗口,几乎有你所需要的全部功能,但还不完全一样.如果你需要一个具有过滤特殊字符功能的 Edit 控件.当然最直接的方法就是自己用代码来实现,但这的确是一个费时又很困难的任务,而子类化就可以用来做这种事情. 子类化允许你接管被子类化的窗口,使你对它有绝对的控制权.举个例子了来阐明一下:例如你需要一个只接受十六进制数字输入的文本编辑框,如果使用一个简单的 Edit控件,当用户输入十六进制以外的字符时,你既不知道也无计可

动态子类化CComboBox以得到子控件EDIT及LISTBOX

动态子类化CComboBox以得到子控件EDIT及LISTBOX Joise.LI写于2004-4-6 ComboBox是比较常用的一个控件,有三种样式:CBS_SIMPLE(简单),CBS_DROPDOWN(下拉),CBS_DROPDOWNLIST(下拉列表),其中下拉列表样式是不允许输入的,简单样式是永远都显示下拉框的. ComboBox是由一个ListBox和一个Edit框组合而成.本文将以限制只能输入电话号码为例介绍子类化过程得到Edit框(类似的可以得到ListBox). 电话号码只能

C++ 中超类化和子类化及他们的区别

C++ 中超类化和子类化 超类化和子类化没有具体的代码,其实是一种编程技巧,在MFC和WTL中可以有不同的实现方法. 窗口子类化: 原理就是改变一个已创建窗口类的窗口过程函数.通过截获已创建窗口的消息,从而实现监视或修改已创建窗口类的行为属性.可以用来改变或者扩展一个已存在的窗口的行为,而不用重新开发.比如要获得那些预定义控件窗口类(按钮控件.编辑控件.列表控件.下 拉列表控件.静态控件和滚动条控件)的功能而又要修改它们的某些行为. 子类化的优点主要体现在以下两个方面:首先,它不需要创建新的窗口

解说Win32的窗口子类化

也许你需要一个特殊的Edit来限制浮点数的输入,但是现有的Edit却并不能完成这项工作--因为它只能够单纯的限制大小写或者纯数字.当你在论坛上求救的时候,某个网友告诉你:"用子类化."你也许会在看到一线曙光的同时多出了一连串的问题:何为子类化?子类化的原理是什么?如何实现子类化?下面就让我从一个简单的C++程序开始,一步步解开你的疑团吧. 首先,我为你列出以下这个C++程序: #include <iostream> using namespace std; class Pa