我使用Delphi 7,在Windows 7 32位操作系统上使用Outlook 2010。Delphi Outlook 2007/2010
我的问题是我无法检测到我的Outlook正在运行或没有运行。 我试过下面的代码。
uses
ComObj, ActiveX;
function IsObjectActive(ClassName: string): Boolean;
var
ClassID: TCLSID;
Unknown: IUnknown;
begin
try
ClassID := ProgIDToClassID(ClassName);
Result := GetActiveObject(ClassID, nil, Unknown) = S_OK;
except
Result := False;
end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
if IsObjectActive('Outlook.Application') then ShowMessage('Outlook is running !');
end;
使用上面的代码,delphi没有检测到Outlook正在运行。
你能告诉我有没有什么好的替代方法。在我的应用程序中,我使用的是Outlook Redemption,因此在Redemption中有什么,以便我可以检测到Outlook正在运行?
我想你正在运行德尔福(因此你的程序)或Outlook与提升的特权?当以管理员身份运行Delphi时,我可以复制该问题,而不是在正常运行时。 – MGH
如果您没有使用不同的高度/高程水平运行......在上面的示例中,您是否仅使用_start_ Outlook?在没有焦点切换之前,Outlook不会将自己注册到运行对象表中(通过getActiveObject查询)。 Delphi代码中的 –