在大多数应用程序中,当您单击某个MenuItem时,会发送一个WindowsMessage(通常是WM_COMMAND
),其中wParam
表示所选MenuItem的ID。
有一个程序有一个窗口菜单(通过点击标题栏上的程序图标可以访问该菜单),
我想find什么是当我从该菜单中select一个特定的MenuItem发送的WindowsMessage。
Windows XP中的命令提示符窗口:(cmd.exe)
这里是窗口菜单:
我想在那里捕获一个MenuItem的WindowsMessage和wParam,
例如“粘贴”MenuItem。
(但不只是它..任何其他可能也是如此)
这是我试过的:
我总是尝试的第一种方法是使用Spy ++ 。
问题是当我尝试为这个特定的程序(DOS窗口)logging消息时,Spy ++给了我这个消息框:
由于某些原因,Spy ++不会为这个程序捕获WindowsMessages。
所以我继续使用第二种方法
资源黑客 (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); }