Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Windows-Defragmentierung durch Progg starten lassen (https://www.delphipraxis.net/98631-windows-defragmentierung-durch-progg-starten-lassen.html)

Aurelius 30. Aug 2007 10:26


Windows-Defragmentierung durch Progg starten lassen
 
Hallo DP'ler :winke:

Ich hab mal wo ein Programm gefunden welches die Windows-Defragmentiierung vor dem Starten aller anderen Programme aktiviert und wollte sowas in der Art auch machen. Mit Shellexecute + Pfad + Parameter würde das auch gehen.

Problem daran ist aber dass der Windows-Ordner-Pfad ja nicht überall gleich sein wird. unter "Start -> Ausführen" kann man ja per "defrag" + Parameter diese Defragmentierung starten. Wie bekomm ich das in mein Programm eingebaut?

Relicted 30. Aug 2007 10:38

Re: Windows-Defragmentierung durch Progg starten lassen
 
huhu!

dann such dir doch den windows pfad :-)

Guggst du hier


gruß
reli

hathor 30. Aug 2007 11:47

Re: Windows-Defragmentierung durch Progg starten lassen
 
So einfach, wie Du Dir das vorstellst, geht das nicht!
Du kannst nicht mit einem DELPHI-GUI-Programm vor dem Laden von Windows irgendetwas starten.

Das DEFRAG-Programm braucht exclusiven Zugriff auf das bearbeitete LW, deshalb ist es sinnvoll, es vor dem Laden des BS zu starten.
Ausserdem macht es die Arbeit nicht alleine, sondern startet je nach Aufgabe und Formatierung eines der folgenden Programme:

chkntfs.exe
dfrgntfs.exe

chkdsk.exe
dfrgfat.exe

Es ist sehr sinnvoll, wenn Du mal die Hilfe für Defrag (defrag.chm) liest!

Aurelius 2. Sep 2007 13:58

Re: Windows-Defragmentierung durch Progg starten lassen
 
Und wenn ich es bei Run-Once in der Registry eintrage? Dann sollte es doch gehen (da Windows ja schon geladen ist)?

Olli 2. Sep 2007 14:06

Re: Windows-Defragmentierung durch Progg starten lassen
 
Zitat:

Zitat von hathor
Das DEFRAG-Programm braucht exclusiven Zugriff auf das bearbeitete LW, deshalb ist es sinnvoll, es vor dem Laden des BS zu starten.

:shock: ... wie weiß denn dann das BIOS, wie es PE-Dateien laden soll?

Ich denke mal eher, daß du meinst daß es vor dem Win32-Subsystem gestartet werden muß.

Aber man kann diesen Vorgang ja planen (was dann nach dem Reboot ausgeführt wird).

Aurelius 2. Sep 2007 15:47

Re: Windows-Defragmentierung durch Progg starten lassen
 
Wenn man im CMD "defrag C:" eingibt defragmentiert er ja (soweit ichs mitbekommen hab). Wenn es also möglich wäre das im Shellexecute so einzuarbeiten müsste es ja gehen, oder?

Olli 2. Sep 2007 15:53

Re: Windows-Defragmentierung durch Progg starten lassen
 
Bei Google suchenBootExecute

Alternativ kannst du das selber schreiben und aufrufen: http://ddkwizard.assarbad.net

Phoenix 2. Sep 2007 16:30

Re: Windows-Defragmentierung durch Progg starten lassen
 
Zitat:

Zitat von xX0815Xx
Problem daran ist aber dass der Windows-Ordner-Pfad ja nicht überall gleich sein wird.

Delphi-Quellcode:
GetSpecialFolder
Damit bekommst Du den Windows-Ordern raus, wie auch immer er heissen mag.

Olli 2. Sep 2007 16:35

Re: Windows-Defragmentierung durch Progg starten lassen
 
Zitat:

Zitat von Phoenix
Zitat:

Zitat von xX0815Xx
Problem daran ist aber dass der Windows-Ordner-Pfad ja nicht überall gleich sein wird.

Delphi-Quellcode:
GetSpecialFolder
Damit bekommst Du den Windows-Ordern raus, wie auch immer er heissen mag.

Hmpf? Dieser Pfad ist doch immer registriert um aus diesem einfach was aufrufen zu können.

Achso und für native Programme ist es irrelevant.

T.E. 2. Sep 2007 17:41

Re: Windows-Defragmentierung durch Progg starten lassen
 
Mit folgender Funktion kannst du den Systempfad herausfinden:
Delphi-Quellcode:
function GetSystemDir: String;
var
  Dir: String;
  Len: DWord;
begin
  SetLength(Dir,MAX_PATH);
  Len:=GetSystemDirectory(PChar(Dir),MAX_PATH);
  if Len>0 then
  begin
    SetLength(Dir,Len);
    Result:=Dir;
  end
  else
    RaiseLastOSError;
