Сообщение Список открытых окон проводника от 15.03.2023 14:42
Изменено 15.03.2023 14:44 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
---------------------------
Собственно пытаюсь получить открытые окна проводника. Возникает ошибка при обращении к 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
---------------------------
Собственно пытаюсь получить открытые окна проводника. Возникает ошибка при обращении к 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;