【发布时间】:2012-03-06 15:23:10
【问题描述】:
由于桌面和资源管理器窗口的上下文菜单被禁用,我想做一些东西来恢复一些功能。我的想法是只要用户右键单击这些窗口之一,就在上下文菜单中列出内容(复制、粘贴、新建、打开方式等),然后在实际菜单中模拟适当的事件(文件->新,编辑->复制等)。它看起来不太漂亮,但希望它允许使用右键单击。
问题是我似乎无法获得实际菜单。我打开“我的文档”并尝试将子列表向下移至SysListView32,每次都调用GetMenuItemCount。大多数返回 -1,唯一的其他返回值是 0。
我应该如何获得(文件、编辑、查看...)菜单的句柄? 如果这不可能,有没有一种方法可以模拟用户在正常上下文菜单上单击某些内容,即使它已被禁用?
另外,有没有办法让它在桌面上工作?如果您在资源管理器窗口中查看它,您可以获得相同类型的东西,所以我认为可能有一种方法。
我正在运行 Windows XP,感谢您的帮助。
【问题讨论】:
-
一开始不禁用真实菜单不是更容易吗?
-
呃,实际上是学校董事会禁用了他们。我的论点是,首先禁用它们是没有意义的。不过有趣的故事是,不久前我确实有能力启用它们(并做任何你能想到的事情)(我告诉过他们)。我只是想让工作更容易。做文件>编辑桌面上的文件之类的事情很烦人。
-
你能在资源管理器窗口中打开桌面并以这种方式绕过它吗?您被禁止使用的只是您的桌面吗?
-
右键单击在桌面上不起作用,在任何资源管理器窗口(例如
My Documents)或窗口中的桌面上也不起作用。这是一个组策略;其他应用程序正常处理右键单击。 -
至于你的问题,你走错了路。
GetMenuItemCount需要HMENU但你一直在喂它HWND。那是行不通的。它也不会从不同的过程中工作。您可能会编写一个使用 shell COM API 的程序来显示 shell 项的上下文菜单。但是您的基本问题是愚蠢的团体政策。你真的需要解决这个问题。告诉做出决定的 IT 人员,我说他是个傻瓜,正在阻止你做任何有用的工作。 ;-)
标签: c++ winapi contextmenu explorer