Информация об изменениях

Сообщение Список открытых окон проводника от 15.03.2023 14:42

Изменено 15.03.2023 14:48 xteam777

Список открытых окон проводника
Доброго времени.
Собственно пытаюсь получить открытые окна проводника. Возникает ошибка при обращении к Item.
Что не так?

Debugger Exception Notification
---------------------------
Project Project4.exe raised exception class $C0000005 with message 'access violation at 0x00c6fd3c: read of address 0x00000000'.
---------------------------
Break Continue Copy Help
---------------------------


uses SHDocVw;

Function GetCurrentExplorerDirectory: String;
var
  ShellWindows: IShellWindows;
  i: Integer;
  h: HWND;
begin
  Result := '';

  {Explorer - глобальная переменная для доступа ко всем откр.окнам Explorer}
  ShellWindows := CoShellWindows.Create;

  {Цикл прохода по всем откр.в настоящий момент окнам Explorer}
  for i := 0 to ShellWindows.Count - 1 do
    {Если очередное окно пребывает сейчас в фокусе}
    if GetForegroundWindow = (ShellWindows.Item(i) as IWebbrowser2).HWND then <----------------------------------- ВОТ ТУТ ОШИБКА
    begin
      {Получаем его Handle (дескриптор окна) }
      h := (ShellWindows.Item(i) as IWebbrowser2).HWND; 
      {Получаем адресную локацию,т.е путь к каталогу }
      Result := (ShellWindows.Item(i) as IWebbrowser2).LocationUrl;
      {Замена левосторонних слешев в пути на классич. правосторонний разделитель}
      Result := StringReplace(Result, '/','\', [rfReplaceAll]);
      {Удаляем 1-ые лишнии 8 символов (http:///)}
      Delete(Result, 1, 8);
      {Замена URL-представления пробела %20 на нормальный символ #32}
      Result := IncludeTrailingPathDelimiter(StringReplace(Result, '%20', ' ', [rfReplaceAll]));
    end;
end;
Список открытых окон проводника
Доброго времени.
Собственно пытаюсь получить открытые окна проводника. Возникает ошибка при обращении к Item.
Что не так?

Debugger Exception Notification
---------------------------
Project Project4.exe raised exception class $C0000005 with message 'access violation at 0x00c6fd3c: read of address 0x00000000'.
---------------------------
Break Continue Copy Help
---------------------------


uses SHDocVw;

Function GetCurrentExplorerDirectory: String;
var
  ShellWindows: IShellWindows;
  i: Integer;
  h: HWND;
begin
  Result := '';

  {Explorer - глобальная переменная для доступа ко всем откр.окнам Explorer}
  ShellWindows := CoShellWindows.Create;

  {Цикл прохода по всем откр.в настоящий момент окнам Explorer}
  for i := 0 to ShellWindows.Count - 1 do
    {Если очередное окно пребывает сейчас в фокусе}
    if GetForegroundWindow = (ShellWindows.Item(i) as IWebbrowser2).HWND then <----------------------------------- ВОТ ТУТ ОШИБКА
    begin
      {Получаем его Handle (дескриптор окна) }
      h := (ShellWindows.Item(i) as IWebbrowser2).HWND; 
    end;
end;