如何捕获从此菜单发送的Windows消息?

在大多数应用程序中,当您单击某个MenuItem时,会发送一个WindowsMessage(通常是WM_COMMAND ),其中wParam表示所选MenuItem的ID。

有一个程序有一个窗口菜单(通过点击标题栏上的程序图标可以访问该菜单),
我想find什么是当我从该菜单中select一个特定的MenuItem发送的WindowsMessage。

Windows XP中的命令提示符窗口:(cmd.exe)

这里是窗口菜单:

我想在那里捕获一个MenuItem的WindowsMessage和wParam,
例如“粘贴”MenuItem。
(但不只是它..任何其他可能也是如此)

这是我试过的:

方法1:

我总是尝试的第一种方法是使用Spy ++
问题是当我尝试为这个特定的程序(DOS窗口)logging消息时,Spy ++给了我这个消息框:

由于某些原因,Spy ++不会为这个程序捕获WindowsMessages。

所以我继续使用第二种方法

方法2:

资源黑客 (ResHacker.exe)也很好find从点击MenuItems发送的WindowsMessage,它很容易。

如果你运行Resource Hacker,然后用它打开一些EXE文件,
你通常看到这些树,其中之一被称为“菜单”,
它包含了所有的细节,包括wParam:

问题是,当我尝试在cmd.exe上使用Resource Hacker时,
我得到这个:

可以看出,没有“菜单”树。

我的问题:

还有其他的方法,除了我通常使用的两种方法,
可以用来查找在DOS窗口的窗口菜单中的“粘贴”MenuItem发送的WindowsMessage (和wParam )?

0xfff1是wParam,所以在C#中(你没有指定你正在使用的语言,但它应该很容易翻译):

 [DllImport("User32.dll")] public static extern int SendMessage(IntPtr hWnd, int uMsg, int wParam, uint lParam); public const int WM_KEYDOWN = 0x01000; void PasteInCommandPrompt(IntPtr hWnd) { SendMessage(handle, WM_COMMAND, 0xfff1, 0); } 

http://blogs.msdn.com/b/bill/archive/2012/06/09/programmatically-paste-clipboard-text-to-a-cmd-window-c-or-c.aspx