我正在开发 Delphi 的扩展,我想获取 IDE 中所有打开的文件的列表, 如果我按下
Ctrl + B
,它就会列在缓冲区列表中。
我尝试了两种方法,但它们只列出了扩展项目中包含的文件,即使项目组不包含该项目。
class function IOTAUTils.GetOpenedEditorFiles : TArray<string>;
var
module : IOTAModule;
editor : IOTAEditor;
service : IOTAModuleServices;
begin
Result := [];
service := (BorlandIDEServices as IOTAModuleServices);
if Assigned(service) then begin
for var i := 0 to service.ModuleCount - 1 do begin
module := service.Modules[i];
for var j := 0 to module.GetModuleFileCount - 1 do begin
editor := module.GetModuleFileEditor(j);
Result := Result + [editor.FileName];
end;
end;
end;
end;
至少我可以用这种方法过滤掉不可见的打开文件:
EditViewCount > 0
class function IOTAUTils.GetOpenedEditBuffers: TArray<string>;
var
service : IOTAEditorServices;
it : IOTAEditBufferIterator;
buffer : IOTAEditBuffer;
begin
Result := [];
service := (BorlandIDEServices as IOTAEditorServices);
if Assigned(service) then begin
if (service.GetEditBufferIterator(it)) then begin
for var i := 0 to it.Count - 1 do begin
buffer := it.EditBuffers[i];
if buffer.EditViewCount > 0 then begin // if view count = 0, it is not shown between tabs
Result := Result + [buffer.FileName];
end;
end;
end;
end;
end;
获取所需的打开文件列表的正确方法是什么?
睡眠一段时间并重新启动 IDE 和 PC 后,使用上面的第二种方法
IOTAUtils.GetOpenedEditBuffers
仍然按预期工作。