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

怎么得到启动进程的文件的文件名

2012-02-02 
如何得到启动进程的文件的文件名?例如:要启动word程序,既可以运行word.exe,也可以直接运行word文档,如果是

如何得到启动进程的文件的文件名?
例如:要启动word程序,既可以运行word.exe,也可以直接运行word文档,如果是直接运行word文档,请教如何在程序中得到启动word程序的word文档名?
用GetModuleFileName函数只能得到word.exe,而不能得到word文档名,郁闷

[解决办法]
CWinApp::m_lpCmdLine,参数
[解决办法]
使用getcommandline来解析"word文档名"
[解决办法]
很久前写的个函数
char * Getprocmd(DWORD dwPid,char *lpszCmdLine)//调用前请确定权限
{
HMODULE hm;
DWORD addr,size;
HANDLE phd;
unsigned char buf[1024];
strcpy(lpszCmdLine,"(None)");
hm=GetModuleHandleA("kernel32.dll");
addr=(DWORD)GetProcAddress(hm,"GetCommandLineA");
phd = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, dwPid);
if(phd == NULL) {return 0;}
::ReadProcessMemory(phd,(LPVOID)addr,buf,5,&size);
if(size !=5) { ::CloseHandle(phd); return 0;}
if(buf[0] != 0xA1 ){strcpy(lpszCmdLine,"Windows ver differ!"); ::CloseHandle(phd); return lpszCmdLine;}//0xa1 : Mov EAX,
addr= *(DWORD *)(&buf[1]);
::ReadProcessMemory(phd,(LPVOID)addr,buf,4,&size);
if(size !=4) {::CloseHandle(phd); return 0;}
addr= *(DWORD *)(&buf[0]);
::ReadProcessMemory(phd,(LPVOID)addr,buf,1024,&size);
if(size == 0) {::CloseHandle(phd); return 0;}
::CloseHandle(phd);
strcpy(lpszCmdLine,(char *)buf);
//Msgs(str);
return lpszCmdLine;
}

热点排行