Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Win8: SHELLDLL_DefView wird nicht mehr gefunden (https://www.delphipraxis.net/179282-win8-shelldll_defview-wird-nicht-mehr-gefunden.html)

Helmi 24. Feb 2014 18:11

Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Hallo,

bei Win 8 (vermutlich schon bei Win 7) hab ich das Problem, dass ich
Delphi-Quellcode:
SHELLDLL_DefView
nicht mehr finde

Delphi-Quellcode:
  Progman := FindWindow('Progman', nil);

  If Progman <> 0 then
    begin
      DefView := FindWindowEx(Progman, HWND(nil), 'SHELLDLL_DefView', nil);
Bei XP kein Problem - gibt es das nicht mehr? - oder was wäre das passende Gegenstück bei Win 8?

hathor 24. Feb 2014 19:05

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Hier scheint eine Lösung zu sein:
http://www.experts-exchange.com/Prog..._26783723.html

Luckie 24. Feb 2014 19:12

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Was hast du denn vor?

Helmi 24. Feb 2014 19:19

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Zitat:

Zitat von Luckie (Beitrag 1249399)
Was hast du denn vor?

Ja Luckie - du lebst ja noch :-)

Ich hab von dir mal den Code aus LuckieDips "geklaut" um Desktop-Icons zu speichern bzw. wiederherzustellen.

Unter XP funktioniert der Code wunderbar - nur eben nicht mehr bei Win8

jaenicke 24. Feb 2014 20:01

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Nimm doch einfach z.B. den Window Detective und schau dir an wie die Fenster und Fensterklassen aussehen. ;-)

Helmi 25. Feb 2014 18:00

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von jaenicke (Beitrag 1249405)
Nimm doch einfach z.B. den Window Detective und schau dir an wie die Fenster und Fensterklassen aussehen. ;-)

hab ich jetzt mal gemacht - nur gibt es (ab Win7?) als übergeordnetes Fenster: WorkerW - nur nach dem kann man nicht suchen, weil es den mind. 5 mal gibt

Luckie 25. Feb 2014 19:28

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Das Programm funktioniert unter Windows 7 nicht mehr? Ich kann mich nicht erinnern, da irgendwelche DLLs explizit einzubinden.

Helmi 25. Feb 2014 19:36

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Zitat:

Zitat von Luckie (Beitrag 1249600)
Das Programm funktioniert unter Windows 7 nicht mehr? Ich kann mich nicht erinnern, da irgendwelche DLLs explizit einzubinden.

machst du auch nicht

Luckie 25. Feb 2014 20:13

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Deswegen sollte es unter Windows 7 und so noch funktionieren oder?

Helmi 25. Feb 2014 20:22

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Zitat:

Zitat von Luckie (Beitrag 1249616)
Deswegen sollte es unter Windows 7 und so noch funktionieren oder?

Leider nein - da, wie ich schon im ersten Post schrieb, wird SHELLDLL_DefView nicht mehr (direkt) unter progman gefunden

Luckie 25. Feb 2014 20:25

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
ja, aber die API Funktion sollte sie doch finden. Wie gesagt, ich lade sie ja nicht explizit. Das wundert mich etwas.

Helmi 25. Feb 2014 20:46

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Ich hab jetzt extra deinen SourceCode vom LuckieDIPS gedebuggt und es gibt das gleiche Problem wie in meiner SW (die ja deinen Code verwendet)

die Variable DefView ist 0, weil
Delphi-Quellcode:
DefView := FindWindowEx(Progman, HWND(nil), 'SHELLDLL_DefView', nil);
null liefert, also SHELLDLL_DefView nicht gefunden wird

Luckie 25. Feb 2014 20:56

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Aaaah. Es gibt kein Fenster mehr mit dem Namen. Da hat sich wohl was geändert. Es geht gar nicht um die DLL. Danke für die Info. Doof. Nimm dir mal WinSpy und guck mal, ob du das Fenster findest. Sorry, wenn ich etwas daneben schreibe, bin gerade etwas im Stress.

Helmi 25. Feb 2014 21:01

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
hab ich ja schon gemacht - schau einfach mal ein paar Posts von mir weiter oben

Luckie 25. Feb 2014 21:02

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Ok, wie gesagt, bin etwas im Stress. Funktioniert wieder?

hathor 25. Feb 2014 21:03

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Das muss jetzt "ungefähr" so aussehen:

Delphi-Quellcode:
...
    if DefView = 0 then
        DefView := FindWindowEx(DefView, 0, 'WorkerW', nil);
    if DefView <> 0 then
    begin
      if IsActiveDesktopActive then
        EnumChildWindows(DefView, @EnumDefViewProc, LPARAM(@DefView));
      Result := FindWindowEx(DefView, 0, 'SysListView32', nil);
    end;
...

Helmi 25. Feb 2014 21:05

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
nur gibt's WorkerW mehr als ein mal

jaenicke 25. Feb 2014 22:40

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Aber nicht nebeneinander. Der Code funktioniert bei mir problemlos um z.B. die Listview zu finden:
Delphi-Quellcode:
var
  ParentWindow, ListWindow: HWND;
