![]() |
Win8: SHELLDLL_DefView wird nicht mehr gefunden
Hallo,
bei Win 8 (vermutlich schon bei Win 7) hab ich das Problem, dass ich
Delphi-Quellcode:
nicht mehr finde
SHELLDLL_DefView
Delphi-Quellcode:
Bei XP kein Problem - gibt es das nicht mehr? - oder was wäre das passende Gegenstück bei Win 8?
Progman := FindWindow('Progman', nil);
If Progman <> 0 then begin DefView := FindWindowEx(Progman, HWND(nil), 'SHELLDLL_DefView', nil); |
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
|
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
Was hast du denn vor?
|
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
Zitat:
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 |
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. ;-)
|
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:
|
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.
|
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
Zitat:
|
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
Deswegen sollte es unter Windows 7 und so noch funktionieren oder?
|
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
Zitat:
|
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.
|
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:
null liefert, also SHELLDLL_DefView nicht gefunden wird
DefView := FindWindowEx(Progman, HWND(nil), 'SHELLDLL_DefView', nil);
|
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.
|
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
hab ich ja schon gemacht - schau einfach mal ein paar Posts von mir weiter oben
|
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
Ok, wie gesagt, bin etwas im Stress. Funktioniert wieder?
|
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; ... |
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
nur gibt's WorkerW mehr als ein mal
|
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; |
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
ok - werd ich heut abend mal ausprobieren
|
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
Den Code generiert übrigens WinSpy automatisch für dich. ;-)
![]() |
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
Zitat:
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:
wndChild ist leider 0.
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; |
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.) |
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
also es hakt schon bei
Delphi-Quellcode:
, also dem ersten wndChild
wndChild := FindWindowEx(wndMain, 0, 'SHELLDLL_DefView', nil);
Dort steht schon null drin - wurde also nicht gefunden |
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
Aber du hast nicht zufällig so einen Schrott wie Start8 oder so drin, oder?
|
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
Zitat:
|
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
Dann gehen mir leider langsam die Ideen aus...
Geht es vielleicht mit Adminrechten? |
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: ![]() den hab ich jetzt mal um gesetzt und ich erhalte auch ein Handle, das gleiche wie es auch WinSpy ausliest
Delphi-Quellcode:
Ich hab mal eine Variable mitlaufen lassen. Es sind 39 (!) Schleifendurchgänge notwendig,
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; bis das Handle gefunden wurde. D. h. es gibt 39x WorkerW |
AW: Win8: SHELLDLL_DefView wird nicht mehr gefunden
Ah, hier steht etwas dazu:
![]() Ich habe allerdings auch die Hintergrundbildrotation an. Aber dass es bei dir geht ist ja die Hauptsache. |
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 01:33 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