Почему GetActiveObject не может обнаружить работающий экземпляр Outlook? - PullRequest
0 голосов
/ 23 декабря 2011

Я столкнулся с проблемой в моем 32-битном ПК с windows7 (на i3). У меня Outlook 2010 и Delphi 7 на нем.Я использую следующий код, чтобы определить, работает Outlook или нет.

ClassID := ProgIDToClassID(ClassName);
Result  := (GetActiveObject(ClassID, nil, Unknown) = S_OK);

Это не удается, т. Е. Результат становится ложным, но на других компьютерах это работает нормально.

Ошибка Яполучение MK_E_Unavailable.

Обновление:

Может быть, это происходит только со мной.

procedure TForm1.Button1Click(Sender: TObject);
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;
begin
  if IsObjectActive('Outlook.Application') Then
    ShowMessage('OutLook is there.')
  else
    ShowMessage('OutLook is not there.')
end;

Plz note OL работает и

  • Когда я запускаю созданный exe-файл, я получаю сообщение «OutLook is there».
  • , когда я запускаю из Delphi IDE, я получаю сообщение «OutLook is not there.»

Это происходит всегда, я использую Delphi 7 в Windows 7, работаю с Run as Admin.Пожалуйста, скажите мне, почему это происходит и как я могу это исправить.

В чем проблема Delphi 7 в Windows 7.

Пожалуйста, предложите.

Ответы [ 2 ]

0 голосов
/ 09 мая 2014

Я столкнулся с той же проблемой и нашел решение.

Это просто. Если Outlook уже запущен, он ДОЛЖЕН иметь те же права, что и процесс, который пытается его использовать.

Проще говоря, если вы используете Outlook с правами администратора, вы должны запустить свое приложение с правами администратора.

Ваша проблема должна заключаться в том, что вы используете Outlook без прав администратора и Delphi IDE с правами администратора. Поэтому, когда вы запускаете свое приложение из IDE, права не совпадают, и вы получаете сообщение об ошибке. Вот почему при запуске приложения вне среды IDE оно работает как положено. Потому что вне IDE ваше приложение работает без прав администратора.

Попробуйте сопоставить права. Это необходимо учитывать и для среды конечного пользователя.

Кроме того, UAC в Windows Vista и более поздних версиях, как известно, вызывает множество проблем с такими вещами. Если ничего не помогает, отключите UAC (контроль учетных записей, вы найдете его в настройках учетной записи) и посмотрите, что произойдет.

0 голосов
/ 23 декабря 2011

Вот запись для GetActiveObject.
http://msdn.microsoft.com/en-us/library/a276e30c-6a7f-4cde-9639-21a9f5170b62%28VS.85%29

Если вы хотите расшифровать ошибку, вам нужно выяснить, что означает HResult.
Wikipedia содержит ссылку на ERR.EXE утилиту от MS, которая преобразует код HResult в описание ошибки. Для COM HResults см .: http://matthewbass.com/2005/11/15/decoding-com-hresult-error-codes/.
примечание ссылка на скачивание в статье не работает, вот рабочая ссылка: http://www.softlookup.com/display.asp?id=7113 Как только вы узнаете, в чем заключается ошибка, обновите вопрос.

Если вы хотите узнать, запущен ли процесс без использования OLE, см .: Как проверить, запущен ли процесс с использованием Delphi?

Другой вариант может использовать FindWindowEx для проверки определенных окон Outlook 2010.
Вы можете использовать WinID (клон spy ++) , чтобы увидеть окна, используемые Outlook 2010.

...