Delphi XE应用程序如何在另一个应用程序窗口中显示一个popup菜单? 这个想法是一个辅助types的应用程序,在后台运行。 在注册的热键上,应用程序需要在文字光标或鼠标光标附近显示popup式菜单。
这样做的应用程序很常见,下面是一个由AutoHotkey创build的菜单,并显示在文本编辑器中:
我想我要问的是:如何在任意屏幕位置显示一个popup式菜单, 而不需要连接到Delphi控件?
用适当的菜单项创建一个TPopupMenu
。 当你需要显示它只需调用Popup
窗口左上角的位置在屏幕坐标。
PopupMenu1.Popup(X, Y);
@DavidHeffernan回答了你的问题,但你可能没有问正确的问题。
让我们来看看你给出的例子:用户运行一些arbirary应用程序,你希望能够检测到一个热键,显示一个菜单,然后根据所选择的菜单项(甚至可能是用户的上下文,作为光标下的单词)。 这比简单地在任意屏幕坐标处显示菜单更复杂。
我的建议是使用AutoHotKey,而不是试图在一些其他的编程语言复制这个。 如果您不知道这一点,您的代码可能会运行AutoHotKey脚本。 IIRC,你可以编译AHK脚本,所以你不需要安装AHK,只需要编译脚本。 AHK可能不是最优雅的解决方案,但它有深度和成熟度。
如果这是不可能的,那么我建议你研究Windows钩子和DLL注入。 除非你能找到一些预先存在的代码或框架,否则这将需要相当多的工作。
这种复杂性的原因是什么? 要顺利地增加另一个程序(不会遇到焦点问题等),您希望将代码作为其他程序的一部分运行。 这个机制可以通过DLL注入完成。 但是,这只是第一步。 一旦你的代码运行在正确的上下文中,那么你的代码必须与“主机”程序互操作。 这可能会非常棘手(如果您对Windows消息传递和Windows API有深入的了解,这会有所帮助)。 如果你想让这个任意程序顺利运行,那就更难了。