C++でエクスプローラを開いている時、そのパスを取得したい。
Posted: 2011年10月10日(月) 12:14
あらかたと申します
現在COMの勉強中です
http://homepage1.nifty.com/MADIA/vb/vb_ ... 30011.html
を自分なりにC++のコードに書き直してみました。
int main() {
CoInitialize(0);
IShellFolderViewDual2 *fid=NULL;
Folder *fldr;
FolderItems *fis;
CoCreateInstance(CLSID_ShellFolderView,NULL,CLSCTX_INPROC_SERVER,IID_IShellFolderViewDual2,(LPVOID *)&fld);
fld->get_Folder(&fldr); //←ここでfldrがNULLになります ・・・・・・・・・☆
fldr->Items(&fis);
FolderItem *fi;
VARIANT vr;
VariantInit( &vr );
vr.vt = VT_UI4;
vr.uintVal = 0;
fis->Item(vr,&fi);
BSTR buf;
fi->get_Path(&buf);
fi->Release();
fis->Release();
fldr->Release();
fld->Release();
CoUninitialize();
return 0;
}
ここで質問がいくつかあります。
1.なぜ☆の行でNULLになるのか?
2.これだとひとつのフォルダパスしか取得できない(と思っています)が参考ページの
For Each O In CreateObject("Shell.Application").Windows
はどうやるのでしょうか?
その他、このコードよりも効率的な方法があれば教えてください。よろしくお願いします
現在COMの勉強中です
http://homepage1.nifty.com/MADIA/vb/vb_ ... 30011.html
を自分なりにC++のコードに書き直してみました。
int main() {
CoInitialize(0);
IShellFolderViewDual2 *fid=NULL;
Folder *fldr;
FolderItems *fis;
CoCreateInstance(CLSID_ShellFolderView,NULL,CLSCTX_INPROC_SERVER,IID_IShellFolderViewDual2,(LPVOID *)&fld);
fld->get_Folder(&fldr); //←ここでfldrがNULLになります ・・・・・・・・・☆
fldr->Items(&fis);
FolderItem *fi;
VARIANT vr;
VariantInit( &vr );
vr.vt = VT_UI4;
vr.uintVal = 0;
fis->Item(vr,&fi);
BSTR buf;
fi->get_Path(&buf);
fi->Release();
fis->Release();
fldr->Release();
fld->Release();
CoUninitialize();
return 0;
}
ここで質問がいくつかあります。
1.なぜ☆の行でNULLになるのか?
2.これだとひとつのフォルダパスしか取得できない(と思っています)が参考ページの
For Each O In CreateObject("Shell.Application").Windows
はどうやるのでしょうか?
その他、このコードよりも効率的な方法があれば教えてください。よろしくお願いします