【问题标题】:Select an item in combobox of another application在另一个应用程序的组合框中选择一个项目
【发布时间】:2019-11-25 06:59:09
【问题描述】:

我正在制作 Delphi 应用程序来控制其他应用程序。我需要在其他应用程序的 ComboBox 中一一选择项目并获取其文本。我使用 FindWindowEx 来找到那个 ComboBox。现在我可以找到 ComboBox,但我不知道如何在 ComboBox 中选择项目。

var
  ParentWindow: HWND;
  ChildWindow: HWND;
begin
  ParentWindow := FindWindow('TfrmMain', nil);
  if ParentWindow <> 0 then
  begin
    ChildWindow := FindWindowEx(ParentWindow, 0, 'TPageControl', nil);
    ChildWindow := FindWindowEx(ChildWindow, 0, 'TTabSheet', nil);
    ChildWindow := FindWindowEx(ChildWindow, 0, 'TfrmInnerView', nil);
    ChildWindow := FindWindowEx(ChildWindow, 0, 'TPanel', nil);
    ChildWindow := FindWindowEx(ChildWindow, 0, 'TComboBox', nil);
  end;
end;

我希望有人告诉我怎么做。

【问题讨论】:

  • 使用 UIAutomation
  • @David Heffeman,因为我是 Delphi 的初学者;可以给我一些容易理解的线索吗?
  • 首先使用网络搜索和我给你的关键字做一些研究。不要指望在 10 分钟内解决这个问题。如果您是一个完全的初学者,那么,恕我直言,目前这可能是一个太大的挑战。
  • 您可以send window messages 喜欢CB_GETCOUNTCB_GETLBTEXT,或者使用UI Automation interfaces。消息更容易处理,但需要跨进程边界手动封送内存缓冲区。 UI 自动化更复杂,但会为您处理封送处理。

标签: delphi-xe2


【解决方案1】:

如果 TfrmInnerView 的子窗口只有一个名为 TPanel 的类,则下面的代码可以正常工作。但是,如果您的 TfrmInnerView 子窗口有多个具有相同名称 TPanel 的类,则下面的代码只能找到第一个类 TPanel。我现在正在寻找找到二等舱的方法。如果有任何想法,我将不胜感激。

SendMessage(ComboHandle, CB_SETCURSEL, NewSelectionIndex, 0); 

使用:SendMessage(ChildWindow, CB_SETCURSEL, 1, 0);
我从 [What windows messages are used by Delphi to notice changes in a combo box?

获得此代码

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多