Hallo,
ich habe mir vor einiger Zeit ein kleines Programm gebastelt, dass auf Klick einen Verzeichniswechel beim Windows Explorer erzwingt. Dazu frage ich im Programm ab, ob ein Verzeichnis Parameter mitgegben wurde oder nicht. Wenn ja wird umgehend die Verzeichniswechselroutine für Windows Explorer ausgeführt, sonst kommt stattdessen eine
GUI.
Leider funktioniert die Routine nach einiger Zeit auf manchen Rechner nicht mehr. Es kommt dann folgende Fehlermeldung:
Code:
---------------------------
Anwendungsfehler
---------------------------
Exception Exception EOleExceptionException EOleExceptionException EOleException in Modul Project1.exe bei 000887CE.
Unbekannter Fehler.
---------------------------
OK
---------------------------
Wenn ich den Rechner neustarte, dann funktioniert das wieder, bis nach paar Stunden es wieder nicht mehr geht.
Ich habe das komplette Testprojekt angehängt. Anbei der wichtigste Part:
Delphi-Quellcode:
program Project1;
uses
Forms,
Windows,
SysUtils,
SHDocVw,
ActiveX,
Unit1
in '
Unit1.pas'
{Form1};
{$R *.res}
procedure SwitchExplorerDirectory;
var
ShellWindows: IShellWindows;
i: Integer;
ClName:
array[0..64]
of Char;
Pfad: AnsiString;
wnd: hwnd;
WndIface: IDispatch;
WebBrowserApp: IWebBrowserApp;
begin
ShellWindows := CoShellWindows.Create;
if ShellWindows =
nil then
begin
OutputDebugString(PChar('
Fehler: "ShellWin = nil"'));
exit;
end;
for i := 0
to ShellWindows.Count-1
do
begin
OutputDebugString(PChar(IntToStr(i)));
WndIface := ShellWindows.Item(i);
if Assigned(WndIface)
then
begin
if Succeeded(WndIface.QueryInterface(IID_IWebBrowserApp, WebBrowserApp))
then
begin
OutputDebugString(PChar('
WebBrowserApp.hwnd('+IntToStr(WebBrowserApp.hwnd)+'
)'));
// <------HIER kommt der Fehler!!!!
end
else OutputDebugString(PChar(IntToStr(i)+'
: has no IID_IWebBrowserApp interface!'));
end
else OutputDebugString(PChar(IntToStr(i)+'
: "WndIface" not assigned!'));
end;
end;
begin
if ParamCount>0
then
begin
if not (SUCCEEDED(CoInitializeEx(
NIL, COINIT_APARTMENTTHREADED
or COINIT_DISABLE_OLE1DDE)))
then
begin
OutputDebugString(PChar('
Fehler: "CoInitializeEx" konnte nicht initialisiert werden!'));
halt;
end;
SwitchExplorerDirectory;
CoUninitialize;
end
else
begin
Application.Initialize;
Application.MainFormOnTaskbar := True;
Application.CreateForm(TForm1, Form1);
Application.Run;
end;
end.
Genaugenommen wird ein
Exception ausgelöst, wenn man das
Handle vom Explorer Fenster (WebBrowserApp.hwnd) abfragen möchte.
Ich bin irgendwie am Verzweifeln, warum es nach einiger Zeit nicht mehr funktioniert. Hat jemand so Idee woran es liegen könnte?
lg,
jus