AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Projekte DesktopRestore
Thema durchsuchen
Ansicht
Themen-Optionen

DesktopRestore

Ein Thema von moin339 · begonnen am 27. Feb 2003 · letzter Beitrag vom 28. Feb 2003
Antwort Antwort
Benutzerbild von moin339
moin339
Registriert seit: 23. Sep 2002
Moin!

Ich habe öfters das Problem, dass die Desktop Icons nach dem beenden eines Spiels total durcheinander sind. Aus dem Grund habe ich jetzt ein Programm geschrieben, dass die aktuellen Positionen speichern kann und bei bedarf wieder herstellen kann. Dass es solche Programme schon gibt hat mir leider erst ein Freund erzählt als ich schon fast fertig war

ciao, moin339
Angehängte Dateien
Dateityp: exe desktoprestore_1.0.exe (535,7 KB, 28x aufgerufen)
 
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#2
  Alt 27. Feb 2003, 16:10
Ja da gibt es schon eins von NicoDE.

Darf man fragen, wie du das gemacht hast?
Michael
  Mit Zitat antworten Zitat
Benutzerbild von moin339
moin339
 
#3
  Alt 27. Feb 2003, 20:56
Moin!

Zitat von Luckie:
Ja da gibt es schon eins von NicoDE.
Das kenne ich nicht. Ich kenne bisher nur "IconSaver".

Zitat von Luckie:
Darf man fragen, wie du das gemacht hast?
Ja natürlich

Also der Desktop ist ja ein ListView. Ich habe die einträge über die API-Funktionen ausgelesen und dann die Dateiendung festgestellt. Die Endungen habe ich über (findfist , findnext, usw. ) aus dem aktuellen Desktop-Ordner ausgelesen.

Soll ich noch etwas genauer erklären oder wolltest du etwas speziellen wissen?

P.S. Hast du das Programm auch getestet? Wenn ja: Ohne Probleme?

ciao, moin339
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#4
  Alt 27. Feb 2003, 22:52
Da mußt du aber über eine DLL gegangen sein, sonst kommst du nicht an die Items des Desktops / Listviews dran. Diese DLL mußt du dann in den Explorerprozess injezieren, der für den Desktop zuständig ist. Ich bin damals irgendwo hängen geblieben, wo ich irgend eine ThreadID an die DLL weitergeben mußte.
Etwas genauer wäre mir da schon lieber.
Michael
  Mit Zitat antworten Zitat
Daniel B
 
#5
  Alt 27. Feb 2003, 23:17
Hi Luckie,

such mal bei Dir nach der "desktop.ini". Es gibt da ein paar, da dürften die Einstellungen drin sein, oder anders gesagt, ein Tip wo es in der Registry steht. Ich bilde mir dies mal irgendwo gelesen zu haben, das man über die zu den Informationen kommt. Ich hab bei mir 4 oder 5 von diesen Dateien. Bei Dir dürften es noch mehr sein wegen der Accounts.

Grüsse, Daniel
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

 
Delphi 2006 Professional
 
#6
  Alt 27. Feb 2003, 23:25
Eine Desktop.ini hab eich in fast jedem Verzeichnis. das kann es wohl nicht sein. Und in der Registry hab eich nichts gefunden. Desweiterem gefällt mir der Weg über die DLL, die in den Explorre-prozess injeziert wird weitaus besser.
Michael
  Mit Zitat antworten Zitat
Benutzerbild von Motzi
Motzi

 
Delphi XE2 Professional
 
#7
  Alt 28. Feb 2003, 11:17
Zitat von Luckie:
Da mußt du aber über eine DLL gegangen sein, sonst kommst du nicht an die Items des Desktops / Listviews dran. Diese DLL mußt du dann in den Explorerprozess injezieren, der für den Desktop zuständig ist. Ich bin damals irgendwo hängen geblieben, wo ich irgend eine ThreadID an die DLL weitergeben mußte.
Etwas genauer wäre mir da schon lieber.
Du meinst so wie in "Windows Programmierung für Experten" von Jeffrey Richter? (hab das Buch auch..)
Dort steht ja beschrieben, dass Steuerlement-Messages nicht prozessübergreifend funktionieren und man daher eine Injekct-Dll in den Prozessraum laden muss. Es gibt aber noch eine andere Möglichkeit: man alloziert per VirtualAllocEx Speicher im Adressraum des fremden Prozesses und kann dann per ReadProcessMemory die gewünschten Informationen von diesem Speicher auslesen...
Manuel Pöter
  Mit Zitat antworten Zitat
Benutzerbild von moin339
moin339
 
#8
  Alt 28. Feb 2003, 11:55
Moin!

Zitat von Motzi:
Es gibt aber noch eine andere Möglichkeit: man alloziert per VirtualAllocEx Speicher im Adressraum des fremden Prozesses und kann dann per ReadProcessMemory die gewünschten Informationen von diesem Speicher auslesen...
genau so habe ich das gemacht. Allerdings funktioniert das nur unter win NT / 2k / XP (siehe MSDN). Unter Win9x kann man einfach MMF's nehmen, da MMF's unter 9x für jeden Process "sichtbar" sind. (Wenn man dem Explorer einen Zeiger auf Daten in einem MMF übergibt kann der darauf zugreifen ohne das MMF zu öffnen.)

Wolltest du noch was wissen?

P.S. Eigentlich wollte ich ja noch wissen ob das Prog bei euch ohne Probleme funktioniert.

ciao, moin339
  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:44 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