(Как) Могу ли я использовать FutureWindows со стандартными диалогами открытия файлов? - PullRequest
5 голосов
/ 23 февраля 2012

Я пытался использовать инфраструктуру Tomazy FutureWindows (см. Его ответ на Delphi GUI Testing и модальных формах или на месте инструмента на https://github.com/tomazy/DelphiUtils),, но хотел бы знать, если и как его можно использовать со стандартными диалоговыми окнами открытия файлов Windows? Похоже, они не наследуют от TControl, что, по-видимому, предполагается в инфраструктуре FutureWindows (если только я ее не понял).

Что я хотел бы сделать, так это просто выбрать файл в OpenFileDialog, который открывается модально командой в ходе моего тестирования, но пока не смог понять, как это сделать.

Ответы [ 2 ]

4 голосов
/ 23 февраля 2012

Используйте инструмент типа Spy ++ , чтобы узнать, как называется класс окна.Например, на моем компьютере с Windows 7 имя класса окна для диалогового окна открытия системного файла: #32770 (Dialog).

3 голосов
/ 24 февраля 2012

Мое текущее решение ниже:

TFutureWindows.Expect(MESSAGE_BOX_WINDOW_CLASS)
  .ExecProc(
    procedure (const AWindow: IWindow)
    var
      DlgHandle: HWND;
      FileName: string;
    begin
      FileName := ExpandFileName('myFileToUse.txt');
      DlgHandle := AWindow.GetHandle;
      Windows.SetDlgItemText(DlgHandle, 1148, PChar(FileName));
    end
    )
  .ExecSendKey(VK_RETURN);

Итак, отправка сообщения с использованием Windows API. Идеи (и ID 1148) были найдены здесь: http://social.msdn.microsoft.com/forums/en-US/winforms/thread/62d5db14-5497-4ceb-8af0-d7f81732e937/

Возможны более эффективные решения, но, по крайней мере, сейчас, мне кажется, этого вполне достаточно. Спасибо за комментарии до сих пор!

...