AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi explorer.exe beenden und wieder starten
Thema durchsuchen
Ansicht
Themen-Optionen

explorer.exe beenden und wieder starten

Ein Thema von qubeus · begonnen am 3. Mai 2006 · letzter Beitrag vom 15. Sep 2006
Antwort Antwort
qubeus

Registriert seit: 19. Jan 2006
17 Beiträge
 
#1

explorer.exe beenden und wieder starten

  Alt 3. Mai 2006, 19:01
Hi Leute!!

Eines der hauptsächlichen Gründe dafür, dass ich Windows nicht mag ist der explorer ... ich weiß zwar, dass es freeware gibt, die den explorer versucht zu ersetzen, aber alle Funktionen beherrscht sie nicht. Andere Programme sind oft kostenpflichtig was auch der Grund dafür ist, dass ich sie noch nicht testen konnte, aber ganz abgesehen davon bin ich nicht bereit ein solches Programm zu kaufen.

Der explorer verursacht bei mir oft Probleme, wenn ich Dateien löschen will, meist steht das, dass die Dateien von einem Programm benutzt werden, de tatsächliche Grund ist aber der explorer, wenn ich ihn nämlich neu starte, sind die Dateien entweder gelöscht, weil er sie vorher schon gelöscht hat, dies aber nur wegen eines Fehlers nicht erkannt hat oder die Dateien lassen sich dann problemlos löschen. Außerdem gibt es oft Probleme beim Leeren des Papierkorbs. Die Fehler sind auf jeden Fall durch den explorer selbst verursacht, diese waren nämlich schon da als ich die Festplatte das letzte mal formatiert hatte und Windows neu drauf gemacht habe.
Es handelt sich oft um Dateien von 5 GB (TV-Karten-Aufnahmen) die ich lösche, vielleicht hängt es damit zusammen, aber das spielt ja keine Rolle, der explorer sollte mit allen Dateiengrößen umgehen können.

Die einzige Lösung für mich im Moment ist es, mühsam im Taskmanager jedes Mal wenn das Problem auftritt den explorer zu beenden und ihn anschließend wieder mit "Ausführen" im TaskManager mit dem Befehl "explorer.exe" zu starten.

Da mir das etwas zu mühsam ist würde ich gerne ein Delphi-Programm machen, dass diese Arbeit verrichtet, dieses kann ich dann immer mit einem Shortcut aufrufen, wenn das Problem auftritt.

Wie man ein Programm mit Delphi startet weiß ich, aber wie ich eins beende weiß ich nicht.
Ich stelle es mir kompliziert vor eine allgemeine Lösung für das Beenden von beliebigen Programmen zu finden, aber das Beenden des explorers ist vermutlich auf jedem PC gleich und könnte vielleicht etwas einfacher auch von anderen Leuten realisiert werden.

Also meine Bitte ist: Sagt mir wie man die explorer.exe mit Delphi beendet.

Lösungen zur Behebung des explorer-Problems selbst sind auch gerne gesehen.

Ich hoffe jetzt auf eure Hilfe!
  Mit Zitat antworten Zitat
Benutzerbild von Alexander Roth
Alexander Roth

Registriert seit: 17. Mai 2004
Ort: Kenn
574 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: explorer.exe beenden und wieder starten

  Alt 3. Mai 2006, 19:30
Zitat:
Der explorer verursacht bei mir oft Probleme, wenn ich Dateien löschen will, meist steht das, dass die Dateien von einem Programm benutzt werden, de tatsächliche Grund ist aber der explorer, wenn ich ihn nämlich neu starte, sind die Dateien entweder gelöscht, weil er sie vorher schon gelöscht hat, dies aber nur wegen eines Fehlers nicht erkannt hat oder die Dateien lassen sich dann problemlos löschen. Außerdem gibt es oft Probleme beim Leeren des Papierkorbs. Die Fehler sind auf jeden Fall durch den explorer selbst verursacht, diese waren nämlich schon da als ich die Festplatte das letzte mal formatiert hatte und Windows neu drauf gemacht habe.
Es handelt sich oft um Dateien von 5 GB (TV-Karten-Aufnahmen) die ich lösche, vielleicht hängt es damit zusammen, aber das spielt ja keine Rolle, der explorer sollte mit allen Dateiengrößen umgehen können.
Dafür gibt es eine viel bessere Lösung: siehe hier Unlocker
Alexander Roth
Ich bin umgestiegen auf: Lazarus und Ubuntu! Alles OpenSource!

Besuch doch mal: www.roth.us.ms
  Mit Zitat antworten Zitat
qubeus

Registriert seit: 19. Jan 2006
17 Beiträge
 
#3

Re: explorer.exe beenden und wieder starten

  Alt 3. Mai 2006, 20:28
