0
用於選擇文件夾選擇窗口的SelectFolderDialog。但我想出現或用戶選擇只驅動器。不應選擇驅動器內的文件夾。 所以用戶應該得到如C:D:E等驅動器:etc 有沒有任何選項可以做到這一點?只有驅動器的SelectFolderDialog,驅動器內沒有文件夾選擇
用於選擇文件夾選擇窗口的SelectFolderDialog。但我想出現或用戶選擇只驅動器。不應選擇驅動器內的文件夾。 所以用戶應該得到如C:D:E等驅動器:etc 有沒有任何選項可以做到這一點?只有驅動器的SelectFolderDialog,驅動器內沒有文件夾選擇
這僅允許您選擇的路徑短於4個字符我的電腦裏面,如果你要隱藏的對話框中,你需要編寫一個插件,實現IFolderFilter(操作系統+專用)
#BIF_RETURNONLYFSDIRS 0x00000001
#BIF_NEWDIALOGSTYLE 0x00000040
#BIF_NONEWFOLDERBUTTON 0x00000200
!include LogicLib.nsh
!include WinMessages.nsh
!define /math BFFM_ENABLEOK ${WM_USER} + 101
!define BFFM_SELCHANGED 2
System::Call 'SHELL32::SHGetSpecialFolderLocation(i0,i0x11,*i.r2)i.r0'
System::Get "(i.R0,i.R1,i.R2,i)iR9R9"
Pop $3
System::Call '*(i$hwndparent,i$2,i,t "Hello",i0x241,kr3,i0,i0)i.r1'
System::Call 'SHELL32::SHBrowseForFolder(ir1)i.r0'
Sys_BFFCALLBACK:
${If} $R9 == "callback1"
${If} ${BFFM_SELCHANGED} = $R1
System::Call 'SHELL32::SHGetPathFromIDList(i$R2,t "" R9)'
StrLen $R9 $R9
${IfThen} $R9 > 3 ${|} StrCpy $R9 0 ${|}
SendMessage $R0 ${BFFM_ENABLEOK} 0 $R9
${EndIf}
StrCpy $R9 0 ; return value
System::Call $3
Goto Sys_BFFCALLBACK
${EndIf}
System::Free $3 ; system callback
System::Call 'OLE32::CoTaskMemFree(ir2)' ; BROWSEINFO.pidlRoot
System::Free $1 ; BROWSEINFO
${If} $0 <> 0
System::Call 'SHELL32::SHGetPathFromIDList(i$0,t "" R9)'
MessageBox mb_ok SHBrowseForFolder=$R9
${EndIf}
System::Call 'OLE32::CoTaskMemFree(ir0)' ; pidl result
這是文件夾不是一個好主意,那些在c:\ disks \ myexternusb等下安裝其他驅動器的人呢?在Win2000 +上,人們可以很好地控制東西的安裝位置...... – Anders