end;
Wobei Gängige System-Verzeichnisse C:\Windows\System oder bei auf NT basierenden Betriebssystemen C:\Windows\System32 sind.
Und mit folgender kannst du das Windows-Verwzeichniss ermitteln:
Delphi-Quellcode:
function GetWinDir: String;
var
  Dir: String;
  Len: DWord;
begin
  SetLength(Dir,MAX_PATH);
  Len:=GetWindowsDirectory(PChar(Dir),MAX_PATH);
  if Len>0 then
  begin
    SetLength(Dir,Len);
    Result:=Dir;
  end
  else
    RaiseLastOSError;
end;
PS: Ich rufe meine Defragementierung in meinem Programm wie folgt auf...:
Delphi-Quellcode:
if ShellExecute(Application.Handle,
                 'open',
                 PChar('C:\Windows\System32\dfrgui.exe'),
                 Nil, Nil, SW_NORMAL) <= 32 then
    ShowMessage('Es ist ein Fehler aufgetreten');
Aber das ist halt nur das aufrufen dann musst du slebrer noch deine Parameter einfügen, aber man soll auch irgendwie einen button klick simulieren können

Aurelius 3. Sep 2007 07:23

Re: Windows-Defragmentierung durch Progg starten lassen
 
Hab grad rausgefunden dass das Programm per
Delphi-Quellcode:
ShellExecute(Application.Handle,
                 'open',
                 'defrag',
                 PChar(Laufwerk), Nil, SW_NORMAL)
die Defragmentierung auch aufruft, also brauch ich den Windowsordner net mal...

Trotzdem Thx an alle!

Olli 3. Sep 2007 10:25

Re: Windows-Defragmentierung durch Progg starten lassen
 
Zitat:

Zitat von xX0815Xx
Hab grad rausgefunden dass das Programm per
Delphi-Quellcode:
ShellExecute(Application.Handle,
                 'open',
                 'defrag',
                 PChar(Laufwerk), Nil, SW_NORMAL)
die Defragmentierung auch aufruft, also brauch ich den Windowsordner net mal...

Trotzdem Thx an alle!

Ja, Lesen bildet:

Zitat:

Zitat von Olli
Damit bekommst Du den Windows-Ordern raus, wie auch immer er heissen mag.

Hmpf? Dieser Pfad ist doch immer registriert um aus diesem einfach was aufrufen zu können.[/quote]

Aurelius 3. Sep 2007 14:25

Re: Windows-Defragmentierung durch Progg starten lassen
 
Den Post hatte ich net mehr gelesen...

Ralf Kaiser 3. Sep 2007 17:36

Re: Windows-Defragmentierung durch Progg starten lassen
 
Kleiner Tipp: JKDefrag

Das ist ein Programm und ein Bildschirmschoner mit dem man defragmentieren kann. Ausserdem gibt es noch eine DLL welche die Steuerung des Defagmentierens aus eigenen Programmen (also auch von Delphi aus) heraus ermöglicht. Wird normalerweise über Kommandozeile gesteuert aber es gibt auch ein GUI.

Das Teil benutzt zum Defragmentieren das offizielle API von Microsoft.

Sollte für dein Problem (hoffentlich) ganz hilfreich sein.

Aurelius 5. Sep 2007 11:57

Re: Windows-Defragmentierung durch Progg starten lassen
 
Werd ich mal gucken :thumb:

Larsi 26. Mär 2008 11:24

Re: Windows-Defragmentierung durch Progg starten lassen
 
Auch wenn es schon ziemlich alt ist:
Delphi-Quellcode:
ShellExecute(Application.Handle,
                 'open',
                 'defrag',
                 PChar(Edit1.text), Nil, SW_NORMAL)
Wenn ich das aufrufe sehe ich kurz ein schwarzes Fenster was aber nicht da bleibt, deframentiert windows dann im hintergrund oder geht das so nicht?

RavenIV 26. Mär 2008 11:48

Re: Windows-Defragmentierung durch Progg starten lassen
 
Zitat:

Zitat von Larsi
Auch wenn es schon ziemlich alt ist:
Delphi-Quellcode:
ShellExecute(Application.Handle,
                 'open',
                 'defrag',
                 PChar(Edit1.text), Nil, SW_NORMAL)
Wenn ich das aufrufe sehe ich kurz ein schwarzes Fenster was aber nicht da bleibt, deframentiert windows dann im hintergrund oder geht das so nicht?

Vermutlich falsche Parameter im Edit eingegeben.
Mach mal ein cmd auf (Start -> Ausführen -> cmd) und gib dort defrag mit Deinen Parametern ein.

Larsi 27. Mär 2008 09:53

Re: Windows-Defragmentierung durch Progg starten lassen
 
funktioniert doch, hab im edit das c:\ falsch geschrieben!


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