首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

VC 关联文件扩展名,打开时,怎么获得文件名

2012-03-27 
VC 关联文件扩展名,打开时,如何获得文件名?自己弄了个主程序(A.exe),在App里面注册关联了某个扩展名,比如.

VC 关联文件扩展名,打开时,如何获得文件名?
自己弄了个主程序(A.exe),在App里面注册关联了某个扩展名,比如.mp3;
然后我在App的InitInstance里面做如下判断
  C****Dlg* pAppMainDlgg = (C****Dlg*)AfxGetMainWnd();
CString Cmdline=m_lpCmdLine;
pAppMainDlgg->MessageBox(Cmdline,NULL,MB_OK);
if (Cmdline.Find(_T(".MP3")) != -1 || Cmdline.Find(_T(".mp3")) != -1 || Cmdline.Find(_T(".Mp3")) != -1)
{
CString strParam = Cmdline; //1号
//pAppMainDlgg->MessageBox(strParam,NULL,MB_OK);
TCHAR tc[MAX_PATH +2] =_T("");
GetModuleFileName(NULL, tc, MAX_PATH);
CString strPath = tc;
//pAppMainDlgg->MessageBox(strPath,NULL,MB_OK);
int nLast = strPath.ReverseFind(_T('\\'));
strPath = strPath.Left(nLast);
//pAppMainDlgg->MessageBox(strPath,NULL,MB_OK);
HINSTANCE bret=ShellExecute(NULL,_T("open"),strPath + _T("\\Tool.exe"),strParam,NULL,SW_SHOW); 
return FALSE;
}
这样,只要双击打开.mp3文件,就会打开另外一个程序tool.exe。
现在问题是,在A.exe程序所在的目录下,包含A.exe创建的文件夹内,如果有.mp3文件存在,那么双击打开,在1号地方接受到命令行 c:\PROGRA~1\DDFAFA~1\XDADFG~1.MP3,那么,传入Tool.exe程序的文件名出错,这样就不能打开了,请问有什么办法可以解决?
注:如果不是在A.exe程序目录下或者A.exe创建的文件夹内,那么打开随便一个.MP3文件,都会成功打开Tool.exe,在1号处接受到的也是文件的全路径。

[解决办法]
用CreateProcess()试试:

C/C++ code
    CCommandLineInfo cmdInfo;    ParseCommandLine(cmdInfo);    char lpCmdLine[MAX_PATH];    sprintf(lpCmdLine, "Tool.exe %s", cmdInfo.m_strFileName);    STARTUPINFO si = {sizeof(STARTUPINFO)};//启动信息    PROCESS_INFORMATION pi;//进程信息    ::CreateProcess(NULL, lpCmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi);//建立进程
[解决办法]
C:\PROGRA~1\DDFAFA~1\XDADFG~1.MP3这样格式的路径没有什么错误呀,8.3格式
[解决办法]
点这个看看:CFileFind
[解决办法]
也就是说电脑传过来的是短路径?照理说没问题的啊
[解决办法]
C/C++ code
DWORD GetLongPathName(  LPCTSTR lpszShortPath,  LPTSTR lpszLongPath,  DWORD cchBuffer); 

热点排行