MN_ENDMENU是什么意思,应用在此有哪些实例代码可供参考

一品梅 2013-10-17 04:52:21
TrafficMsg.PostMessage(hand,500,MsgId,0);//向目标窗口发送消息

using System;
using System.Runtime.InteropServices;

namespace QQloginCont
{
/// <summary>
/// 用于在不同的窗体中发送消息
/// </summary>
public class TrafficMsg
{
public TrafficMsg()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
/// <summary>
/// 提供Win32的消息发送,发送后等到处理完成然后返回
/// </summary>
/// <param name="hWnd">要发送消息窗体的句柄</param>
/// <param name="Msg">需要发送的指定消息</param>
/// <param name="wParam">需要发送的指定附加消息</param>
/// <param name="lParam">需要发送的指定附加消息</param>
/// <returns></returns>
[DllImport("User32.dll",EntryPoint="SendMessage")]
public static extern int SendMessage(int hWnd,int Msg,int wParam,int lParam);
/// <summary>
/// 提供Win32的消息发送,发送后立即返回
/// </summary>
/// <param name="hWnd">要发送消息窗体的句柄</param>
/// <param name="Msg">需要发送的指定消息</param>
/// <param name="wParam">需要发送的指定附加消息</param>
/// <param name="lParam">需要发送的指定附加消息</param>
/// <returns></returns>
[DllImport("User32.dll",EntryPoint="PostMessage")]
public static extern bool PostMessage(int hWnd,int Msg,int wParam,int lParam);
}
}

TrafficMsg.PostMessage(hand,500,MsgId,0);//向目标窗口发送消息
我换算成16进制又算了一下500是0x01F4,MN_ENDMENU 0x01F4在这里我想知道MN_ENDMENU是什么意思,还有PostMessage的第二个参数不同的枚举值功能列表是什么
...全文
291 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
一品梅 2013-10-18
  • 打赏
  • 举报
回复
这是元数据
namespace System.Windows.Forms
{
    // 摘要:
    //     实现 Windows 消息。
    public struct Message
    {

        // 摘要:
        //     确定 System.Windows.Forms.Message 的两个实例是否不相等。
        //
        // 参数:
        //   a:
        //     要与 b 进行比较的 System.Windows.Forms.Message。
        //
        //   b:
        //     要与 a 进行比较的 System.Windows.Forms.Message。
        //
        // 返回结果:
        //     如果 a 和 b 不表示同一个 System.Windows.Forms.Message,则为 true;否则为 false。
        public static bool operator !=(Message a, Message b);
        //
        // 摘要:
        //     确定 System.Windows.Forms.Message 的两个实例是否相等。
        //
        // 参数:
        //   a:
        //     要与 b 进行比较的 System.Windows.Forms.Message。
        //
        //   b:
        //     要与 a 进行比较的 System.Windows.Forms.Message。
        //
        // 返回结果:
        //     如果 a 和 b 表示同一个 System.Windows.Forms.Message,则为 true;否则为 false。
        public static bool operator ==(Message a, Message b);

        // 摘要:
        //     获取或设置消息的窗口句柄。
        //
        // 返回结果:
        //     消息的窗口句柄。
        public IntPtr HWnd { get; set; }
        //
        // 摘要:
        //     指定消息的 System.Windows.Forms.Message.LParam 字段。
        //
        // 返回结果:
        //     消息的 System.Windows.Forms.Message.LParam 字段。
        public IntPtr LParam { get; set; }
        //
        // 摘要:
        //     获取或设置消息的 ID 号。
        //
        // 返回结果:
        //     消息的 ID 号。
        public int Msg { get; set; }
        //
        // 摘要:
        //     指定为响应消息处理而向 Windows 返回的值。
        //
        // 返回结果:
        //     消息的返回值。
        public IntPtr Result { get; set; }
        //
        // 摘要:
        //     获取或设置消息的 System.Windows.Forms.Message.WParam 字段。
        //
        // 返回结果:
        //     消息的 System.Windows.Forms.Message.WParam 字段。
        public IntPtr WParam { get; set; }

        // 摘要:
        //     创建一个新的 System.Windows.Forms.Message。
        //
        // 参数:
        //   hWnd:
        //     该消息的窗口句柄。
        //
        //   msg:
        //     消息 ID。
        //
        //   wparam:
        //     消息 wparam 字段。
        //
        //   lparam:
        //     消息 lparam 字段。
        //
        // 返回结果:
        //     System.Windows.Forms.Message,表示已创建的消息。
        public static Message Create(IntPtr hWnd, int msg, IntPtr wparam, IntPtr lparam);
        //
        //
        // 参数:
        //   o:
        //
        // 返回结果:
        //     如果 obj 和该实例具有相同的类型并表示相同的值,则为 true;否则为 false。
        public override bool Equals(object o);
        //
        //
        // 返回结果:
        //     一个 32 位有符号整数,它是该实例的哈希代码。
        public override int GetHashCode();
        //
        // 摘要:
        //     获取 System.Windows.Forms.Message.LParam 值,并将其转换为对象。
        //
        // 参数:
        //   cls:
        //     用于创建实例的类型。必须将该类型声明为结构类型。
        //
        // 返回结果:
        //     System.Object,表示 cls 参数利用消息的 System.Windows.Forms.Message.LParam 字段中的数据来指定的类的实例。
        public object GetLParam(Type cls);
        //
        public override string ToString();
    }
}
一品梅 2013-10-18
  • 打赏
  • 举报
回复
不好意思,我看代码才发现好像这块是编程自定义的
protected override void DefWndProc(ref System.Windows.Forms.Message m)
		{
			switch(m.Msg)
			{
				case 500://向窗体中添加消息
					string MsgToAdd;
					MsgToAdd=ShareDate.Msg[m.WParam.ToInt32()].ToString();
					AddMsg(MsgToAdd);
					break;
				case 501://将本窗体激活
					this.Activate();
					break;
				default:
					base.DefWndProc(ref m);
					break;
			}
		}
一品梅 2013-10-18
  • 打赏
  • 举报
回复
哎,这东西太难读懂了,关于第二个消息参数各个系统预设枚举值的含义根本无从查阅。好郁闷啊。 难道是500换算16进制出错了
赵4老师 2013-10-17
  • 打赏
  • 举报
回复
VS IDE中,在不明白的符号上点鼠标右键,选转到定义。
ztenv 2013-10-17
  • 打赏
  • 举报
回复
引用 3 楼 max_min_ 的回复:
参考这个看看 http://blogs.360.cn/blog/dump-to-poc-to-win32k-kernel-privilege-escalation-vulnerability/ 例程接受一个MN_ENDMENU消息时,且menu状态是model less的(通过menu state来判断),xxxMenuWindowProc就会调用xxxMNEndMenuState销毁线程的MenuState, 同时也销毁和清 空当前线程popup menu相关的spwndPopupMenu对象。
学习学习
max_min_ 2013-10-17
  • 打赏
  • 举报
回复
参考这个看看 http://blogs.360.cn/blog/dump-to-poc-to-win32k-kernel-privilege-escalation-vulnerability/ 例程接受一个MN_ENDMENU消息时,且menu状态是model less的(通过menu state来判断),xxxMenuWindowProc就会调用xxxMNEndMenuState销毁线程的MenuState, 同时也销毁和清 空当前线程popup menu相关的spwndPopupMenu对象。
一品梅 2013-10-17
  • 打赏
  • 举报
回复
但是我未找到msdn上MN_ENDMENU的含义,郁闷啊
max_min_ 2013-10-17
  • 打赏
  • 举报
回复

110,538

社区成员

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

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

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