ShellExecute函数使用求助
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ShellExecute函数使用求助相关的知识,希望对你有一定的参考价值。
希望能够用ShellExecute函数实现打开一个exe执行程序,然后在这个执行程序中打开另外一个txt文件,求各位大神指教,要详细。
现有的exe文件的功能是将txt文件的文件名(包括扩展名)输入,按enter键即可生成相应的需要的dat文件。希望用ShellExecute实现在调用exe程序时txt文件的文件名(包括扩展名)能够自动读取,不用手动输入。
跪求!!!!!
ShellExecute Me.hwnd, "Open", "e:\tmp\t1.exe", "e:\tmp\1.txt", App.Path, 0&
这里的e:\tmp\t1.exe是exe文件,e:\tmp\1.txt则是txt文件,你根据自己的实际情况修改即可。
这样,你在那个调用的exe文件中用Command$就可以获取txt文件名及其完整路径了,比如:
Open Command$ For Input As #1追问
试过了不行呀,这是exe打开之后的样子,打开就要输入txt文件路径,怎么让他在打开的时候能够自动获取,不用自己输入
哇,你这是什么古董级软件啊?还是字符界面的。这个exe是你自己的还是别人的(意思就是你有权修改它吗?)?如果能修改,那你就把它改为能够接收命令行参数,然后把命令行参数赋值给文件名变量即可。如果不能修改,那就复杂一些了,如果这个程序支持标准输入输出(一般DOS程序都支持),那么可以试着做个批处理(Bat)文件,把txt文件名通过管道输入导入到exe文件中,比如:
echo myname.txt | 123.exe
然后用ShellExecute调用这个批处理文件即可。
只能说这么多了,你提供的信息有限,我们靠瞎猜也得有个限度吧?
额,我是完全不懂啊,就是给老师完成个任务。那个exe是不能修改的。怎么做批处理啊,就是把echo myname.txt | 123.exe输入到MFC程序里就可以吗。
Visual C++ ShellExecute() 函数中的奇怪行为
【中文标题】Visual C++ ShellExecute() 函数中的奇怪行为【英文标题】:Strange behavior in Visual C++ ShellExecute() function 【发布时间】:2017-02-02 05:46:34 【问题描述】:我尝试编写一个简短的基于 Visual Studio C++ MFC 对话框的应用程序,但在使用 ShellExecute()
时遇到了一个奇怪的行为。
#include "stdafx.h"
#include <iphlpapi.h>
#include "Shlwapi.h"
#include "TestShellExecute.h"
#include "TestShellExecuteDlg.h"
// CTestShellExecuteApp
BEGIN_MESSAGE_MAP(CTestShellExecuteApp, CWinApp)
ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
END_MESSAGE_MAP()
// The one and only CTestShellExecuteApp object
CTestShellExecuteApp theApp;
// CTestShellExecuteApp initialization
BOOL CTestShellExecuteApp::InitInstance()
CWinApp::InitInstance();
INT_PTR nResponse;
if (PathFileExists(TEXT("Config.ini")))
nResponse = IDOK;
else
CTestShellExecuteDlg dlg;
m_pMainWnd = &dlg;
nResponse = dlg.DoModal();
if (nResponse == IDOK)
ExecuteApp();
return FALSE;
void CTestShellExecuteApp::ExecuteApp(void)
ShellExecute(NULL, TEXT("open"), TEXT("notepad"),
TEXT("test.txt"), NULL, SW_SHOWNORMAL);
return;
如果文件“Config.ini”存在,代码直接转到 ShellExecute() 并且记事本可以正常启动。
当“Config.ini”文件不存在时,代码会打开一个只有OK和Cancel的对话框。
按下 OK 后,对话框返回并运行 ShellExecute()。记事本没有启动。如果我注释掉m_pMainWnd = &dlg;
这行,那么在对话框返回IDOK后,记事本就会启动。
有人可以解释这种行为吗?
【问题讨论】:
什么是 m_pMainWnd? m_pMainWnd 是主窗口。由于这是一个对话框应用程序,因此对话框是主窗口。此行由 MFC 向导生成。 【参考方案1】:这似乎只是一个时间问题(如果您设置了m_pMainWnd
,则完成了更多清理工作)。如果我在ShellExecute
之后添加Sleep(300);
,它就可以工作。您应该记住,ShellExecute
的某些操作可能是异步完成的(例如 DDE)。我会考虑使用SEE_MASK_NOASYNC
切换到ShellExecuteEx
或在终止之前添加Sleep
。
请不要忘记按照ShellExecute documentation on MSDN 中明确说明的方式初始化 COM。
【讨论】:
在 ShellExecute() 之后放置 Sleep(300) 确实解决了问题。我尝试将 ShellExecuteEx() 与 SEE_MASK_NOASYNC 一起使用,其行为与 ShellExecute() 相同。感谢您的回答。以上是关于ShellExecute函数使用求助的主要内容,如果未能解决你的问题,请参考以下文章