c# 如何使用WinAPI 拦截其它窗口大化改成其他操作

guoweidong 2012-11-19 12:07:59
调用很多方法,就是不知道哪个是最大化的消息,如何拦截处理。
 #region 钩子类型的枚举
public enum HookType : int
{
WH_JOURNALRECORD = 0,
WH_JOURNALPLAYBACK = 1,
WH_KEYBOARD = 2,
WH_GETMESSAGE = 3,
WH_CALLWNDPROC = 4,
WH_CBT = 5,
WH_SYSMSGFILTER = 6,
WH_MOUSE = 7,
WH_HARDWARE = 8,
WH_DEBUG = 9,
WH_SHELL = 10,
WH_FOREGROUNDIDLE = 11,
WH_CALLWNDPROCRET = 12,
WH_KEYBOARD_LL = 13,
WH_MOUSE_LL = 14
}
#endregion



 /// <summary>
/// 安装钩子
/// </summary>
/// <param name="_hookHandle">当前钩子</param>
/// <param name="hWnd">句柄</param>
/// <returns></returns>
private IntPtr InstallHook(IntPtr _hookHandle, IntPtr hWnd)
{
if (_hookHandle != IntPtr.Zero)
return _hookHandle;
Module[] list = System.Reflection.Assembly.GetExecutingAssembly().GetModules();
System.Diagnostics.Debug.Assert(list != null && list.Length > 0);
int processid = User32API.GetWindowThreadProcessId(hWnd, 0);
hookProc = new HookProc(myhookproc);
_hookHandle = (IntPtr)User32API.SetWindowsHookEx(HookType.WH_CBT, hookProc, (IntPtr)Marshal.GetHINSTANCE(list[0]), (int)processid);
return _hookHandle;
}


//钩子处理函数,在这里拦截消息并做处理
private int myhookproc(int code, IntPtr wparam, ref CWPSTRUCT cwp)
{
switch (code)
{
case 0:
switch (cwp.message)
{
case 0x0000F://WM_PAINT,拦截WM_PAINT消息
//do something
break;
case 0:

break;
}
break;
}
if (code == 6)
{
if(cwp.message==9)
this.textBox1.Text += "编码:" + code.ToString() + "\t\n消息:" + Convert.ToString(cwp.message, 16) + "\t\n\r";
}
return User32API.CallNextHookEx(IntPtr.Zero, code, wparam, ref cwp);
}
...全文
464 8 打赏 收藏 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
bdmh 2012-11-19
  • 打赏
  • 举报
回复
你可以看WM_SYSCOMMAND的说明 http://baike.baidu.com/view/2451868.htm
jshi123 2012-11-19
  • 打赏
  • 举报
回复
用WH_GETMESSAGE 窗口最大化是WM_SYSCOMMAND with wParam=SC_MAXIMIZE
jshi123 2012-11-19
  • 打赏
  • 举报
回复
你的代码是实现不了你要的结果的
guoweidong 2012-11-19
  • 打赏
  • 举报
回复
晕了,搞了半天,你不是在我代码的基础上看的啊。
jshi123 2012-11-19
  • 打赏
  • 举报
回复
在.net中,你只能安装thread hook, 也就是只能监控本程序的窗口最大/最小化。 要监控其它程序的窗口最大/最小化,你要写一个本地dll来安装global hook,并调用你的C#代码。
guoweidong 2012-11-19
  • 打赏
  • 举报
回复
 //钩子处理函数,在这里拦截消息并做处理
        private int myhookproc(int code, IntPtr wparam, ref CWPSTRUCT cwp)
        {
            switch (code)
            {
                case 1:
                    switch (cwp.message)
                    {
                        case 0x0000F://WM_PAINT,拦截WM_PAINT消息
                            //do something                            
                            break;
                        case 0x112:                            
                            break;
                    }
                    this.textBox1.Text += "编码:" + code.ToString() + "\t\n参数:" + wparam + "消息:" + cwp.message + "\t\n\r";
                    break;
            }               
            return User32API.CallNextHookEx(IntPtr.Zero, code, wparam, ref cwp);            
        }
按你所说的,我在code=1的操作没有任何反应啊。
jshi123 2012-11-19
  • 打赏
  • 举报
回复
如果用cbt hook的话,code==6是HCBT_CLICKSKIPPED,鼠标相关的消息,跟窗口最大/小化没关系。 code==0是HCBT_MOVESIZE,窗口移动或改变大小相关消息,也跟窗口最大/小化没关系。 应该要用HCBT_MINMAX (code==1), 这个才是窗口最大/最小化消息。
guoweidong 2012-11-19
  • 打赏
  • 举报
回复
 if (cwp.message == 0x112)
                this.textBox1.Text += "编码:" + code.ToString() + "\t\n参数:" + wparam + "消息:" + Convert.ToString(cwp.message, 16) + "\t\n\r";
为什么这样用,还是得不到了?
源码直接下载地址: https://pan.quark.cn/s/a4b39357ea24 【FAST FWR310 无线路由更新程序】是一个专门为FAST FWR310型号无线路由设备设计的固件升级方案,其主要目的在于改善设备的工作表现、纠正已知的系统缺陷或引入全新的操作特性。对无线路由器进行固件更新,实质上是指替换或升级其核心操作系统(即固件),从而使其运行状态得到进一步优化。 在无线路由器的持续使用阶段,用户有时会遭遇若干操作难题,例如网络连接的频繁中断、数据传输速率不高、无线信号覆盖范围有限等情况。针对此类挑战,通过安装新的固件(即刷机包),能够有效应对上述问题,因为新固件或许已经针对这些普遍存在的问题进行了优化处理。不仅如此,固件升级还能开启一些隐藏的功能选项,或者兼容第三方固件,例如OpenWRT,从而让用户能够进行更深入的系统自定义配置及管理。 FWR310 V5.0升级软件20160301是该刷机包的明确版本标识,显示出这是针对FAST FWR310路由器推出的第五代固件,并且发布日期为2016年3月1日。此版本的更新内容可能涵盖以下几个方面: 1. 运行效能的调优:借助于对路由器处理流程与内存分配的改善,能够加快数据交换速率,减少响应时间,从而全面提升网络的工作效能。 2. 安全防护的强化:更新内容中可能融入了对新兴网络安全风险的防御机制,用以保障用户的资料安全。 3. 互操作性的扩展:可能增强了与更多设备及协议的适配能力,比如最新的无线通信标准或设备连接模式。 4. 运行稳定性的提升:修复了可能引发路由器系统崩溃或意外重启的已知故障,延长了设备的稳定运行周期。 5. 新特性集成:或许增添了提升用户体验的功能,例如远程操作控制、家长监管功能、服务质...

111,128

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Creator Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