![]() |
Fenster "SHELLDLL_DefView" wird nicht immer gefunden...
Hallo,
ich habe, wie ich schon in diesem ![]() ![]() Meine Anwendung ist eigentlich nur ein TrayIcon mit einem Popup-Menü über die man u. a. die Positionen speichern und wiederherstellen kann. Die MainForm ist versteckt. Nun habe ich immer mal wieder das Problem, dass ich von der Function "SetDesktopIconPos" ein false zurück bekomme. Wenn ich aber dann die Function debugge, dann funktioniert die Function problemlos. Mit zuhilfenahme von ShowMessage bin ich nun auf die entsprechende problematische Stelle gekommen und auch auf die Situation gestoßen, bei der es funktioniert oder auch nicht funktioniert. Den "Fehler" schmeisst diese Function:
Delphi-Quellcode:
Und zwar beinhaltet
function GetDesktopListView: HWND;
var Progman: HWND; DefView: HWND; function EnumDefViewProc(Wnd: HWND; out DefView: HWND): BOOL; stdcall; var ClassName: array[0..255] of Char; begin DefView := Wnd; ClassName[0] := #0; GetClassName(Wnd, ClassName, 255); Result := lstrcmp(ClassName, 'SHELLDLL_DefView') <> 0; end; begin Result := 0; Progman := FindWindow('Progman', nil); If Progman <> 0 then begin DefView := FindWindowEx(Progman, HWND(nil), 'SHELLDLL_DefView', nil); If DefView <> 0 then begin If IsActiveDesktopActive then EnumChildWindows(DefView, @EnumDefViewProc, LPARAM(@DefView)); Result := FindWindowEx(DefView, 0, 'SysListView32', nil); end; end; end;
Delphi-Quellcode:
noch einen gültigen Handle, aber
Progman
Delphi-Quellcode:
im Fehlerfall null.
DefView
So funktionierts problemlos: Ich speichere die Positionien und stell die Positionen gleich wieder her... So gehts nicht: Ich speichere die Positionen, verschieb dann ein Icon auf dem Desktop und versuch dann die Positionen wieder herzustellen. In diesem Fall ist
Delphi-Quellcode:
null.
DefView
Ich müsste also irgendwie den Fokus (meines Erachtens) vom Desktop weg bekommen. Oder ist irgend etwas anderes schuld daran dass das Fenster "SHELLDLL_DefView" nicht gefunden werden kann in diesem speziellen Fall? [Edit] Wenn ich jetzt vor dem Speichern, bzw. vor dem Wiederherstellen einmal folgendes ausführe:
Delphi-Quellcode:
Dann funktionierts jedes mal!
Show;
Hide; Gibts aber vielleicht noch eine andere, vielleicht sauberere Lösung? [Edit 2] Leider funktionierts nicht wirklich immer ... |
AW: Fenster "SHELLDLL_DefView" wird nicht immer gefunden...
*push*
|
AW: Fenster "SHELLDLL_DefView" wird nicht immer gefunden...
*hüstel*
|
AW: Fenster "SHELLDLL_DefView" wird nicht immer gefunden...
mir ist nicht klar was hiermit bezweckt wird
Delphi-Quellcode:
If IsActiveDesktopActive then
EnumChildWindows(DefView, @EnumDefViewProc, LPARAM(@DefView)); |
AW: Fenster "SHELLDLL_DefView" wird nicht immer gefunden...
Zitat:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:20 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz