怎样在我的程序中启动另外的一个应用程序并打开一个文件?解决分全送! 我要在我的程序中根据用户选择的文件类型启动相应的应用程序,并用它打开用户指定的文件,怎么做啊,shellexecute函数可以吗?可是参数我总传递不对,有没有哪位大哥有这方面的例子或经验,给小弟分享一下, 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 使用CreateProcess()函數,定義如下BOOL CreateProcess( LPCTSTR lpApplicationName, // pointer to name of executable module LPTSTR lpCommandLine, // pointer to command line string LPSECURITY_ATTRIBUTES lpProcessAttributes, // process security attributes LPSECURITY_ATTRIBUTES lpThreadAttributes, // thread security attributes BOOL bInheritHandles, // handle inheritance flag DWORD dwCreationFlags, // creation flags LPVOID lpEnvironment, // pointer to new environment block LPCTSTR lpCurrentDirectory, // pointer to current directory name LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION);其中你可以把你想打開的文件名字作為lpCommandLine傳進去,不過你最好看看MSDN,這個參數是不能隨便傳的.有一些注意點 使用CreateProcess吧,例如使用CreateProcess打开*.txt文件:STARTUPINFO si;PROCESS_INFORMATION pi;ZeroMemory( &si, sizeof(si) );si.cb = sizeof(si);if( CreateProcess( NULL, "c:\\Temp\\test.txt", NULL, NULL, FALSE,NORMAL_PRIORITY_CLASS, NULL,NULL, &si, &pi) == 0 ){ MessageBox( NULL, "错误", "提示", MB_OK|MB_ICONSTOP ); return;}WaitForSingleObject( pi.hProcess, INFINITE ); //等待用户关闭*.txt文件 PROCESS_INFORMATION ProcInfo; STARTUPINFO si; ZeroMemory(&si,sizeof(si)); si.cb=sizeof(si); CreateProcess(notepad.exe,"C:\\read.txt",NULL,NULL,FALSE,0,NULL,NULL,&si,&ProcInfo); CreateProcess( LPCWSTR lpszImageName, LPCWSTR lpszCmdLine, LPSECURITY_ATTRIBUTES lpsaProcess, LPSECURITY_ATTRIBUTES lpsaThread, BOOL fInheritHandles, DWORD fdwCreate, LPVOID lpvEnvironment, LPWSTR lpszCurDir, LPSTARTUPINFOW lpsiStartInfo, LPPROCESS_INFORMATION lppiProcInfo); 如果是其它文件类型可以这样做:CreateProcess( NULL, " c:\\temp\\your.exe c:\\Temp\\test.dat", ...但你的程序必须支持命令行参数 winexec也可以吧 CString Open="C:\\winnt\\notepad.exe "; file="D:\\1.txt"; Open+=file; WinExec(Open,SW_SHOWNORMAL); 不是啊,我检查过文件名了,是正确的,而且我用notepad测试过,代码是可行的,但用我编的那个应用程序打开文件就不行,需要做什么设置吗? ShellExecute(NULL, "open", "c:\\Temp\\test.txt", NULL, NULL, SW_SHOWNORMAL); 你先试试在那种文件上双击,看是否由你的程序打开。如果不是,则在WINDOWS中将它们关联后,双击是否能由你的程序正确打开。 双击文件名时可以用我的程序打开,但用函数CreateProcess启动时参数设置了文件名也打不开,怎么回事啊。winexec函数msdn上说是在16位系统上用的,32位上应该用CreateProcess; MFC 继承CListBox 重载OnVScroll QueryInterface如何使用? 怎样在不同对话框间的数据传递 请教一个文件保存的问题,急! 怎样用ADO调用存储过程 vc,如何删除分割窗口(splitterwnd)中的一个pane,让另一个最大化? 微软欲抛弃Windows设计模式 重点推“长角” 我自己定义了一个消息,消息响应函数在我的对话框类CMyDlg中,消息发送在我的线程类中,报错: 请问如何设置Use run-time Library为Multithreaded 谁能讲讲#pragma指令的用法? 表格控件 come in! 如果知道某个ActiveX控件已注册?
BOOL CreateProcess(
LPCTSTR lpApplicationName,
// pointer to name of executable module
LPTSTR lpCommandLine, // pointer to command line string
LPSECURITY_ATTRIBUTES lpProcessAttributes, // process security attributes
LPSECURITY_ATTRIBUTES lpThreadAttributes, // thread security attributes
BOOL bInheritHandles, // handle inheritance flag
DWORD dwCreationFlags, // creation flags
LPVOID lpEnvironment, // pointer to new environment block
LPCTSTR lpCurrentDirectory, // pointer to current directory name
LPSTARTUPINFO lpStartupInfo, // pointer to STARTUPINFO
LPPROCESS_INFORMATION lpProcessInformation // pointer to PROCESS_INFORMATION
);
其中你可以把你想打開的文件名字作為lpCommandLine傳進去,不過你最好看看MSDN,這個參數是不能隨便傳的.有一些注意點
STARTUPINFO si;
PROCESS_INFORMATION pi;ZeroMemory( &si, sizeof(si) );
si.cb = sizeof(si);if( CreateProcess( NULL, "c:\\Temp\\test.txt", NULL, NULL, FALSE,NORMAL_PRIORITY_CLASS, NULL,NULL, &si, &pi) == 0 )
{
MessageBox( NULL, "错误", "提示", MB_OK|MB_ICONSTOP );
return;
}WaitForSingleObject( pi.hProcess, INFINITE ); //等待用户关闭*.txt文件
STARTUPINFO si;
ZeroMemory(&si,sizeof(si));
si.cb=sizeof(si);
CreateProcess(notepad.exe,"C:\\read.txt",NULL,NULL,FALSE,0,NULL,NULL,&si,&ProcInfo);
LPCWSTR lpszImageName,
LPCWSTR lpszCmdLine,
LPSECURITY_ATTRIBUTES lpsaProcess,
LPSECURITY_ATTRIBUTES lpsaThread,
BOOL fInheritHandles,
DWORD fdwCreate,
LPVOID lpvEnvironment,
LPWSTR lpszCurDir,
LPSTARTUPINFOW lpsiStartInfo,
LPPROCESS_INFORMATION lppiProcInfo);
CreateProcess( NULL, " c:\\temp\\your.exe c:\\Temp\\test.dat", ...
但你的程序必须支持命令行参数
CString Open="C:\\winnt\\notepad.exe ";
file="D:\\1.txt";
Open+=file;
WinExec(Open,SW_SHOWNORMAL);
如果不是,则在WINDOWS中将它们关联后,双击是否能由你的程序正确打开。
winexec函数msdn上说是在16位系统上用的,32位上应该用CreateProcess;