2013-03-22 3 views
0

하나의 단추가있는 양식이 하나 있습니다. Button1.Click에서 Windows 탐색기를 다시 시작해야합니다. 나는 그것을 봤지만 적절한 해결책을 얻지 못했다. 모든 솔루션은 WinXP, Vista에서는 작동하지만 Win7에서는 작동하지 않습니다. 정확한 해결책을 제공해주십시오.Windows 탐색기 다시 시작

+2

해킹 된 방법으로 ['kill it] (http://stackoverflow.com/a/13770395/960757)을 시도하고 다시 시작할 수도 있습니다. 어쨌든 왜 이것을 필요로합니까? – TLama

+0

'taskkill/IM "explorer.exe"/ F' (관리자 권한 있음)가 작동합니까? –

+0

@TLama 사실이 게시물의 첫 번째 코드 http://stackoverflow.com/q/13770128/2087187 그가 다시 시작하기 때문에 그가 필요로하는 것입니다! – EProgrammerNotFound

답변

2

추가 윈도우 7에서 TlHelp32

에 사용하는 이상,이 기능이 작동 :

function KillTask(ExeFileName: string): Integer; 
const 
    PROCESS_TERMINATE = $0001; 
var 
    ContinueLoop: BOOL; 
    FSnapshotHandle: THandle; 
    ProcessHandle: Cardinal; 
    FProcessEntry32: TProcessEntry32; 
begin 
    Result := 0; 
    FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); 

    if FSnapshotHandle = INVALID_HANDLE_VALUE then 
    RaiseLastOSError; 
    try 
    FProcessEntry32.dwSize := SizeOf(FProcessEntry32); 
    ContinueLoop := Process32First(FSnapshotHandle, FProcessEntry32); 

    while Integer(ContinueLoop) <> 0 do 
    begin 
     if ((UpperCase(ExtractFileName(FProcessEntry32.szExeFile)) = 
     UpperCase(ExeFileName)) or (UpperCase(FProcessEntry32.szExeFile) = 
     UpperCase(ExeFileName))) then 
     begin 
     ProcessHandle:= OpenProcess(PROCESS_TERMINATE, BOOL(0),  FProcessEntry32.th32ProcessID), 0); 
     if ProcessHandle > 0 then 
     begin 
      try 
      Result := Integer(TerminateProcess(ProcessHandle); 
      finally 
      CloseHandle(ProcessHandle); 
      end; 
     end 
     else 
      RaiseLastOSError; 
     end; 
     ContinueLoop := Process32Next(FSnapshotHandle, FProcessEntry32); 
    end; 
    finally 
    CloseHandle(FSnapshotHandle); 
    end; 
end; 

그것은 죽이고 다시 시작!

KillTask('explorer.exe'); 

이전 버전에서는 It Only Kills !!

+0

하지만 내 requirent는 비스타와 XP도 있습니다. –

+0

그럼 나는 너의 해킹 방법도 시도했다. 그것은 관리 우선권이없는 정말로 killa explorer이지만 다시 시작하지 않습니다. 그래서 ... –

+0

ShellExecute 'Explorer.exe'가 관리자의 프리 빌리지없이 열리는 지 확인하십시오. – EProgrammerNotFound