Ich bedanke mich schonmal für die erste und nette Hilfe - das Programm scheint recht gut zu sein, ich teste es gleich mal - aber ich wäre trotzdem an dem Programmcode, zur Beantwortung der Frage, interessiert.
  Mit Zitat antworten Zitat
Benutzerbild von Mystic
Mystic

Registriert seit: 18. Okt 2003
Ort: Flerzheim
420 Beiträge
 
Turbo Delphi für Win32
 
#4

Re: explorer.exe beenden und wieder starten

  Alt 3. Mai 2006, 20:32
Du hast nicht zufällig Norton Antivirus? Als ich das noch benutzt hab, hatte ich öfters die genannten Probleme. Seit ich auf F-Secure und Anti-Vir umgestiegen bin, nicht mehr.
Jan Steffens
Der Fachwortgenerator - 100% Schwachsinn --- Der UPnP Router Manager - Kommentare erwünscht!
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu
Online

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.063 Beiträge
 
Delphi 12 Athens
 
#5

Re: explorer.exe beenden und wieder starten

  Alt 3. Mai 2006, 20:35
Zitat von qubeus:
Es handelt sich oft um Dateien von 5 GB (TV-Karten-Aufnahmen) die ich lösche, vielleicht hängt es damit zusammen, aber das spielt ja keine Rolle, der explorer sollte mit allen Dateiengrößen umgehen können.
Der kann schon damit umgehen, allerdings schaut der sich immer den dateiinhalt an, wenn man eine Datei in ihm markiert, um dann einige mehr, oder weniger sinnvolle Informationen ber diese Datei in der Stausleiste, oder disen Webansichtteil anzuzeigen.

