Tôi đã cố gắng sử dụng cơ sở hạ tầng FutureWindows của Tomazy (xem câu trả lời của mình tại Delphi GUI Testing and Modal Forms hoặc trang chủ của công cụ tại https://github.com/tomazy/DelphiUtils), nhưng muốn biết liệu nó có thể được sử dụng với hộp thoại mở tệp chuẩn của Windows không? Họ dường như không được thừa hưởng từ TControl, mà Infra FutureWindows dường như giả định (trừ khi tôi đã hiểu lầm nó). Những gì tôi muốn làm là về cơ bản chỉ cần chọn một tập tin trong một OpenFileDialog được mở ra một cách khiêm tốn bởi một lệnh trong thử nghiệm của tôi, nhưng vẫn chưa thể tìm ra cách để làm điều này.(Làm cách nào) Tôi có thể sử dụng FutureWindows với các hộp thoại mở tập tin chuẩn không?
Trả lời
Sử dụng công cụ như Spy++ để tìm hiểu tên cửa sổ là gì. Ví dụ, trên máy tính Windows 7 của tôi, tên lớp cửa sổ cho hộp thoại mở tệp hệ thống là #32770 (Dialog)
.
giải pháp hiện tại của tôi là dưới đây:
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);
Vì vậy, về cơ bản gửi một thông điệp sử dụng Windows API. Ý tưởng (và ID 1148) được tìm thấy tại đây: http://social.msdn.microsoft.com/forums/en-US/winforms/thread/62d5db14-5497-4ceb-8af0-d7f81732e937/
Có thể có các giải pháp tốt hơn, nhưng điều này có vẻ tốt cho tôi ít nhất là bây giờ. Cảm ơn các ý kiến cho đến nay!
Tôi không thể thấy rằng bạn sẽ nhận được giải pháp tốt hơn điều này. –
Đây là một bản tóm tắt của giải pháp thực tế cuối cùng (hiện tại), nhưng tôi đã đánh dấu câu trả lời của @DavidHeffernan ở trên làm câu trả lời để cấp cho sự công nhận giúp đỡ trong việc trỏ đến một hướng hữu ích. – DelphiUser
- 1. Làm thế nào tôi có thể dừng các hộp thoại mở gvim?
- 2. JNLP FileSaveService mở hộp thoại mở tập tin
- 3. Hộp thoại trình duyệt thư mục như hộp thoại mở tập tin
- 4. Làm thế nào để xác định đường dẫn bằng cách sử dụng hộp thoại mở tập tin trong vb.net?
- 5. Cách sử dụng hộp thoại mở tệp trong VB 6?
- 6. Cách sử dụng hộp thoại xác nhận chuẩn Delphi nhưng với hộp kiểm "Không hỏi lại tôi"?
- 7. Mở hộp thoại tập tin trên <a> thẻ
- 8. Giới hạn các tập tin có thể được chọn bằng hộp thoại Open FIle
- 9. Làm thế nào để thay đổi đường dẫn hộp thoại mở tập tin mặc định
- 10. Cách lấy tiêu điểm hộp thoại tập tin Tkinter
- 11. Lưu hộp thoại tập tin trong MVC
- 12. android không thể mở tập tin
- 13. Tôi có thể định vị hộp tin nhắn (Biểu mẫu) của net hoặc các hộp thoại chung không?
- 14. Làm thế nào tôi có thể sử dụng các câu lệnh đã chuẩn bị trong CodeIgniter
- 15. (Lưu hộp thoại) Làm thế nào để thay đổi phần mở rộng tập tin tự động vào thay đổi bộ lọc tập tin trong Vista/Win7?
- 16. Làm cách nào tôi có thể sử dụng GHCi với cabal 1.17 hộp cát mới?
- 17. góc cạnh - hộp thoại có thể sử dụng lại
- 18. Làm cách nào để dừng tập lệnh khi sử dụng Hộp thoại jQuery?
- 19. Tôi có thể sử dụng git diff trên các tập tin không được theo dõi không?
- 20. Làm cách nào để hiển thị hộp thoại "Mở bằng"?
- 21. Sử dụng CMake, làm thế nào tôi có thể concat tập tin và cài đặt chúng
- 22. Selenium WebDriver và trình duyệt chọn hộp thoại tập tin
- 23. Làm cách nào tôi có thể mở hộp thoại chi tiết thay đổi TFS bằng cách sử dụng bổ trợ Visual Studio?
- 24. Tôi làm cách nào để chuyển Bộ sưu tập sang cửa sổ hộp thoại phương thức?
- 25. Delphi XE2: Làm thế nào tôi có thể chơi các tập tin video với firemonkey
- 26. Làm cách nào để thêm ComboBox có thể chỉnh sửa vào Hộp thoại chung của Vista?
- 27. Tôi có thể sử dụng php bằng điện thoại không?
- 28. Mở hộp thoại mới từ hộp thoại trong qt
- 29. Tại sao ứng dụng iOS của tôi không hiển thị trong hộp thoại "Mở trong" của các ứng dụng khác?
- 30. Làm thế nào tôi có thể sử dụng tính năng nhận dạng giọng nói mà không có hộp thoại gây phiền nhiễu trong điện thoại Android
Cảm ơn, tôi thực sự lưu ý rằng FutureWindows có điều này như một const (MESSAGE_BOX_WINDOW_CLASS) và do đó tôi có quyền truy cập vào hộp thoại dưới dạng giao diện IWindow (FutureWindows). Bây giờ vấn đề của tôi là để có được giao diện này để đối tượng, bởi vì giao diện chỉ cung cấp một phương pháp AsControl, mà tôi nghi ngờ sẽ làm việc kể từ khi hộp thoại không phải là một TControl. Nếu không có nó, tôi không biết (chưa) làm thế nào để thiết lập các tài sản FileName của hộp thoại ... – DelphiUser
Bạn là chính xác, 'AsControl' không thể làm việc. Bạn có thể sử dụng 'EnumChildWindows' để truy tìm cửa sổ mục tiêu, nhưng có thể có cách dễ dàng hơn. Bạn không thể chế nhạo cái này? –
Tôi googled xung quanh một chút và kết thúc với điều này, mà dường như làm việc: Windows.SetDlgItemText (DlgHandle, 1148, PChar (FileName)); Sử dụng điều này: http://social.msdn.microsoft.com/forums/en-US/winforms/thread/62d5db14-5497-4ceb-8af0-d7f81732e937/ Vì vậy, về cơ bản tôi gửi một thông báo để đặt tên tệp thành điều khiển chính xác (ID 1148 hoạt động ít nhất trên Windows 7 của tôi :)) – DelphiUser