AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Fenster "SHELLDLL_DefView" wird nicht immer gefunden...
Thema durchsuchen
Ansicht
Themen-Optionen

Fenster "SHELLDLL_DefView" wird nicht immer gefunden...

Ein Thema von Helmi · begonnen am 28. Sep 2012 · letzter Beitrag vom 1. Okt 2012
Antwort Antwort
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#1

Fenster "SHELLDLL_DefView" wird nicht immer gefunden...

  Alt 28. Sep 2012, 19:23
Hallo,

ich habe, wie ich schon in diesem Thread beschrieben, die Desktop-Icon-speichern und -herstellen-Funktionen aus Luckies LuckieDips übernommen.

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:
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;
Und zwar beinhaltet Progman noch einen gültigen Handle, aber DefView im Fehlerfall null.

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 DefView null.

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:
  Show;
  Hide;
Dann funktionierts jedes mal!
Gibts aber vielleicht noch eine andere, vielleicht sauberere Lösung?

[Edit 2]
Leider funktionierts nicht wirklich immer ...
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<

Geändert von Helmi (28. Sep 2012 um 21:51 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#2

AW: Fenster "SHELLDLL_DefView" wird nicht immer gefunden...

  Alt 29. Sep 2012, 18:24
*push*
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#3

AW: Fenster "SHELLDLL_DefView" wird nicht immer gefunden...

  Alt 1. Okt 2012, 11:58
*hüstel*
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Benutzerbild von Bummi
Bummi

Registriert seit: 15. Jun 2010
Ort: Augsburg Bayern Süddeutschland
3.470 Beiträge
 
Delphi XE3 Enterprise
 
#4

AW: Fenster "SHELLDLL_DefView" wird nicht immer gefunden...

  Alt 1. Okt 2012, 12:16
mir ist nicht klar was hiermit bezweckt wird
Delphi-Quellcode:
          If IsActiveDesktopActive then
            EnumChildWindows(DefView, @EnumDefViewProc, LPARAM(@DefView));
Thomas Wassermann H₂♂
Das Problem steckt meistens zwischen den Ohren
DRY DRY KISS
H₂ (wenn bei meinen Snipplets nichts anderes angegeben ist Lizenz: WTFPL)
  Mit Zitat antworten Zitat
Benutzerbild von Helmi
Helmi

Registriert seit: 29. Dez 2003
Ort: Erding, Republik Bayern
3.323 Beiträge
 
Delphi XE2 Professional
 
#5

AW: Fenster "SHELLDLL_DefView" wird nicht immer gefunden...

  Alt 1. Okt 2012, 12:25
mir ist nicht klar was hiermit bezweckt wird
Delphi-Quellcode:
          If IsActiveDesktopActive then
            EnumChildWindows(DefView, @EnumDefViewProc, LPARAM(@DefView));
ehrlich gesagt: keine Ahnung - hab ich aus LuckieDips so übernommen
mfg
Helmi

>> Theorie ist Wissen, dass nicht funktioniert - Praxis ist, wenn alles funktioniert und keiner weiss warum! <<
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:36 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz