Вопрос, поставленный пользователем, касается возможности закрытия документа MS Word, используя процессный идентификатор, полученный с помощью функции ShellExecuteEx. Однако, стоит отметить, что процессный идентификатор, полученный таким образом, не позволяет напрямую управлять окнами или документами приложения. Вместо этого, можно использовать COM-объекты для взаимодействия с документом и его закрытия.
Подтвержденный ответ
Для закрытия документа MS Word можно использовать автоматизацию Word, подключившись к COM-объекту Word и используя его API для закрытия нужного документа. Пример кода на Object Pascal для Delphi, демонстрирующий это:
unit VclWordComObjectDemoMain;
interface
uses
Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes,
Vcl.Graphics, Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, System.Win.ComObj,
Word_TLB;
type
TForm1 = class(TForm)
Button1: TButton;
Memo1: TMemo;
procedure Button1Click(Sender: TObject);
private
MsWord: _Application;
public
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
var
SaveChanges: OleVariant;
OriginalFormat: OleVariant;
RouteDocument: OleVariant;
begin
try
MsWord := GetActiveOleObject('Word.Application') as _Application;
except
Memo1.Lines.Add('Word не был открыт или не было открытых документов.');
Exit;
end;
Memo1.Lines.Add('Подключение к Word выполнено.');
SaveChanges := wdDoNotSaveChanges;
OriginalFormat := EmptyParam;
RouteDocument := EmptyParam;
MsWord.ActiveDocument.Close(SaveChanges, OriginalFormat, RouteDocument);
end;
end.
Для использования функционала MS Word необходимо импортировать типовые библиотеки Word в свой проект Delphi. Это делается через меню Delphi: Component -> Import Component -> Import a type library, после чего выбирается нужная библиотека и создается соответствующая единица.
Альтернативный ответ и комментарии
В комментариях к коду обсуждается возможность выбора документа из списка, если открыто несколько документов, а также возможность управления видимостью Word при его запуске через OLE. Пользователь также упоминает проблему совместимости с различными версиями MS Word и предлагается использовать типовые библиотеки для старых версий, начиная с Word 97.
Выводы
Для закрытия документа MS Word в Delphi, используя автоматизацию, необходимо подключиться к COM-объекту Word и использовать методы его API. Процессный идентификатор, полученный через ShellExecuteEx, не позволяет управлять документами напрямую. Использование COM-объектов позволяет взаимодействовать с документами и закрывать их, но требует учета версий MS Word и возможностей, доступных в них.
Контекст вопроса заключается в поиске способа закрытия документа Microsoft Word через процессный идентификатор, полученный с использованием технологии автоматизации компонентов (COM) в среде разработки Delphi.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS