ros*_*mcm 4 delphi message sendmessage findwindow
我有一个应用程序,可以选择打开PDF后创建它们.如果两个报告连续生成相同的名称,如果第一个acrobat副本仍然打开PDF,则第二次尝试失败,因此在我编写PDF之前,我检查(使用FindWindow)具有文档名称的窗口.如果找到一个,我发出SendMessage WM_Close.
这工作正常,但我正在做一些其他测试,并使用Word来"编辑"PDF,保持打开,这样我就可以测试应用程序无法编写PDF文件时的行为.现在,当我的应用程序试图关闭窗口时,Word会弹出一个"你想要保存"对话框.如果我单击取消,Word仍保持打开状态,我的应用程序继续运行,我可以测试它在遇到无法写入的文件时表现得理智.
一切都很好,但它已经提醒我,使用SendMessage WM_CLOSE关闭另一个应用程序将阻止我的应用程序,如果其他应用程序弹出模式对话框.有没有办法解决这个问题 - 即关闭其他应用程序的更有力(但不是太强大)的方式?或者"关闭并在必要时单击取消".或者我应该使用异步消息?
不要强迫任何应用程序关闭,可能有其他文件打开用户正在查看等...您可以使用SendMessageTimeout等待返回WM_CLOSE合理的时间,然后继续失败或成功..
var
Word: HWND;
msgResult: DWORD;
begin
...
SendMessageTimeout(Word, WM_CLOSE, 0, 0, SMTO_NORMAL, 5000, msgResult);
if IsWindow(Word) then begin
// bummer! Application is open...
Run Code Online (Sandbox Code Playgroud)