2013-03-08 3 views
11

내가 디렉토리 경로를 전달되는 Windows 탐색기에서 폴더를 열 수있는 방법이 (델파이) 특정 파일을 선택 파일 이름 (전체 파일 이름 경로 또는 이름 + 확장자 중 하나)을 선택하고 Windows 탐색기에서 폴더를 열어 강조 표시하거나 선택하십시오. 내가 갈 위치는 많은 파일을 가지고 있으며 Windows에서이 파일을 조작해야합니다.Windows 탐색기를 열고 디렉토리,

ShellExecute(0, nil, 'explorer.exe', '/select,C:\WINDOWS\explorer.exe', nil, 
    SW_SHOWNORMAL) 

다소 더 멋진 (그리고 아마도 또한 더 신뢰할 수있는) 방법 (uses ShellAPI, ShlObj) : 당신이 explorer.exe를 호출 할 때

+0

을 방법을 사용하여 대답으로 안드레아스 Rejbrand 아래에, 이상한 활동으로 막 다른 골목을 때리고있다, 나는 Win7 Pro 32bit에 있고 때로는 이것을 사용할 때 디렉토리를 열지 만 파일을 강조 표시하지 않거나 일반 디렉토리에서 일부를 열고 완전한 무언가를 강조하다 그다지 상관 없어요. 예를 들어, 지금은 파일을 선택하는 데 사용한 적이 있지만 개인 사용자 폴더를 열고 강조한 "내 문서"폴더는 내가 지시 한 파일이 동일한 하드 드라이브에 있지 않은 경우에도 마찬가지입니다. –

+0

방금이 이슈가있는 추세를 보았습니다. 파일 이름에 특정 문자가있는 경우 (예 : 쉼표) 명령이 실행되지 않습니다. –

+0

참고 : 위의 문제는 Andreas가 더 구체적이고 안정적인 업데이트를 통해 해결되었습니다. 해결책. –

답변

33

예, /select flag을 사용할 수 있습니다

const 
    OFASI_EDIT = $0001; 
    OFASI_OPENDESKTOP = $0002; 

{$IFDEF UNICODE} 
function ILCreateFromPath(pszPath: PChar): PItemIDList stdcall; external shell32 
    name 'ILCreateFromPathW'; 
{$ELSE} 
function ILCreateFromPath(pszPath: PChar): PItemIDList stdcall; external shell32 
    name 'ILCreateFromPathA'; 
{$ENDIF} 
procedure ILFree(pidl: PItemIDList) stdcall; external shell32; 
function SHOpenFolderAndSelectItems(pidlFolder: PItemIDList; cidl: Cardinal; 
    apidl: pointer; dwFlags: DWORD): HRESULT; stdcall; external shell32; 

function OpenFolderAndSelectFile(const FileName: string): boolean; 
var 
    IIDL: PItemIDList; 
begin 
    result := false; 
    IIDL := ILCreateFromPath(PChar(FileName)); 
    if IIDL <> nil then 
    try 
     result := SHOpenFolderAndSelectItems(IIDL, 0, nil, 0) = S_OK; 
    finally 
     ILFree(IIDL); 
    end; 
end; 
+0

매개 변수에 전달 된 문자열은 null이어야합니다. – Raul

+0

예, 컴파일러는 Null 터미네이터가 있는지 확인합니다. –

+1

참고 : http://stackoverflow.com/questions/4291793/selecting-file-in-windows-explorers-does-not-always-work?rq=1 이것은 항상 작동하지 않으며 실제로 목격되었습니다. 그것은 나 자신을 작동하지 않습니다. –

관련 문제