begin
  ParentWindow := FindWindow('WorkerW','');
  if ParentWindow <> 0 then
  begin
    ListWindow := FindWindowEx(ParentWindow, 0, 'SHELLDLL_DefView', nil);
    ListWindow := FindWindowEx(ListWindow, 0, 'SysListView32', nil);
    if ListWindow <> 0 then
    begin
      ShowMessage('Window Handle: ' + IntToStr(ListWindow));
    end;
  end;
end;

Helmi 26. Feb 2014 05:09

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
ok - werd ich heut abend mal ausprobieren

jaenicke 26. Feb 2014 05:49

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Den Code generiert übrigens WinSpy automatisch für dich. ;-)
http://www.delphipraxis.net/15388-wi...6-09-08-a.html

Helmi 26. Feb 2014 15:35

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Zitat:

Zitat von jaenicke (Beitrag 1249640)
Den Code generiert übrigens WinSpy automatisch für dich. ;-)
http://www.delphipraxis.net/15388-wi...6-09-08-a.html

Och - wie praktisch :-)
irgendwie sind Programmierer faule Leute :P

nichts desto trotz - es geht leider auch mit diesem Code nicht!
Hab mir die letzte Version von WinSpy geholt und auch den erzeugten Code getestet:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  wndMain, wndChild: HWND;
begin
  wndMain := FindWindow('WorkerW','');
  if wndMain <> 0 then
  begin
    wndChild := FindWindowEx(wndMain, 0, 'SHELLDLL_DefView', nil);
    wndChild := FindWindowEx(wndChild, 0, 'SysListView32', nil);
//    if wndChild <> 0 then
    begin
      ShowMessage('Window Handle: ' + IntToStr(wndChild));
//      FlashControl(wndChild); // internal function
    end;
  end;
end;
wndChild ist leider 0.

jaenicke 26. Feb 2014 16:07

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Bei mir funktioniert das bei Windows 8.1 problemlos. Warum bei dir nicht... keine Ahnung. :?

Wird denn das erste Fenster gefunden? (Siehst du ja z.B. im Debugger.)

Helmi 26. Feb 2014 16:34

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
also es hakt schon bei
Delphi-Quellcode:
wndChild := FindWindowEx(wndMain, 0, 'SHELLDLL_DefView', nil);
, also dem ersten wndChild
Dort steht schon null drin - wurde also nicht gefunden

jaenicke 26. Feb 2014 17:57

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Aber du hast nicht zufällig so einen Schrott wie Start8 oder so drin, oder?

Helmi 26. Feb 2014 18:23

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Zitat:

Zitat von jaenicke (Beitrag 1249747)
Aber du hast nicht zufällig so einen Schrott wie Start8 oder so drin, oder?

nein, gar nix

jaenicke 26. Feb 2014 19:18

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Dann gehen mir leider langsam die Ideen aus...
Geht es vielleicht mit Adminrechten?

Helmi 26. Feb 2014 20:06

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
nein - mit Adminrechten ging es auch nicht

Ich bin jetzt etwas im Internet auf die Suche gegangen und habe folgenden Code gefunden:
http://blog.syedgakbar.com/2013/01/w...stview-handle/

den hab ich jetzt mal um gesetzt und ich erhalte auch ein Handle, das gleiche wie es auch
WinSpy ausliest

Delphi-Quellcode:
procedure TForm1.Button2Click(Sender: TObject);
var
  wndProgman: HWND;
  wndDesktop: HWND;
  wndWorkerW: HWND;
  wndShell : HWND;
  wndChild : HWND;

begin
  wndWorkerW := 0;
  wndShell  := 0;
  wndProgman := FindWindow('Progman', nil);
  wndDesktop := GetDesktopWindow;

  If wndProgman <> 0 then
    begin
      wndShell := FindWindowEx(wndProgman, 0, 'SHELLDLL_DefView', nil);

      If wndShell = 0 then
        begin
          while ((wndShell = 0) or (wndWorkerW = 0)) do
            begin
              wndWorkerW := FindWindowEx(wndDesktop, wndWorkerW, 'WorkerW', nil);
              wndShell  := FindWindowEx(wndWorkerW, 0, 'SHELLDLL_DefView', nil);
            end;
        end;

      wndChild := FindWindowEx(wndShell, 0, 'SysListView32', nil);

      ShowMessage('Window Handle: ' + IntToStr(wndChild));
    end;
end;
Ich hab mal eine Variable mitlaufen lassen. Es sind 39 (!) Schleifendurchgänge notwendig,
bis das Handle gefunden wurde. D. h. es gibt 39x WorkerW

jaenicke 26. Feb 2014 20:39

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
Ah, hier steht etwas dazu:
http://blog.syedgakbar.com/2013/01/w...stview-handle/
Ich habe allerdings auch die Hintergrundbildrotation an.

Aber dass es bei dir geht ist ja die Hauptsache.

Helmi 26. Feb 2014 20:43

AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
 
ja - schaut ganz gut aus
nebenbei bemerkt haben wir den gleichen Link erwischt :-)


Alle Zeitangaben in WEZ +1. Es ist jetzt 19:47 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