【问题标题】:How Imitate a [Ctrl+Left mouse click] on the center of the form or open another program and type in a word?如何在表单中心模拟[Ctrl+鼠标左键单击]或打开另一个程序并输入一个单词?
【发布时间】:2025-12-01 08:00:02
【问题描述】:

巴比伦词典和其他一些词典允许在任何 Windows 程序中单击任何单词 并自动识别光标下的单词,并在已安装的词典中搜索该单词时立即打开词典窗口。 另一方面,您可以打开字典,输入您的单词并按 Enter,结果将是相同的。

有一个 Delphi 表单,包含一个文本标签,例如带有单词“Automaton”。

我的问题是:

如何将一个单词从我的 Delphi 应用程序直接发送到字典窗口,就像手动输入并按 Enter 一样?

最好的办法是通过windows机制发送一些消息,但如果太复杂,还有另一种解决方案,所以第二个答案:正如我所描述的,我们需要模拟一个[Ctrl+鼠标左键]点击一个表单,其中这个词显示在表单上 [我的 Delphi 应用程序屏幕上的视觉标签],确切地说,在这个标签的某个中心像素上。

您能否提供一个建议,如何在 Delphi 中做一件事或另一件事?

** 编辑: AppActivate 的问题是:Babylon dict 有一个位于托盘中的守护进程部分。 在任务管理器中,应该输入文本的真实窗口也被命名为“Babylon”。 因此 AppActivate('Babylon') 尝试将应用程序的非可视部分置于前面。

您对如何确定窗口句柄或应用程序的真实视觉部分有什么建议吗?在任务管理器中,我重复视觉和非视觉部分都命名为“Babylon”。

【问题讨论】:

  • 试过 'SendKeys.pas' 和 AppActivate() 但它似乎不适用于巴比伦
  • 在我看来,这实际上是关于巴比伦而不是德尔福。像这样的任何接口问题的简单部分通常在您控制的代码中。困难的部分在您无法控制的代码中。我会尝试巴比伦文档/支持论坛等。
  • 好的,但是还有什么方法可以将光标定位在delphi表单标签的中间并模拟Ctrl+鼠标左键单击该像素?
  • @EugeneP 如果你的应用有焦点,那么这个动作肯定会在你的应用而不是巴比伦结束。
  • @EugeneP 你为什么要这样做?

标签: windows delphi delphi-7 windows-messages


【解决方案1】:

我只能提供一些见解和建议......

有些应用程序会“拦截”键盘和鼠标指令,如果它们被软件模仿,则基本上会“取消”它们。一般来说,您只会在适当的防病毒软件(如卡巴斯基)中看到这一点……但是:

一些(不是很多,但有一些)程序挂钩键盘和鼠标输入的方式,作为副作用,行为方式相同。如果您尝试了上述 cmets 给出的所有建议,但无法让巴比伦触发动作,那么巴比伦的行为可能与我描述的一样。

如果我怀疑是真的,那么您尝试的方法根本不可能(至少,不使用任何简单的 Pascal 代码本身...... ASM 可能能够做到,但这超出了我的知识范围)。

更好的解决方案可能是进行一些研究,看看您是否可以使用以下任何选项: 1) Babylon 是否有可用于将应用程序与它连接的管道或 API? 2) 您需要的 Babylon 的特定功能是否可以通过作为 Babylon 的一部分分发的一个(或多个)DLL 文件访问? 3) 除了使用 Babylon 来满足您的需要之外,还有其他选择吗?

我知道这不是一个这样的答案(当然不是你想听到的),但它可能会为你指明一个更好的方向。

【讨论】:

    最近更新 更多