本文整理汇总了C++中SHGetPathFromIDList函数的典型用法代码示例。如果您正苦于以下问题:C++ SHGetPathFromIDList函数的具体用法?C++ SHGetPathFromIDList怎么用?C++ SHGetPathFromIDList使用的例子?那么, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了SHGetPathFromIDList函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: SteemIntro
//---------------------------------------------------------------------------
int SteemIntro()
{
EasyStr caption=T("Welcome to Steem"),text;
text=T("Thank you for running the Steem Engine. We hope you will get many hours of enjoyment from this program. Before you can start there's just a few things to set up.");
#ifdef WIN32
int Ret;
MSGBOXPARAMS mbp;
mbp.cbSize=sizeof(MSGBOXPARAMS);
mbp.hwndOwner=NULL;
mbp.hInstance=Inst;
mbp.dwContextHelpId=0;
mbp.lpfnMsgBoxCallback=NULL;
mbp.dwLanguageId=GetUserDefaultLangID();
mbp.lpszIcon=RCNUM(RC_ICO_APP);
text+=" ";
text+=T("Do you want to put a shortcut to Steem in your Start Menu?");
mbp.lpszCaption=caption;
mbp.lpszText=text.Text;
mbp.dwStyle=MB_USERICON | MB_YESNO;
if (MessageBoxIndirect(&mbp)==IDYES){
ITEMIDLIST *idl;
if (SHGetSpecialFolderLocation(NULL,CSIDL_PROGRAMS,&idl)==NOERROR){
IMalloc *Mal;SHGetMalloc(&Mal);
EasyStr Path;Path.SetLength(MAX_PATH);
SHGetPathFromIDList(idl,Path);
Mal->Free(idl);
EasyStr ThisExeName=GetEXEFileName();
CreateDirectory(Path+"\\Steem Engine",NULL);
CreateLink(Path+"\\Steem Engine\\Steem Engine.lnk",ThisExeName,"The STE Emulating Engine");
CreateLink(Path+"\\Steem Engine\\Readme.lnk",RunDir+"\\readme.txt","Steem Engine Info");
}
}
#elif defined(UNIX)
alert.set_icons(&Ico64,ICO64_STEEM,&Ico16,ICO16_STEEM);
if (1==alert.ask(XD,text,caption,T("Continue")+"|"+T("Abort"),0,1)){
return 1;
}
#endif
caption=T("TOS Image");
text=T("The most important file Steem needs to run is an image of the ST operating system TOS. If you haven't got one you cannot run Steem. They are easily downloadable from the internet, probably from the same place that you downloaded Steem. Alternatively you can get ST programs that will save out the TOS from an ST. After clicking OK find a TOS image file and click open. This setting, and all the other settings you are about to set, can be easily changed at any time when running Steem.");
#ifdef WIN32
mbp.lpszText=text;
mbp.lpszCaption=caption;
mbp.dwStyle=MB_USERICON | MB_OK;
MessageBoxIndirect(&mbp);
#elif defined(UNIX)
alert.ask(XD,text,caption,T("Okay"),0,0);
#endif
LOOP{
#ifdef WIN32
ROMFile=FileSelect(NULL,T("Select TOS Image"),RunDir,FSTypes(3,NULL),1,true,"img");
#elif defined(UNIX)
fileselect.set_corner_icon(&Ico16,ICO16_CHIP);
ROMFile=fileselect.choose(XD,RunDir,"",T("Select TOS Image"),FSM_LOAD | FSM_LOADMUSTEXIST,
romfile_parse_routine,".img");
#endif
if (ROMFile.IsEmpty()) return 1;
if (load_TOS(ROMFile)==0) break;
MessageBox((WINDOWTYPE)0,ROMFile+" "+T("is not a valid TOS"),T("Error Loading OS"),
MB_ICONEXCLAMATION | MB_TASKMODAL | MB_TOPMOST | MB_SETFOREGROUND);
}
caption=T("Disk Images");
text=T("The next few settings regard the way Steem emulates disks. Steem, and all other ST emulators, use files with the extension ST, STT, DIM or MSA on a PC drive for its floppy disks. This is the format most things you download for the ST will be in. If you have some of these files already then you can tell Steem which folder they are in. This will become your home folder and makes it easy to switch disks in and out of drives. If you don't have any then select a suitable folder on your PC hard disk and Steem will create a blank disk for you there.")+"\n\n"+
T("Click cancel if you'd rather set up the home folder later.");
bool proceed;
#ifdef WIN32
mbp.lpszCaption=caption;
mbp.lpszText=text;
mbp.dwStyle=MB_USERICON | MB_OKCANCEL;
Ret=MessageBoxIndirect(&mbp);
proceed=(Ret==IDOK);
#elif defined(UNIX)
proceed=!alert.ask(XD,text,caption,T("Okay")+"|"+T("Cancel"),0,1);
#endif
if (proceed){
EasyStr Path;
#ifdef WIN32
Path=ChooseFolder(NULL,T("Pick a Folder"),RunDir);
if (Path.Empty()) Path=RunDir;
#elif defined(UNIX)
fileselect.set_corner_icon(&Ico16,ICO16_FOLDER);
Path=fileselect.choose(XD,RunDir,"",T("Pick a Folder"),
FSM_CHOOSE_FOLDER | FSM_CONFIRMCREATE,folder_parse_routine,"");
#endif
if (Path.NotEmpty()){
DiskMan.HomeFol=Path;
NO_SLASH(DiskMan.HomeFol);
DiskMan.DisksFol=DiskMan.HomeFol;
//.........这里部分代码省略.........
示例2: SHBrowseForFolder
//将已经按照姓名汇总的数据分别输出到excel文件中
void CGhQuery::OnBnClickedClassifyExcel()
{
// 添加文件保存目录
CString str,strPath;
// ZeroMemory(szPath, sizeof(szPath));
BROWSEINFO bi;
bi.hwndOwner = m_hWnd;
bi.pidlRoot = NULL;
bi.pszDisplayName = str.GetBuffer(MAX_PATH);
bi.lpszTitle = "请选择汇总信息存放目录:";
bi.ulFlags = 0;
bi.lpfn = NULL;
bi.lParam = 0;
bi.iImage = 0;
//弹出选择目录对话框
LPITEMIDLIST lp = SHBrowseForFolder(&bi);
str.ReleaseBuffer();
SHGetPathFromIDList(lp,strPath.GetBuffer(MAX_PATH)) ;
strPath.ReleaseBuffer();
if(strPath.GetLength() <3){
AfxMessageBox("选择的目录无效,请重新选择可读写的目录....");
return;
}
UpdateData();
CFormGhList *pf=(CFormGhList*)theApp.pParentGrid.pGrid;
int iRows=pf->m_grid.GetRowCount();
int iCols=pf->m_grid.GetColumnCount();
if( iRows < 3) {
AfxMessageBox("没有数据需要进行分类汇总输出,请先进行数据分类汇总....");
return;
}
int iType=m_Type.GetCurSel();
CString strJournalType;
if( iType == CB_ERR || iType == 1 )strJournalType="报刊合计";
else m_Type.GetLBText(iType,strJournalType);
CString strPath2;
strPath2.Format("(%s)%s-%s",strJournalType,m_strStart,m_strEnd);
if( strPath.Right(1) == '\\' ) //路径选择为根目录时,目录后会自动附加'\\'字符,如果是正常的目录,则没有附加的'\\',所以要进行判断
strPath=strPath+strPath2;
else
strPath=strPath+"\\"+strPath2;
//判断目录是否存在
WIN32_FIND_DATA fd;
HANDLE hFind = FindFirstFile(strPath, &fd);
// BOOL bFilter = (FALSE == dwFilter) ? TRUE : fd.dwFileAttributes & dwFilter;
// BOOL RetValue = ((hFind != INVALID_HANDLE_VALUE) && bFilter) ? TRUE : FALSE;
FindClose(hFind);
if( fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY )
{
AfxMessageBox("当前目前下已存在要导出的文件目录,如需导出,请重新选择目录...");
return;
}
if( ! CreateDirectory(strPath,NULL) ){
AfxMessageBox("Create directory is error !!");
return;
}
strPath+="\\";
const int COL_FACTORY=1,COL_NAME=2,COL_PRICE=3,COL_SQ=0;
_Application app2;
Workbooks books2;
_Workbook book2;
Worksheets sheets2;
_Worksheet sheet2;
COleVariant vOpt(DISP_E_PARAMNOTFOUND,VT_ERROR);
const int IDC_PROGRESS_EXCEL=WM_USER+10003;
CProgressEx pp;
CRect r1(0,0,400,25);
pp.Create(WS_CHILD |PBS_SMOOTH|WS_BORDER ,r1,AfxGetMainWnd()->GetForegroundWindow(),IDC_PROGRESS_EXCEL);
pp.UpdateWindow();
pp.ShowWindow(SW_SHOW);
pp.CenterWindow();
pp.Invalidate();
pp.SetRange32(0,iRows );
pp.strView="正在准备导出...请稍等!!";
app2.CreateDispatch("excel.application");
if(!app2){
AfxMessageBox("请注意系统中必须装有EXCEL97 或者 EXCEL2000 ,否则此功能不能使用...");
return;
}
CString strFileName;
strFileName.Format("%sspec.xls",LoginInformation.path);
books2=app2.GetWorkbooks();
//.........这里部分代码省略.........
示例3: CreateWindowEx
//.........这里部分代码省略.........
m_CheckText2,
WS_CHILD|WS_VISIBLE|WS_CLIPCHILDREN|BS_AUTOCHECKBOX,
0,100,100,50,
hwnd,
0,
NULL,
NULL);
if (checkbox2 == NULL)
return 0;
}
ListView = FindWindowEx(hwnd,NULL,_T("SysTreeView32"),NULL);
if (ListView == NULL)
ListView = FindWindowEx(hwnd,NULL,_T("SHBrowseForFolder ShellNameSpace Control"),NULL);
if (ListView == NULL)
return 0;
//Gets the dimensions of the windows
GetWindowRect(hwnd,&Dialog);
GetWindowRect(ListView,&ListViewRect);
POINT pt;
pt.x = ListViewRect.left;
pt.y = ListViewRect.top;
ScreenToClient(hwnd, &pt);
ListViewRect.top = pt.y;
ListViewRect.left = pt.x;
pt.x = ListViewRect.right;
pt.y = ListViewRect.bottom;
ScreenToClient(hwnd, &pt);
ListViewRect.bottom = pt.y;
ListViewRect.right = pt.x;
//Sets the list view controls dimensions
SetWindowPos(ListView,0,ListViewRect.left,
bSecondCheckbox ? ListViewRect.top+40 : ListViewRect.top+20,
(ListViewRect.right-ListViewRect.left),
bSecondCheckbox ? (ListViewRect.bottom - ListViewRect.top)-40 : (ListViewRect.bottom - ListViewRect.top)-20,
SWP_NOZORDER);
//Sets the window positions of checkbox and dialog controls
SetWindowPos(checkbox,HWND_BOTTOM,ListViewRect.left,
ListViewRect.top,
(ListViewRect.right-ListViewRect.left),
14,
SWP_NOZORDER);
if (bSecondCheckbox)
{
SetWindowPos(checkbox2,HWND_BOTTOM,ListViewRect.left,
ListViewRect.top+20,
(ListViewRect.right-ListViewRect.left),
14,
SWP_NOZORDER);
}
HWND label = FindWindowEx(hwnd, NULL, _T("STATIC"), NULL);
if (label)
{
HFONT hFont = (HFONT)::SendMessage(label, WM_GETFONT, 0, 0);
LOGFONT lf = {0};
GetObject(hFont, sizeof(lf), &lf);
HFONT hf2 = CreateFontIndirect(&lf);
::SendMessage(checkbox, WM_SETFONT, (WPARAM)hf2, TRUE);
if (bSecondCheckbox)
::SendMessage(checkbox2, WM_SETFONT, (WPARAM)hf2, TRUE);
}
else
{
//Sets the fonts of static controls
SetFont(checkbox,_T("MS Sans Serif"),12);
if (bSecondCheckbox)
SetFont(checkbox2,_T("MS Sans Serif"),12);
}
// Subclass the checkbox control.
CBProc = (WNDPROC) SetWindowLongPtr(checkbox,GWLP_WNDPROC, (LONG_PTR) CheckBoxSubclassProc);
//Sets the checkbox to checked position
SendMessage(checkbox,BM_SETCHECK,(WPARAM)m_bCheck,0);
if (bSecondCheckbox)
{
CBProc = (WNDPROC) SetWindowLongPtr(checkbox2,GWLP_WNDPROC, (LONG_PTR) CheckBoxSubclassProc2);
SendMessage(checkbox2,BM_SETCHECK,(WPARAM)m_bCheck,0);
}
// send a resize message to the resized list view control. Otherwise it won't show
// up properly until the user resizes the window!
SendMessage(ListView, WM_SIZE, SIZE_RESTORED, MAKELONG(ListViewRect.right-ListViewRect.left, bSecondCheckbox ? (ListViewRect.bottom - ListViewRect.top)-40 : (ListViewRect.bottom - ListViewRect.top)-20));
}
// now set the default directory
SendMessage(hwnd, BFFM_SETSELECTION, TRUE, (LPARAM)(LPCTSTR)m_sDefaultPath);
}
if (uMsg == BFFM_SELCHANGED)
{
// Set the status window to the currently selected path.
TCHAR szDir[MAX_PATH];
if (SHGetPathFromIDList((LPITEMIDLIST)lParam, szDir))
{
SendMessage(hwnd,BFFM_SETSTATUSTEXT, 0, (LPARAM)szDir);
}
}
return 0;
}
示例4: SHGetPathFromIDList
CXMLParser::CXMLParser(const std::string& fileStr)
{
#pragma region Create temp folder
CString szFolder;
LPITEMIDLIST pidl;
LPMALLOC pShellMalloc;
TCHAR szTemp[MAX_PATH];
if(SUCCEEDED(SHGetMalloc(&pShellMalloc)))
{
if(SUCCEEDED(SHGetSpecialFolderLocation(NULL,
CSIDL_APPDATA,&pidl)))
{
SHGetPathFromIDList(pidl,szTemp);
szFolder =szTemp;
pShellMalloc->Free(pidl);
}
pShellMalloc->Release();
}
szFolder.TrimRight(_T("\\"));
szFolder += _T("\\TF3DXML");
MyDeleteFile(szFolder);
CFileStatus fstatus;
if (!CFile::GetStatus(szFolder,fstatus))
{
::CreateDirectory(szFolder,NULL);
}
#pragma endregion Create temp folder
const size_t strsize=(szFolder.GetLength()+1)*2; // 宽字符的长度;
char * qstr= new char[strsize]; //分配空间;
size_t sz=0;
wcstombs_s(&sz,qstr,strsize,szFolder,_TRUNCATE);
cUnpackFile unpackTool;
unpackTool.CreateDirFromZip(qstr,fileStr.c_str());
delete []qstr;
//delete []filestr;
CFileFind finder;
LPCTSTR pstr = szFolder;
CString strWildcard(pstr);
strWildcard += _T("\\*.*");
CString m_ext_now;
m_ext_now.Format(_T("%s"),_T("3DRep"));
CString m_str_3dxml; //查找装配树的.3dxml文件
m_str_3dxml.Format(_T("%s"),_T("3dxml"));
BOOL bWorking = finder.FindFile(strWildcard);
while (bWorking)
{
bWorking = finder.FindNextFile();
CString name = finder.GetFileName();
CString extend = name.Right(name.GetLength() - name.ReverseFind('.') - 1);
if(!finder.IsDots())
{
if (extend == m_ext_now)//m_ext_now为你要查找的文件扩展名
{
CString str=finder.GetFilePath();
// 先得到要转换为字符的长度
const size_t strsize=(str.GetLength()+1)*2; // 宽字符的长度;
char * pstr= new char[strsize]; //分配空间;
size_t sz=0;
wcstombs_s(&sz,pstr,strsize,str,_TRUNCATE);
TiXmlDocument *myDocument = new TiXmlDocument(pstr);
myDocument->LoadFile();
TiXmlElement *rootElement=myDocument->RootElement();
if(rootElement->FirstChildElement()->FirstChildElement()!=NULL && strcmp(rootElement->FirstChildElement()->FirstChildElement()->Value(),"Rep")==0)
{
m_pTempFile=new TF3DRepFile();
string filename;
CT2A xx(name);
filename = xx;
m_pTempFile->SetFileName(filename);
TraverseRep(rootElement->FirstChildElement()->FirstChildElement());
m_fileList.push_back(m_pTempFile);
}
delete myDocument;
delete []pstr;
}
if(extend == m_str_3dxml)
{
CString str=finder.GetFilePath();
// 先得到要转换为字符的长度
const size_t strsize=(str.GetLength()+1)*2; // 宽字符的长度;
char * pstr= new char[strsize]; //分配空间;
size_t sz=0;
wcstombs_s(&sz,pstr,strsize,str,_TRUNCATE);
TiXmlDocument *myDocument = new TiXmlDocument(pstr);
myDocument->LoadFile();
TiXmlElement *rootElement=myDocument->RootElement();
if(strcmp(rootElement->FirstChildElement()->NextSiblingElement()->Value(),"ProductStructure")==0)
{
rootElement=rootElement->FirstChildElement()->NextSiblingElement()->FirstChildElement();
m_root=new ReferenceTreeElement();
m_root->value=(char *)rootElement->FirstAttribute()->Next()->Next()->Value();
m_root->id=atoi(rootElement->FirstAttribute()->Next()->Value());
//.........这里部分代码省略.........
示例5: __declspec
void __declspec(dllexport) SelectFolderDialog(HWND hwndParent, int string_size, TCHAR *variables, stack_t **stacktop, extra_parameters *extra)
{
BROWSEINFO bi;
TCHAR result[MAX_PATH];
TCHAR initial[MAX_PATH];
TCHAR title[1024];
LPITEMIDLIST resultPIDL;
EXDLL_INIT();
if (popstringn(title, sizeof(title)/sizeof(title[0])))
{
pushstring(_T("error"));
return;
}
if (popstringn(initial, sizeof(initial)/sizeof(initial[0])))
{
pushstring(_T("error"));
return;
}
bi.hwndOwner = hwndParent;
bi.pidlRoot = NULL;
bi.pszDisplayName = result;
bi.lpszTitle = title;
#ifndef BIF_NEWDIALOGSTYLE
#define BIF_NEWDIALOGSTYLE 0x0040
#endif
bi.ulFlags = BIF_STATUSTEXT | BIF_RETURNONLYFSDIRS | BIF_NEWDIALOGSTYLE;
bi.lpfn = BrowseCallbackProc;
bi.lParam = (LPARAM) initial;
bi.iImage = 0;
/*if (pField->pszRoot) {
LPSHELLFOLDER sf;
ULONG eaten;
LPITEMIDLIST root;
int ccRoot = (lstrlen(pField->pszRoot) * 2) + 2;
LPWSTR pwszRoot = (LPWSTR) MALLOC(ccRoot);
MultiByteToWideChar(CP_ACP, 0, pField->pszRoot, -1, pwszRoot, ccRoot);
SHGetDesktopFolder(&sf);
sf->ParseDisplayName(hConfigWindow, NULL, pwszRoot, &eaten, &root, NULL);
bi.pidlRoot = root;
sf->Release();
FREE(pwszRoot);
}*/
resultPIDL = SHBrowseForFolder(&bi);
if (!resultPIDL)
{
pushstring(_T("error"));
return;
}
if (SHGetPathFromIDList(resultPIDL, result))
{
pushstring(result);
}
else
{
pushstring(_T("error"));
}
CoTaskMemFree(resultPIDL);
}
示例6: getenv
void PATHMANAGER::Init(std::ostream & info_output, std::ostream & error_output)
{
typedef std::vector<fs::path> Paths;
// Set Ogre plugins dir
{
ogre_plugin_dir = "";
char *plugindir = getenv("OGRE_PLUGIN_DIR");
if (plugindir) {
ogre_plugin_dir = plugindir;
#ifndef _WIN32
} else if (fs::exists(fs::path(OGRE_PLUGIN_DIR) / "RenderSystem_GL.so")) {
ogre_plugin_dir = OGRE_PLUGIN_DIR;
#endif
} else {
#ifdef _WIN32
ogre_plugin_dir = ".";
#else
Paths dirs;
#if defined(__amd64__) || defined(__amd64) || defined(__x86_64__) || defined(_M_X64)
dirs.push_back("/usr/local/lib64");
dirs.push_back("/usr/lib64");
#else
dirs.push_back("/usr/local/lib32");
dirs.push_back("/usr/lib32");
#endif
dirs.push_back("/usr/local");
dirs.push_back("/usr/lib");
// Loop through the paths and pick the first one that contain a plugin
for (Paths::const_iterator p = dirs.begin(); p != dirs.end(); ++p) {
if (fs::exists(*p / "OGRE/RenderSystem_GL.so")) {
ogre_plugin_dir = (*p / "OGRE").string();
break;
} else if (fs::exists(*p / "ogre/RenderSystem_GL.so")) {
ogre_plugin_dir = (*p / "ogre").string();
break;
}
}
#endif
}
}
fs::path shortDir = "stuntrally";
// Figure out the user's home directory
{
home_dir = "";
#ifndef _WIN32 // POSIX
char *homedir = getenv("HOME");
if (homedir == NULL)
{
home_dir = "/home/";
homedir = getenv("USER");
if (homedir == NULL) {
homedir = getenv("USERNAME");
if (homedir == NULL) {
error_output << "Could not find user's home directory!" << std::endl;
home_dir = "/tmp/";
}
}
}
#else // Windows
char *homedir = getenv("USERPROFILE");
if (homedir == NULL) homedir = "data"; // WIN 9x/Me
#endif
home_dir += homedir;
}
// Find user's config dir
#ifndef _WIN32 // POSIX
{
char const* conf = getenv("XDG_CONFIG_HOME");
if (conf) user_config_dir = (fs::path(conf) / "stuntrally").string();
else user_config_dir = (fs::path(home_dir) / ".config" / "stuntrally").string();
}
#else // Windows
{
// Open AppData directory
std::string str;
ITEMIDLIST* pidl;
char AppDir[MAX_PATH];
HRESULT hRes = SHGetSpecialFolderLocation(NULL, CSIDL_APPDATA|CSIDL_FLAG_CREATE , &pidl);
if (hRes == NOERROR)
{
SHGetPathFromIDList(pidl, AppDir);
int i;
for (i = 0; AppDir[i] != '\0'; i++) {
if (AppDir[i] == '\\') str += '/';
else str += AppDir[i];
}
user_config_dir = (fs::path(str) / "stuntrally").string();
}
}
#endif
// Create user's config dir
CreateDir(user_config_dir, error_output);
// Find user's data dir (for additional data)
#ifdef _WIN32
user_data_dir = user_config_dir; // APPDATA/stuntrally
#else
//.........这里部分代码省略.........
示例7: Enable3dControls
BOOL CJlaunchApp::InitInstance()
{
// Standardinitialisierung
// Wenn Sie diese Funktionen nicht nutzen und die Größe Ihrer fertigen
// ausführbaren Datei reduzieren wollen, sollten Sie die nachfolgenden
// spezifischen Initialisierungsroutinen, die Sie nicht benötigen, entfernen.
#ifdef _AFXDLL
Enable3dControls(); // Diese Funktion bei Verwendung von MFC in gemeinsam genutzten DLLs aufrufen
#else
Enable3dControlsStatic(); // Diese Funktion bei statischen MFC-Anbindungen aufrufen
#endif
char cmd[MAX_PATH];
int n = strlen(m_pszHelpFilePath);
while (n-- > 0 && m_pszHelpFilePath[n] != '\\');
strncpy(cmd, m_pszHelpFilePath, n+1);
cmd[n+1] = 0;
strcat(cmd, "zeta.bat");
// m_sCmd = "c:\\zeta-1.5\\bin\\zeta.bat";
BROWSEINFO info;
char path[MAX_PATH];
info.hwndOwner = NULL; // GetSafeHwnd();
/*
SHGetSpecialFolderLocation(
NULL, CSIDL_PROFILE, &info.pidlRoot
);
*/
info.pidlRoot = NULL;
info.pszDisplayName = (LPTSTR)path;
info.lpszTitle = "Select Folder To Start ZETA Within";
info.ulFlags = 0; // BIF_NEWDIALOGSTYLE|BIF_USENEWUI|BIF_SHAREABLE
info.lpfn = NULL;
info.lParam = 0;
info.iImage = 0;
CoInitialize(NULL);
LPITEMIDLIST res = SHBrowseForFolder(&info);
if (res == NULL){
exit(1);
/*
MessageBox(
NULL, (LPCTSTR)"Error",
(LPCTSTR)"Cannot Launch ZETA",
0
);
*/
}
SHGetPathFromIDList(
res,
path
);
STARTUPINFO sinfo;
PROCESS_INFORMATION pinfo;
GetStartupInfo(&sinfo);
int cres = CreateProcess(
// NULL, (LPSTR)(LPCSTR)m_sCmd,
cmd, NULL, // (LPSTR)(LPCSTR)m_sCmd, NULL,
NULL,
NULL,
FALSE,
CREATE_NO_WINDOW,
NULL,
path,
&sinfo,
&pinfo
);
if (cres == 0){
char msg[1024];
FormatMessage(
FORMAT_MESSAGE_FROM_SYSTEM,
NULL,
GetLastError(),
0,
msg,
1024,
NULL
);
MessageBox(
NULL, (LPCTSTR)msg,
(LPCTSTR)"Cannot Launch ZETA",
MB_OK | MB_ICONSTOP
);
exit(2);
}
return FALSE;
}
示例8: BrowseCallbackProc
///////////////////////////////////////////////////////////////////////////////
// BrowseCallbackProc - SHBrowseForFolder callback function
static int CALLBACK BrowseCallbackProc(HWND hwnd, // Window handle to the browse dialog box
UINT uMsg, // Value identifying the event
LPARAM lParam, // Value dependent upon the message
LPARAM lpData) // Application-defined value that was
// specified in the lParam member of the
// BROWSEINFO structure
{
switch (uMsg)
{
case BFFM_INITIALIZED: // sent when the browse dialog box has finished initializing.
{
// remove context help button from dialog caption
LONG lStyle = ::GetWindowLong(hwnd, GWL_STYLE);
lStyle &= ~DS_CONTEXTHELP;
::SetWindowLong(hwnd, GWL_STYLE, lStyle);
lStyle = ::GetWindowLong(hwnd, GWL_EXSTYLE);
lStyle &= ~WS_EX_CONTEXTHELP;
::SetWindowLong(hwnd, GWL_EXSTYLE, lStyle);
// set initial directory
::SendMessage(hwnd, BFFM_SETSELECTION, TRUE, lpData);
// find the folder tree and make dialog larger
HWND hwndTree = FindWindowEx(hwnd, NULL, _T("SysTreeView32"), NULL);
if (hwndTree)
{
#if 0
// make the dialog larger
CRect rectDlg;
::GetWindowRect(hwnd, &rectDlg);
rectDlg.right += 40;
rectDlg.bottom += 30;
MoveWindowX(hwnd, rectDlg, TRUE);
::GetClientRect(hwnd, &rectDlg);
// move the Cancel button
CRect rectCancel(0, 0, 0, 0);
HWND hwndCancel = ::GetDlgItem(hwnd, IDCANCEL);
if (hwndCancel)
::GetWindowRect(hwndCancel, &rectCancel);
ScreenToClientX(hwnd, &rectCancel);
int h = rectCancel.Height();
int w = rectCancel.Width();
rectCancel.bottom = rectDlg.bottom - 5;
rectCancel.top = rectCancel.bottom - h;
rectCancel.right = rectDlg.right - 5;
rectCancel.left = rectCancel.right - w;
if (hwndCancel)
MoveWindowX(hwndCancel, rectCancel, FALSE);
// move the OK button
CRect rectOK(0, 0, 0, 0);
HWND hwndOK = ::GetDlgItem(hwnd, IDOK);
if (hwndOK)
::GetWindowRect(hwndOK, &rectOK);
ScreenToClientX(hwnd, &rectOK);
rectOK.bottom = rectDlg.bottom - 5;
rectOK.top = rectOK.bottom - h;
rectOK.right = rectCancel.left - 10;
rectOK.left = rectOK.right - w;
if (hwndOK)
MoveWindowX(hwndOK, rectOK, FALSE);
// expand the folder tree to fill the dialog
CRect rectTree;
::GetWindowRect(hwndTree, &rectTree);
ScreenToClientX(hwnd, &rectTree);
rectTree.top = 5;
rectTree.left= 5;
rectTree.bottom = rectOK.top - 5;
rectTree.right = rectDlg.right - 5;
MoveWindowX(hwndTree, rectTree, FALSE);
#endif
}
else
{
// TRACE(_T("ERROR - tree control not found.\n"));
_ASSERTE(hwndTree);
}
}
break;
case BFFM_SELCHANGED: // sent when the selection has changed
{
TCHAR szDir[MAX_PATH*2] = { 0 };
// fail if non-filesystem
BOOL bRet = SHGetPathFromIDList((LPITEMIDLIST) lParam, szDir);
if (bRet)
{
// fail if folder not accessible
if (_taccess(szDir, 00) != 0)
{
bRet = FALSE;
}
else
{
SHFILEINFO sfi;
//.........这里部分代码省略.........
示例9: Initialize
STDMETHODIMP CDDShellExt::Initialize(LPCITEMIDLIST pidlFolder,LPDATAOBJECT pDO,HKEY hProgID)
{
(void)hProgID;
if(!connected)
{
bool b = m_ac.connectToServer();
if (b==true)
{
connected=true;
}
else
return E_FAIL;
}
FORMATETC fmt={CF_HDROP,NULL,DVASPECT_CONTENT,-1,TYMED_HGLOBAL};
STGMEDIUM stg={TYMED_HGLOBAL};
HDROP hDrop;
fDestDir[0]=0;
if (!SHGetPathFromIDList(pidlFolder,fDestDir))
{
#ifdef CATCHCOPY_EXPLORER_PLUGIN_DEBUG
MessageBox(NULL,L"Initialize",L"E_FAIL 1",MB_OK);
#endif // CATCHCOPY_EXPLORER_PLUGIN_DEBUG
return E_FAIL;
}
// Detect if it's explorer that started the operation by enumerating available
// clipboard formats and searching for one that only explorer uses
IEnumFORMATETC *en;
FORMATETC fmt2;
WCHAR fmtName[256]=L"\0";
fFromExplorer=false;
pDO->EnumFormatEtc(DATADIR_GET,&en);
while(en->Next(1,&fmt2,NULL)==S_OK){
GetClipboardFormatName(fmt2.cfFormat,fmtName,256);
if (!wcscmp(fmtName,CFSTR_SHELLIDLIST)) fFromExplorer=true;
}
en->Release();
// Look for CF_HDROP data in the data object. If there
// is no such data, return an error back to Explorer.
if (FAILED(pDO->GetData(&fmt,&stg)))
{
#ifdef CATCHCOPY_EXPLORER_PLUGIN_DEBUG
MessageBox(NULL,L"Initialize",L"E_INVALIDARG 2",MB_OK);
#endif // CATCHCOPY_EXPLORER_PLUGIN_DEBUG
return E_INVALIDARG;
}
// Get a pointer to the actual data.
hDrop=(HDROP)GlobalLock(stg.hGlobal);
// Make sure it worked.
if (hDrop==NULL)
{
#ifdef CATCHCOPY_EXPLORER_PLUGIN_DEBUG
MessageBox(NULL,L"Initialize",L"E_INVALIDARG 1",MB_OK);
#endif // CATCHCOPY_EXPLORER_PLUGIN_DEBUG
return E_INVALIDARG;
}
UINT numFiles,i;
WCHAR fn[MAX_PATH]=L"";
numFiles=DragQueryFile(hDrop,0xFFFFFFFF,NULL,0);
if (numFiles)
{
for(i=0;i<numFiles;++i)
{
if(DragQueryFile(hDrop,i,fn,MAX_PATH))
sources.push_back(fn);
}
}
GlobalUnlock(stg.hGlobal);
ReleaseStgMedium(&stg);
return S_OK;
}
示例10: CString
CBrowseFolder::retVal CBrowseFolder::Show(HWND parent, CString& path, const CString& sDefaultPath /* = CString() */)
{
retVal ret = OK; //assume OK
m_sDefaultPath = sDefaultPath;
if (m_sDefaultPath.IsEmpty() && !path.IsEmpty()) {
while (!PathFileExists(path) && !path.IsEmpty()) {
CString p = path.Left(path.ReverseFind(L'\\'));
if ((p.GetLength() == 2) && (p[1] == L':')) {
p += L"\\";
if (p.Compare(path) == 0)
p.Empty();
}
if (p.GetLength() < 2)
p.Empty();
path = p;
}
// if the result path already contains a path, use that as the default path
m_sDefaultPath = path;
}
HRESULT hr;
// Create a new common open file dialog
IFileOpenDialog* pfd = NULL;
hr = CoCreateInstance(CLSID_FileOpenDialog, NULL, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&pfd));
if (SUCCEEDED(hr)) {
// Set the dialog as a folder picker
DWORD dwOptions;
if (SUCCEEDED(hr = pfd->GetOptions(&dwOptions))) {
hr = pfd->SetOptions(dwOptions | FOS_PICKFOLDERS | FOS_FORCEFILESYSTEM | FOS_PATHMUSTEXIST);
}
// Set a title
if (SUCCEEDED(hr)) {
TCHAR * nl = _tcschr(m_title, '\n');
if (nl)
*nl = 0;
pfd->SetTitle(m_title);
}
// set the default folder
if (SUCCEEDED(hr)) {
typedef HRESULT(WINAPI *SHCIFPN)(PCWSTR pszPath, IBindCtx * pbc, REFIID riid, void ** ppv);
SHCIFPN pSHCIFPN = hLib.GetProcAddress<SHCIFPN>("SHCreateItemFromParsingName");
if (pSHCIFPN) {
IShellItem *psiDefault = 0;
hr = pSHCIFPN(m_sDefaultPath, NULL, IID_PPV_ARGS(&psiDefault));
if (SUCCEEDED(hr)) {
hr = pfd->SetFolder(psiDefault);
psiDefault->Release();
}
}
}
// Show the open file dialog
if (SUCCEEDED(hr) && SUCCEEDED(hr = pfd->Show(parent))) {
// Get the selection from the user
IShellItem* psiResult = NULL;
hr = pfd->GetResult(&psiResult);
if (SUCCEEDED(hr)) {
PWSTR pszPath = NULL;
hr = psiResult->GetDisplayName(SIGDN_FILESYSPATH, &pszPath);
if (SUCCEEDED(hr)) {
path = pszPath;
CoTaskMemFree(pszPath);
}
psiResult->Release();
} else
ret = CANCEL;
} else
ret = CANCEL;
pfd->Release();
} else {
BROWSEINFO browseInfo = {};
browseInfo.hwndOwner = parent;
browseInfo.pidlRoot = m_root;
browseInfo.pszDisplayName = m_displayName;
browseInfo.lpszTitle = m_title;
browseInfo.ulFlags = m_style;
browseInfo.lParam = reinterpret_cast<LPARAM>(this);
PCIDLIST_ABSOLUTE itemIDList = SHBrowseForFolder(&browseInfo);
//is the dialog canceled?
if (!itemIDList)
ret = CANCEL;
if (ret != CANCEL) {
if (!SHGetPathFromIDList(itemIDList, path.GetBuffer(MAX_PATH))) // MAX_PATH ok. Explorer can't handle paths longer than MAX_PATH.
ret = NOPATH;
path.ReleaseBuffer();
CoTaskMemFree((LPVOID)itemIDList);
}
}
//.........这里部分代码省略.........
示例11: XBrowseForFolder
///////////////////////////////////////////////////////////////////////////////
//
// XBrowseForFolder()
//
// Purpose: Invoke the SHBrowseForFolder API. If lpszInitialFolder is
// supplied, it will be the folder initially selected in the tree
// folder list. Otherwise, the initial folder will be set to the
// current directory. The selected folder will be returned in
// lpszBuf.
//
// Parameters: hWnd - handle to the owner window for the dialog
// lpszInitialFolder - initial folder in tree; if NULL, the initial
// folder will be the current directory.
// lpszBuf - buffer for the returned folder path
// dwBufSize - size of lpszBuf in TCHARs
//
// Returns: BOOL - TRUE = success; FALSE = user hit Cancel
//
BOOL XBrowseForFolder(HWND hWnd,
LPCTSTR lpszInitialFolder,
LPTSTR lpszBuf,
DWORD dwBufSize)
{
_ASSERTE(lpszBuf);
_ASSERTE(dwBufSize >= MAX_PATH);
if (lpszBuf == NULL || dwBufSize < MAX_PATH)
return FALSE;
lpszBuf[0] = _T('\0');
TCHAR szInitialPath[MAX_PATH*2];
ZeroMemory(szInitialPath, sizeof(szInitialPath));
if (lpszInitialFolder && lpszInitialFolder[0] != _T('\0'))
{
_tcsncpy(szInitialPath, lpszInitialFolder,
sizeof(szInitialPath)/sizeof(TCHAR)-2);
}
else
{
// no initial folder, set to current directory
::GetCurrentDirectory(sizeof(szInitialPath)/sizeof(TCHAR)-2,
szInitialPath);
}
BROWSEINFO bi;
ZeroMemory(&bi, sizeof(BROWSEINFO));
bi.hwndOwner = hWnd;
bi.ulFlags = BIF_RETURNONLYFSDIRS; // do NOT use BIF_NEWDIALOGSTYLE,
// BIF_EDITBOX, or BIF_STATUSTEXT
bi.lpfn = BrowseCallbackProc;
bi.lParam = (LPARAM) szInitialPath;
LPITEMIDLIST pidl = SHBrowseForFolder(&bi);
BOOL bRet = FALSE;
if (pidl)
{
TCHAR szBuffer[MAX_PATH*2];
szBuffer[0] = _T('\0');
if (SHGetPathFromIDList(pidl, szBuffer))
{
ZeroMemory(lpszBuf, dwBufSize);
_tcsncpy(lpszBuf, szBuffer, dwBufSize-1);
bRet = TRUE;
}
else
{
// TRACE(_T("SHGetPathFromIDList failed\n"));
}
IMalloc *pMalloc = NULL;
if (SUCCEEDED(SHGetMalloc(&pMalloc)) && pMalloc)
{
pMalloc->Free(pidl);
pMalloc->Release();
}
}
return bRet;
}
示例12: FillTreeView
/* #FN#
Fills a branch of the TreeView control.
Given the shell folder, enumerate the subitems of this folder, and
add the appropriate items to the tree. This function enumerates the
items in the folder identifed by lpsf. Note that since we are filling
the left hand pane, we will only add items that are folders and/or
have sub-folders. We *could* put all items in here if we wanted, but
that's not the intent. */
void
/* #AS#
Nothing */
CShellTree::
FillTreeView(
LPSHELLFOLDER lpsf, /* #IN# Pointer to shell folder that we want to enumerate items */
LPITEMIDLIST lpifq, /* #IN# Fully qualified item id list to the item that we are enumerating items for; in other words, this is the PIDL to the item identified by the lpsf parameter */
HTREEITEM hParent /* #IN# Parent node */
)
{
TV_ITEM tvi; /* TreeView Item */
TV_INSERTSTRUCT tvins; /* TreeView Insert Struct */
HTREEITEM hPrev = NULL; /* Previous Item Added */
LPSHELLFOLDER lpsf2 = NULL;
LPENUMIDLIST lpe = NULL;
LPITEMIDLIST lpi = NULL;
LPITEMIDLIST lpifqThisItem = NULL;
LPTVITEMDATA lptvid = NULL;
LPMALLOC lpMalloc = NULL;
ULONG ulFetched = 0;
HWND hwnd = ::GetParent( m_hWnd );
char szBuff[ MAX_PATH + 1 ];
char szPath[ MAX_PATH + 1 ];
HRESULT hr;
/* Allocate a shell memory object */
hr = ::SHGetMalloc( &lpMalloc );
if( FAILED(hr) )
return;
if( SUCCEEDED(hr) )
{
/* Get the IEnumIDList object for the given folder */
hr = lpsf->EnumObjects( hwnd, SHCONTF_FOLDERS | SHCONTF_NONFOLDERS | SHCONTF_INCLUDEHIDDEN, &lpe );
if( S_OK == hr && lpe )
{
/* Enumerate throught the list of folder and non-folder objects */
while( S_OK == lpe->Next( 1, &lpi, &ulFetched ) )
{
/* Create a fully qualified path to the current item. The SH* shell API's
take a fully qualified path pidl, (see GetIcon above where I call
SHGetFileInfo) whereas the interface methods take a relative path pidl */
ULONG ulAttrs = SFGAO_FOLDER | SFGAO_HASSUBFOLDER;
if( !m_bFolderMode )
ulAttrs |= SFGAO_FILESYSTEM | SFGAO_LINK;
/* Determine what type of object we have */
lpsf->GetAttributesOf( 1, (const struct _ITEMIDLIST **)&lpi, &ulAttrs );
if( m_bFolderMode && ulAttrs & (SFGAO_HASSUBFOLDER | SFGAO_FOLDER) ||
(!m_bFolderMode && ulAttrs & (SFGAO_HASSUBFOLDER | SFGAO_FOLDER | SFGAO_FILESYSTEM) && !(ulAttrs & SFGAO_LINK)) )
{
tvi.mask = TVIF_TEXT | TVIF_IMAGE | TVIF_SELECTEDIMAGE | TVIF_PARAM;
/* We need this next if statement so that we don't add things like
the MSN to our tree. MSN is not a folder, but according to the
shell it has subfolders */
/* OK, let's get some memory for our ITEMDATA struct */
lptvid = (LPTVITEMDATA)lpMalloc->Alloc( sizeof(TVITEMDATA) );
if( !lptvid )
goto Done; /* Error - could not allocate memory */
/* Now get the friendly name that we'll put in the treeview */
if( !GetName( lpsf, lpi, SHGDN_NORMAL, szBuff ) )
goto Done; /* Error - could not get friendly name */
tvi.pszText = szBuff;
tvi.cchTextMax = MAX_PATH;
/* Allocate/create the fully qualified PIDL, consisting
of the parents full PIDL and our relative PIDL */
lpifqThisItem = ConcatPidls( lpifq, lpi );
if( ulAttrs & SFGAO_FOLDER && (ulAttrs & SFGAO_HASSUBFOLDER ||
/* There are not any subfolders but what about files? */
(!m_bFolderMode && SHGetPathFromIDList( lpifqThisItem, szPath ) && !IsFolderEmpty( szPath ))) )
{
/* This item has sub-folders, so let's put the + in the TreeView.
The first time the user clicks on the item, we'll populate the
sub-folders */
tvi.cChildren = 1;
tvi.mask |= TVIF_CHILDREN;
}
/* Now, make a copy of the ITEMIDLIST (non-qualified) */
lptvid->lpi = CopyITEMID( lpMalloc, lpi );
tvi.iImage =
GetItemIcon( lpifqThisItem,
//.........这里部分代码省略.........
示例13: UM_USER_CONTROLS
//.........这里部分代码省略.........
ofn.lpstrTitle = _T("Choose program to run");
ofn.Flags = OFN_ENABLESIZING|OFN_NOCHANGEDIR
| OFN_PATHMUSTEXIST|OFN_EXPLORER|OFN_HIDEREADONLY|OFN_FILEMUSTEXIST;
if (GetOpenFileName(&ofn))
{
LPCWSTR pszNewText = pszFilePath + 1;
if (wcschr(pszFilePath, L' '))
{
pszFilePath[0] = L'"'; _wcscat_c(pszFilePath, nLen+3, L"\"");
pszNewText = pszFilePath;
}
SetDlgItemText(hDlg, IDC_RESTART_CMD, pszNewText);
}
SafeFree(pszFilePath);
return 1;
}
case IDC_CHOOSE_DIR:
{
BROWSEINFO bi = {ghWnd};
wchar_t szFolder[MAX_PATH+1] = {0};
GetDlgItemText(hDlg, IDC_STARTUP_DIR, szFolder, countof(szFolder));
bi.pszDisplayName = szFolder;
wchar_t szTitle[100];
bi.lpszTitle = wcscpy(szTitle, L"Choose startup directory");
bi.ulFlags = BIF_EDITBOX | BIF_RETURNONLYFSDIRS | BIF_VALIDATE;
bi.lpfn = BrowseCallbackProc;
bi.lParam = (LPARAM)szFolder;
LPITEMIDLIST pRc = SHBrowseForFolder(&bi);
if (pRc)
{
if (SHGetPathFromIDList(pRc, szFolder))
{
SetDlgItemText(hDlg, IDC_STARTUP_DIR, szFolder);
}
CoTaskMemFree(pRc);
}
return 1;
}
case cbRunAsAdmin:
{
// BCM_SETSHIELD = 5644
BOOL bRunAs = SendDlgItemMessage(hDlg, cbRunAsAdmin, BM_GETCHECK, 0, 0);
if (gOSVer.dwMajorVersion >= 6)
{
SendDlgItemMessage(hDlg, IDC_START, 5644/*BCM_SETSHIELD*/, 0, bRunAs);
}
if (bRunAs)
{
CheckRadioButton(hDlg, rbCurrentUser, rbAnotherUser, rbCurrentUser);
CheckDlgButton(hDlg, cbRunAsRestricted, BST_UNCHECKED);
RecreateDlgProc(hDlg, UM_USER_CONTROLS, 0, 0);
}
return 1;
}
case rbCurrentUser:
case rbAnotherUser:
case cbRunAsRestricted:
{
示例14: SHGetSpecialFolderLocation
/*
List files in the local client folder and send the list to the File Client
*/
bool CFileServer::ListFileInDestinationFolder()
{
try
{
//***Pan peng 2008-11-28
RemoteFolderPath path;
if (!m_pServerSocket->ReadExact(m_pServerSocket->GetWorkingSocket(), (char*)(&path), sizeof(RemoteFolderPath)))
return false;
//if(m_strReceivePath.Find(" 桌面") != -1)
if(m_strReceivePath.Find(szDesktop_CH) != -1 && m_strReceivePath.Find(szDesktop_EN) != -1)
{
char strDesktop[MAX_PATH];
LPITEMIDLIST pidl;
SHGetSpecialFolderLocation(0, CSIDL_DESKTOP, &pidl);
SHGetPathFromIDList(pidl, strDesktop);
m_strReceivePath = strDesktop;
}
else
m_strReceivePath = path.RemotePath;
//end***
CDestFolderHelper folderHelper;
folderHelper.SetDestFolder(m_strReceivePath);
FileCount structFileCount;
if (folderHelper.IsDestFolderExist())
{
int nFileCount = 0;
BasicFileInfoList* pFileList = folderHelper.GetFileListInDestFolder(&nFileCount);
if (pFileList == NULL)
{
structFileCount.nFileCount = 0;
return SendListFileResponseHeader(structFileCount);
}
else
{
structFileCount.nFileCount = nFileCount;
SendListFileResponseHeader(structFileCount);
bool bResult = SendLocalFileInfo(pFileList);
while (pFileList != NULL)
{
BasicFileInfoList* pNext = pFileList->pNext;
delete pFileList;
pFileList = pNext;
}
return bResult;
}
}
else
{
structFileCount.nFileCount = 0;
return SendListFileResponseHeader(structFileCount);
}
}
catch(...)
{
if (gl_pLogger)
gl_pLogger->log_info("CFileServer::ProcessFileHeader() unkown exception.");
}
return false;
}
示例15: ZeroMemory
//.........这里部分代码省略.........
// the coordinates in WM_MOUSEWHEEL are screen, not client coordinates
POINT point;
point.x = GET_X_LPARAM(lParam);
point.y = GET_Y_LPARAM(lParam);
WindowFromScreenCoords(hWnd, &point);
newEvent.button.x = (uint16_t)point.x;
newEvent.button.y = (uint16_t)point.y;
newEvent.button.button = GET_Y_LPARAM(wParam) > 0 ? XBMC_BUTTON_WHEELUP : XBMC_BUTTON_WHEELDOWN;
m_pEventFunc(newEvent);
newEvent.type = XBMC_MOUSEBUTTONUP;
newEvent.button.state = XBMC_RELEASED;
m_pEventFunc(newEvent);
}
return(0);
case WM_SIZE:
newEvent.type = XBMC_VIDEORESIZE;
newEvent.resize.type = XBMC_VIDEORESIZE;
newEvent.resize.w = GET_X_LPARAM(lParam);
newEvent.resize.h = GET_Y_LPARAM(lParam);
if (newEvent.resize.w * newEvent.resize.h)
m_pEventFunc(newEvent);
return(0);
case WM_MEDIA_CHANGE:
{
// There may be multiple notifications for one event
// There are also a few events we're not interested in, but they cause no harm
// For example SD card reader insertion/removal
long lEvent;
PIDLIST_ABSOLUTE *ppidl;
HANDLE hLock = SHChangeNotification_Lock((HANDLE)wParam, (DWORD)lParam, &ppidl, &lEvent);
if (hLock)
{
char drivePath[MAX_PATH+1];
if (!SHGetPathFromIDList(ppidl[0], drivePath))
break;
switch(lEvent)
{
case SHCNE_DRIVEADD:
case SHCNE_MEDIAINSERTED:
CLog::Log(LOGDEBUG, __FUNCTION__": Drive %s Media has arrived.", drivePath);
if (GetDriveType(drivePath) == DRIVE_CDROM)
g_application.getApplicationMessenger().OpticalMount(drivePath, true);
else
CWin32StorageProvider::SetEvent();
break;
case SHCNE_DRIVEREMOVED:
case SHCNE_MEDIAREMOVED:
CLog::Log(LOGDEBUG, __FUNCTION__": Drive %s Media was removed.", drivePath);
if (GetDriveType(drivePath) == DRIVE_CDROM)
g_application.getApplicationMessenger().OpticalUnMount(drivePath);
else
CWin32StorageProvider::SetEvent();
break;
}
SHChangeNotification_Unlock(hLock);
}
break;
}
case WM_POWERBROADCAST:
if (wParam==PBT_APMSUSPEND)
{
CLog::Log(LOGDEBUG,"WM_POWERBROADCAST: PBT_APMSUSPEND event was sent");
CWin32PowerSyscall::SetOnSuspend();
}
else if(wParam==PBT_APMRESUMEAUTOMATIC)
{
CLog::Log(LOGDEBUG,"WM_POWERBROADCAST: PBT_APMRESUMEAUTOMATIC event was sent");
CWin32PowerSyscall::SetOnResume();
}
break;
case WM_DEVICECHANGE:
{
PDEV_BROADCAST_DEVICEINTERFACE b = (PDEV_BROADCAST_DEVICEINTERFACE) lParam;
CStdString dbcc_name(b->dbcc_name);
dbcc_name = CKeymapLoader::ParseWin32HIDName(b->dbcc_name);
switch (wParam)
{
case DBT_DEVICEARRIVAL:
CKeymapLoader().DeviceAdded(dbcc_name);
break;
case DBT_DEVICEREMOVECOMPLETE:
CKeymapLoader().DeviceRemoved(dbcc_name);
break;
case DBT_DEVNODES_CHANGED:
//CLog::Log(LOGDEBUG, "HID Device Changed");
//We generally don't care about Change notifications, only need to know if a device is removed or added to rescan the device list
break;
}
break;
}
case WM_PAINT:
//some other app has painted over our window, mark everything as dirty
g_windowManager.MarkDirty();
break;
}
return(DefWindowProc(hWnd, uMsg, wParam, lParam));
}