static int CALLBACK BrowseCallbakProc(HWND hWnd, UINT uMsg, LPARAM lParam, LPARAM pData)
{
switch(uMsg)
{
case BFFM_VALIDATEFAILED:
CString strText;
strText.Format("%s", reinterpret_cast<LPTSTR>(lParam));
AfxMessageBox(strText);
break;
}
return 0;
};
void CTest3Dlg::OnButton1()
{
ITEMIDLIST *pildBrowse;
char pszPathname[MAX_PATH];
LPITEMIDLIST pidl = NULL;
BROWSEINFO bInfo;
ZeroMemory( &bInfo, sizeof(BROWSEINFO) );
SHPathToPidl( CSIDL_DESKTOP, &pidl ); //이곳에 최상위 루트를 지정하시구요
// CSIDL_NETWORK,CSIDL_DESKTOP,CSIDL_RECENT
bInfo.hwndOwner = GetSafeHwnd();
bInfo.pidlRoot = pidl;
bInfo.pszDisplayName = pszPathname;
bInfo.lpszTitle = "디렉토리를 선택하세요";
bInfo.lpfn = BrowseCallbakProc; //에디트 박스에서 텍스트를 받아오기 위한 Callback 입니다.
bInfo.ulFlags = BIF_BROWSEINCLUDEFILES | BIF_EDITBOX | BIF_VALIDATE;
pildBrowse = ::SHBrowseForFolder(&bInfo);
if( pildBrowse != NULL )
{
SHGetPathFromIDList(pildBrowse, pszPathname);
CString m_strFolder = (LPCTSTR)pszPathname;
MessageBox( m_strFolder );
}
}
HRESULT CTest3Dlg::SHPathToPidl( LPCTSTR szPath, LPITEMIDLIST* ppidl )
{
LPSHELLFOLDER pShellFolder = NULL;
OLECHAR wszPath[MAX_PATH] = {0};
ULONG nCharsParsed = 0;
HRESULT hr = SHGetDesktopFolder( &pShellFolder );
if( FAILED(hr) )
return FALSE;
MultiByteToWideChar( CP_ACP, MB_PRECOMPOSED, szPath, -1, wszPath, MAX_PATH );
hr = pShellFolder->ParseDisplayName( NULL, NULL, wszPath, &nCharsParsed, ppidl, NULL );
pShellFolder->Release();
return hr;
}
- 표시 플래그
BIF_BROWSEFORCOMPUTER : 네트워크의 컴퓨터만 선택가능
BIF_BROWSEFORPRINTER : 프린터만 선택가능
BIF_BROWSEINCLUDEFILES : 파일도 표시
BIF_DONTGOBELOWDOMAIN : 네트워크의 컴퓨터를 표시하지 않는다
BIF_EDITBOX : 에디트 박스를 표시한다
BIF_RETURNFSANCESTORS : 네트워크의 컴퓨터만 선택가능
BIF_RETURNONLYFSDIRS : 폴더만 선택가능
BIF_STATUSTEXT : 스테이터스 텍스트를 표시한다
BIF_VALIDATE : 부정 입력시에, BFFM_VALIDATEFAILED 이벤트
출처 : 자바/Java/C/C++ 개발자모임 카페
Trackback Address :: http://kongmks.cafe24.com/trackback/169
int ReadRegVal(char *reg_path, char *key, char *val, int val_buf_size ) // reg읽기
{
HKEY phk=0;
DWORD nEC = REG_BINARY; // 바이너리모드로 읽기
DWORD size = val_buf_size; // 레지스트리읽기시 버퍼크기
memset(val,0,val_buf_size); //mem clear
RegOpenKey(HKEY_LOCAL_MACHINE,reg_path,&phk);
RegQueryValueEx(phk, key, NULL,&nEC, (LPBYTE)val, &size ); //읽기 값은 val에 저장
//val은 걍 맘편히 타입케스팅 바로 하셔서 쓰셔욧....
RegCloseKey(phk);
return 0;
}
int WriteRegVal(char *reg_path, char *key, char *val) //reg write
{
HKEY phk=0;
long nRet;
RegCreateKey(HKEY_LOCAL_MACHINE, reg_path, &phk);
nRet = RegSetValueEx(phk, key, 0, REG_SZ, (LPBYTE)val, strlen(val));
RegCloseKey(phk);
if(ERROR_SUCCESS == nRet) return 0;
return 1;
}사용법:
<레지스터 쓰기.>
WriteRegVal("SOFTWARE\\Microsoft\\Windows", "Windows", "5.2" );
출처 : 네이버 지식인
Trackback Address :: http://kongmks.cafe24.com/trackback/168