【问题标题】:Is there a way to get the text and cursor position from the formula bar in Excel?有没有办法从 Excel 的公式栏中获取文本和光标位置?
【发布时间】:2011-02-26 01:40:59
【问题描述】:

我想从 Excel 的公式栏中(来自进程中的插件)获取 当前(可能未提交)文本。所有“常规”技术都不起作用,例如 GetWindowText(...) 等。

关于光标位置: GetCaretPos 确实有效(返回插入符号的 x,y 坐标),但 EM_CHARFROMPOS 无效(总是返回 0),所以这是一条死胡同。

此功能是否通过 COM 或以任何方式暴露给 XLL API?

编辑:我还想指出,我认为我的大部分问题都来自这样一个事实,即公式栏(至少我 99% 确定)不是编辑控件,这可以通过查看它的窗口类。

【问题讨论】:

  • 您能否回到开头并描述您实际想要实现的目标,因为可能有不止一种方法可以剥去这只特殊(隐喻)猫的皮。
  • 我不认为有任何其他的说法。我想要公式栏中的当前文本和光标位置。我的问题是,是否可以通过 Excel COM API 或 XLL API(而不是通过可怕的黑客攻击)来做到这一点,但看起来并非如此。

标签: c++ winapi excel xll


【解决方案1】:

公式栏和 Office 中的大多数控件实际上都是非标准的。发送标准消息不会成功。

我想唯一的选择是对可执行代码进行逆向工程。

【讨论】:

    【解决方案2】:

    SteveN,哪个版本的 Excel ? 该控件将是一个窗口。 Office 2010 在这方面“更好”,使用了更多标准控件。 您可以使用 Spy 来查看发送到该控件的所有消息,并尝试模仿这些消息以查看您得到的信息。不过路很长。

    【讨论】:

    • 没有解决方案适用于 2003+ 以后的所有版本 2007 在许多重要方面与 2003 大不相同。
    • 我对 2003 年和 2007 年做了一些研究,两个版本的伪编辑框非常相似。两者都有 CS_OWNDC 这可能表明实施者选择直接进行所有绘图。这对您不利,因为它可能只是一个普通的旧窗户。我找不到任何证据表明它是一个编辑框。来自 Spy 的消息日志也是这样说的。我怀疑你已经死在水里了。
    • 对控件进行子分类也不会让您有任何收获,因为您无法在不抓取副本的情况下“看到”DC 上实际绘制的内容并且(停在那里,痛苦随之而来) .
    猜你喜欢
    • 1970-01-01
    • 2021-07-10
    • 1970-01-01
    • 1970-01-01
    • 2022-11-18
    • 2023-04-09
    • 2022-01-15
    • 2012-01-17
    • 1970-01-01
    相关资源
    最近更新 更多