Du müßtest also nur warten, bis er damit fertig ist und dann gehts auch so ('s dauert bei großen Dateien halt nur ein kleines bissl länger )

[add]
ja, die AntiVirenDinger gucken sich och die dateien des öfteren an, wenn man reinguckt (wie es z.B. der explorer macht) und dann dauert's noch ein bissl länger ._.
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
  Mit Zitat antworten Zitat
qubeus

Registriert seit: 19. Jan 2006
17 Beiträge
 
#6

Re: explorer.exe beenden und wieder starten

  Alt 3. Mai 2006, 20:36
Das Problem an sich ist behoben, mich würde es jetzt nur mal interessieren, ob man mit Delphi Prozesse z.B. explorer.exe killen kann.

@himitsu: damit hat das garnichts zu tun, das hat auch nichts mit warten zu tun... die informationen usw. werden alle korrekt angezeigt. Das liegt daran, dass das löschen durch irgendwelche Fehler gesperrt wird...deshalb ist es auch gut, dass mir Alexander Roth ein Tool zum Entsperren empfohlen hat.
  Mit Zitat antworten Zitat
ichbins

Registriert seit: 9. Jul 2005
Ort: Hohenaltheim
1.001 Beiträge
 
Delphi 2005 Personal
 
#7

Re: explorer.exe beenden und wieder starten

  Alt 3. Mai 2006, 20:39
dazu gibts bei uns ja die Codelib


prozess beendenprozess beenden keine Ergebnisse

mal'n Codeschnipsel von Luckie:

Delphi-Quellcode:
{
  Author  : Michael Puff - [url]http://developer.luckie-online.de[/url]
  Date    : 2005-05-29
  License : PUBLIC DOMAIN
}



uses
  PSAPI, TlHelp32;

type
  TPIDList = array of DWORD;
  TStringDynArray = array of string;

function GetProcessID(const ProcName: string; var ID: DWORD): DWORD;
var
  hProcSnap: THandle;
  pe32: TProcessEntry32;
  dw: DWORD;
begin
  dw := 0;
  hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
  if hProcSnap = 0 then
  begin
    pe32.dwSize := SizeOf(ProcessEntry32);
    if Process32First(hProcSnap, pe32) then
    begin
      while Process32Next(hProcSnap, pe32) do
      begin
        if pos(ProcName, pe32.szExeFile) <> 0 then
        begin
          ID := pe32.th32ProcessID;
          break;
        end;
      end;
    end
    else // Process32First = False
      dw := GetLastError;
    CloseHandle(hProcSnap);
  end
  else // hSnapShot = INVALID_HANDLE_VALUE
    dw := GetLastError;
  result := dw;
end;

function KillProcess(dwProcID, Wait: DWORD): Integer;
var
  hProcess: Cardinal;
  dw: DWORD;
begin
  // open the process and store the process-handle
  hProcess := OpenProcess(SYNCHRONIZE or PROCESS_TERMINATE, False, dwProcID);
  // kill it
  if hProcess <> 0 then
  begin
    dw := Integer(TerminateProcess(hProcess, 1));
    if dw <> 0 then
    begin
      // TerminateProcess returns immediately, so wie have to verify the result via
      // WaitForSingleObject
      dw := WaitForSingleObject(hProcess, Wait);
      if dw = WAIT_FAILED then
        dw := GetLastError;
    end
    else // TerminateProcess = 0
      dw := GetLastError;
    CloseHandle(hProcess);
  end
  else // hProcess = INVALID_HANDLE_VALUE
    dw := GetLastError;
  result := dw;
end;

function GetProcessName(PID: DWORD; var ProcessName: string): DWORD;
var
  dwReturn: DWORD;
  hProcSnapShot: THandle;
  pe32: TProcessEntry32;
begin
  dwReturn := 0;
  hProcSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if hProcSnapShot <> INVALID_HANDLE_VALUE then
  begin
    pe32.dwSize := sizeof(TProcessEntry32);
    if Process32First(hProcSnapShot, pe32) then
    begin
      // first process
      if PID = pe32.th32ProcessID then
      begin
        ProcessName := pe32.szExeFile;
      end;
      // first process wasn't the one we wanted
      // walk the rest
      if ProcessName <> 'then
      begin
        // walk the processes
        while Process32Next(hProcSnapShot, pe32) do
        begin
          // found process
          if PID = pe32.th32ProcessID then
          begin
            ProcessName := pe32.szExeFile;
            // exit
            break;
          end;
        end;
      end;
    end
    else // Process32First = False
      dwReturn := GetLastError;
    CloseHandle(hProcSnapShot);
  end
  else // hSnapShot = INVALID_HANDLE_VALUE
    dwReturn := GetLastError;
  result := dwReturn
end;

function GetProcessList(var ProcessList: TPIDList): DWORD;
var
  dwReturn: DWORD;
  hProcSnapShot: THandle;
  pe32: TProcessEntry32;
  j: Cardinal;
begin
  dwReturn := 0;

  // make the snapshot
  hProcSnapShot := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
  if hProcSnapShot <> INVALID_HANDLE_VALUE then
  begin
    pe32.dwSize := sizeof(TProcessEntry32);
    j := 0;
    setlength(ProcessList, j + 1);
    if Process32First(hProcSnapShot, pe32) then
    begin
      // first process
      ProcessList[j] := pe32.th32ProcessID;
      // walk the processes
      while Process32Next(hProcSnapShot, pe32) do
      begin
        Inc(j);
        setlength(ProcessList, j + 1);
        ProcessList[j] := pe32.th32ProcessID;
      end;
    end
    else // Process32First = False
      dwReturn := GetLastError;
    CloseHandle(hProcSnapShot);
  end
  else // hSnapShot = INVALID_HANDLE_VALUE
    dwReturn := GetLastError;

  result := dwReturn;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  retValue: DWORD;
  ProcessList: TPIDList;
  i: Integer;
  ProcessName: string;
resourcestring
  rsUnknown = 'unbekannt';
begin
  // VCL causes last error to be set, even nothing has already happend :-/
  SetLastError(0);
  Listbox1.Clear;
  retValue := GetProcessList(ProcessList);
  if retValue = 0 then
  begin
    for i := 0 to length(ProcessList) - 1 do
    begin
      if GetProcessName(ProcessList[i], ProcessName) <> 0 then
        ProcessName := rsUnknown;
      Listbox1.Items.Add(IntToStr(ProcessList[i]) + ' - ' + ProcessName);
    end;
  end
  else
    ShowMessage(SysErrorMessage(retValue));
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  dw: DWORD;
begin
  dw := KillProcess(StrToInt(Edit1.Text), 5000);
  if dw <> 0 then
    ShowMessage(SysErrorMessage(dw));
  Button1.Click;
end;
Michael Enßlin
Ich, der ich weiß, mir einzubilden, dass ich weiß, nichts zu wissen, weiß, dass ich nichts weiß.
Sokrates
  Mit Zitat antworten Zitat
qubeus

Registriert seit: 19. Jan 2006
17 Beiträge
 
#8

Re: explorer.exe beenden und wieder starten

  Alt 3. Mai 2006, 20:41
Wenn ich auf diesen Link klicke steht da: Keine Beiträge entsprechen Deinen Kriterien. -edit- Ah jetzt ist der Code ja oben eingeblendet.
  Mit Zitat antworten Zitat
delphis spassbremse
(Gast)

n/a Beiträge
 
#9

Re: explorer.exe beenden und wieder starten

  Alt 15. Sep 2006, 07:13
geht das auch irgendwie mit dem Prozessnamen?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

Re: explorer.exe beenden und wieder starten

  Alt 15. Sep 2006, 09:08
Klar, dazu mus sman sich nur mal meinen Code etwas genauer angucken. Du hast ja die Liste mit den IDs der prozesse, die gehts du mit der Funktion function GetProcessName(PID: DWORD; var ProcessName: string): DWORD; durch. Wenn du deinen Dateinamen gefunden hast, kennst du auch die ID dazu und kannst diese dann benutzen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  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 03:13 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