일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- ControlSend
- Menu
- IfInString
- StringGetPos
- EnvDiv
- EnvMult
- SetEnv
- EnvSub
- EnvSet
- SetControlDelay
- 배열
- 식
- 함수
- SetKeyDelay
- SetTitleMatchMode
- Blocks
- autohotkey
- EnvAdd
- DetectHiddenWindows
- MouseClick
- if
- API
- ControlGetText
- 식의 설명
- IfWinExist
- IF (식)
- SetMouseDelay
- Threads
- if(식)
- Var:=식
- Today
- Total
ㄴrㅎnㅂrㄹrㄱi
SHFILEOPSTRUCT 본문
SHFILEOPSTRUCT
SHFileOperation 함수가 행하는 파일 조작에 관한 정보가 격납됩니다.
typedef struct _SHFILEOPSTRUCT { HWND hwnd; // 윈도우 핸들 UINT wFunc; // 실행하는 조작 LPCTSTR pFrom; // 대상 파일명 LPCTSTR pTo; // 목적 파일명 FILEOP_FLAGS fFlags; // 플래그 BOOL fAnyOperationsAborted; // 결과 LPVOID hNameMappings; // 파일명 매핑 오브젝트 LPCTSTR lpszProgressTitle; // 다이얼로그의 타이틀 } SHFILEOPSTRUCT, FAR *LPSHFILEOPSTRUCT;
멤버
- hwnd
-
파일 조작의 상황을 표시하는 다이알로그 박스의 오너 윈도우의 핸들을 지정합니다.
- wFunc
-
실행하는 파일 조작을 나타내는 값을 지정합니다.이하의 값중 한쪽이 격납됩니다.
치 의미 0x0001 (FO_MOVE) pFrom 멤버로 지정된 파일을 pTo 멤버로 지정된 위치로 이동합니다.
0x0002 (FO_COPY) pFrom 멤버로 지정된 파일을 pTo 멤버로 지정된 위치에 카피합니다.
0x0003 (FO_DELETE) pFrom 멤버로 지정된 파일을 삭제합니다.
0x0004 (FO_RENAME) pFrom 멤버로 지정된 파일의 이름을 pTo 멤버로 지정된 파일명으로 변경합니다.이 플래그를 사용하고, 한 번의 함수 호출로 복수의 파일의 이름을 변경할 수 없습니다.복수의 파일의 이름을 변경하려면 FO_MOVE 플래그를 사용합니다.
- pFrom
-
조작의 대상이 된다1개이상의 파일명이 격납된 버퍼의 주소를 지정합니다.이러한 파일명은 풀 패스 지정되어 있지 않으면 안됩니다.파일명에 “*” 등의, 표준MS-DOS와일드 카드를 지정할 수 있습니다.
각각의 파일명은1개의 눌 문자로 단락지어지지 않으면 안됩니다.또, 마지막 파일명의 뒤에는2개의 눌 몬지를 들어갈 수 있지 않으면 안됩니다.
- pTo
-
카피·이동처 디렉토리명 또는 변경 후의 파일명이 격납된 버퍼의 주소를 지정합니다.이 멤버를 사용하지 않는 경우에는 0 (NULL) (을)를 지정하지 않으면 안됩니다.
카피 또는 이동의 조작에 대하고, pFrom 멤버와 같은 방법으로 복수의 파일을 지정할 수 있습니다.이 경우, 각각의 파일명은1개의 눌 문자로 단락지어, 마지막 파일명의 뒤에는2개의 눌 몬지를 들어갈 수 있지 않으면 안됩니다.복수의 파일명을 지정하려면 , fFlags 멤버에 FOF_MULTIDESTFILES 플래그를 지정합니다.
카피 또는 이동의 조작에 대하고, 존재하지 않는 디렉토리를 지정할 수 있습니다.이 때, 시스템은 디렉토리의 작성을 시도합니다만, 통상은, 다이알로그 박스를 표시해 새로운 디렉토리를 작성할지를 유저에게 확인합니다.파일 조작중에 다이알로그 박스를 표시하지 않게 하려면 , fFlags 멤버에 FOF_NOCONFIRMMKDIR 플래그를 지정합니다.
파일명에 와일드 카드 문자를 사용할 수 없습니다.또, 파일명은 풀 패스 지정되어 있지 않으면 안됩니다.상대 패스를 사용하면, 예기치 않은 결과를 일으킬 가능성이 있습니다.
- fFlags
-
파일 조작을 제어하는 옵션 플래그를 지정합니다. 0 또는 이하의 값을 조합해 지정합니다.
치 의미 0x0001 (FOF_MULTIDESTFILES) pTo 멤버가 복수의 파일명을 지정해 있는 것을 나타냅니다.
0x0002 (FOF_CONFIRMMOUSE) 현재는 사용되지 않습니다.
0x0004 (FOF_SILENT) 경과를 나타내는 다이알로그 박스를 표시하지 않습니다.
0x0008 (FOF_RENAMEONCOLLISION) 이동, 카피, 이름의 변경의 조작에 대하고, 지정한 파일명이 벌써 존재하고 있었을 경우에는, 조작 대상의 파일에 새로운 이름을 붙입니다.
0x0010 (FOF_NOCONFIRMATION) 표시되는 다이알로그 박스로 「네」또는 「모두」를 선택하도록(듯이) 합니다.
0x0020 (FOF_WANTMAPPINGHANDLE) FOF_RENAMEONCOLLISION 하지만 지정되어 있고, 같은 파일명이 존재했기 때문에 새로운 파일명이 붙여졌을 경우에, 낡은 이름과 새로운 이름을 포함한 매핑 오브젝트의 핸들을 hNameMappings 멤버에 격납합니다.
0x0040 (FOF_ALLOWUNDO) 가능한 한 un-do 정보를 보관 유지하도록(듯이) 합니다. pFrom 그리고 지정된 파일명이 풀 패스로 지정되어 있을 필요가 있습니다.삭제시로 지정하면, 파일을 쓰레기통에 넣을 수 있습니다.
0x0080 (FOF_FILESONLY) 와일드 카드 파일명(*.*)(이)가 지정되었을 경우에게만 조작을 실행합니다.
0x0100 (FOF_SIMPLEPROGRESS) 경과를 나타내는 다이알로그 박스에 파일명을 표시하지 않습니다.
0x0200 (FOF_NOCONFIRMMKDIR) 새로운 디렉토리를 작성할 필요가 있는 경우에, 작성할지의 확인을 하지 않습니다.
0x0400 (FOF_NOERRORUI) 에러가 발생했을 경우에, 유저 인터페이스를 표시하지 않습니다.
0x0800 (FOF_NOCOPYSECURITYATTRIBS) Version 4.71 이후: 파일의 시큐러티 속성이 카피되지 않게 합니다.
0x1000 (FOF_NORECURSION) 로컬 디렉토리에만 조작을 행합니다.서브 디렉토리에 대해서 재귀적으로 조작을 행하지 않습니다.
0x2000 (FOF_NO_CONNECTED_ELEMENTS) Windows Me/2000 이후: 그룹으로서 접속되고 있는 파일을 이동하지 않습니다.지정된 파일만을 이동합니다.
0x4000 (FOF_WANTNUKEWARNING) Windows Me/2000 이후: 쓰레기통에 넣는 것은 아닌 삭제 조작 시에 파일이 삭제될 때 경고를 합니다.
0x8000 (FOF_NORECURSEREPARSE) Windows XP 이후: 리파스포인트를 컨테이너는 아니고 오브젝트로서 취급합니다.
- fAnyOperationsAborted
-
지정한 파일 조작이 완료하기 전에 유저에 의해서 중지되었을 경우에는 1 (TRUE) 하지만 격납됩니다.그 이외의 경우에는 0 (FALSE) 하지만 격납됩니다.
- hNameMappings
-
이동·카피·이름 변경된 파일의 낡은 파일명과 새로운 파일명을 포함한 파일명 매핑 오브젝트의 핸들이 격납됩니다.이 멤버는 fFlags 멤버에 FOF_WANTMAPPINGHANDLE 플래그가 지정되었을 경우에게만 사용됩니다.이 핸들이 불필요하게 되면 SHFreeNameMappings 함수로 해방하지 않으면 안됩니다.이 핸들에 관해서는, 아래의 해설을 참조해 주세요.
- lpszProgressTitle
-
경과를 표시하는 다이알로그 박스의 타이틀 바에 사용하는 문자열의 주소를 지정합니다. fFlags 멤버로 FOF_SIMPLEPROGRESS 하지만 지정되어 있는 경우에게만 유효합니다.
해설
pFrom 멤버 및 pFrom 멤버가 풀 패스가 아닌 파일명의 경우는, 커런트 디렉토리에 있다고 보입니다.
파일 삭제시에 pFrom 멤버에 풀 패스가 아닌 파일명이 지정되었을 경우는, FOF_ALLOWUNDO 플래그를 지정했을 경우에서도 파일은 쓰레기통에 넣어지지 않습니다.
fFlags 멤버에 FOF_WANTMAPPINGHANDLE 플래그를 지정하면, hNameMappings 멤버에는 파일명 매핑 오브젝트의 핸들이 격납됩니다.이 핸들은, 멤버가 UINT 형태 및 SHNAMEMAPPING 구조체의 배열에의 포인터인 구조체의 포인터로서 취급됩니다.즉,
struct HANDLETOMAPPINGS { UINT uNumberOfMappings; // 배열의 요소수 SHNAMEMAPPING *lpSHNameMapping; // 배열에의 포인터 };
그렇다고 하는 구조체에의 포인터이다고 합니다(이 HANDLETOMAPPINGS 구조체는 명시적으로 정의되고는 있지 않습니다).이 때의 UINT 형태의 값으로서 SHNAMEMAPPING 구조체의 배열의 요소수가 세트 됩니다.각각의 SHNAMEMAPPING 구조체에는, 변경되었다1개의 파일이 낡은 패스명 및 새로운 패스명이 격납되고 있습니다.
hNameMappings 멤버의 값으로 해서 취득한 핸들은 SHFreeNameMappings 함수를 사용해 해방하지 않으면 안됩니다.
hNameMappings 멤버에 돌려주어지는 파일명 매핑 오브젝트를 참조하는 경우, Windows 95/98/Me 그럼, SHFileOperation 함수는 ANSI 세트의 SHNAMEMAPPING 구조체를 돌려줍니다만,Windows NT/2000/XP 그럼, SHFileOperation 함수는 ANSI 판의 함수 및 Unicode 판의 함수 모두 Unicode 세트의 SHNAMEMAPPING 구조체를 돌려줍니다.따라서, 모든 버젼의 Windows 그리고 조작시키기 위해서는, Windows 의 버젼을 조사해 조건 나누어 하는 코드를 작성할 필요가 있습니다.
대응 정보
Shell32.dll Version 4.00 이후
Windows 95 이후 / Windows NT 4.0 이후
변수와의 대응
HSP 변수 | 멤버 | ||
---|---|---|---|
멤버명 | 오프셋 | 사이즈 | |
shfo.0 | hwnd | 0 | 4 |
shfo.1 | wFunc | 4 | 4 |
shfo.2 | pFrom | 8 | 4 |
shfo.3 | pTo | 12 | 4 |
shfo.4 | fFlags | 16 | 4 |
shfo.5 | fAnyOperationsAborted | 20 | 4 |
shfo.6 | hNameMappings | 24 | 4 |
shfo.7 | lpszProgressTitle | 28 | 4 |
'Ntool Works > 작업 참조' 카테고리의 다른 글
SHELLEXECUTEINFO (2) | 2007.11.09 |
---|---|
SHNAMEMAPPING (0) | 2007.11.09 |
IMalloc::Free (0) | 2007.11.09 |
IMalloc::Alloc (0) | 2007.11.09 |
IUnknown::AddRef (0) | 2007.11.09 |