C++用ShellExecute传递参数的问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++用ShellExecute传递参数的问题相关的知识,希望对你有一定的参考价值。
假设有int型变量a,b,c,d,需要通过ShellExecute函数传递给一个可执行程序project.exe,那这个ShellExecute语句该怎么写?
主要是变量从int型和LPCSTR的类型转换
sprintf(buf, "%d %d %d %d", a, b, c, d);
ShellExecute(NULL, TEXT("open"), TEXT("c:\\windows\\project"), (LPCTSTR)buf, NULL,SW_SHOW);追问
谢谢。能不能再问个问题:为什么我使用传递的参数时,argv[0]指向的是0,argv[1]才指向参数a呢?
本回答被提问者和网友采纳 参考技术B通过 atoi 等函数可实现转换。
#include <cstringt.h>...
CString sNumber= "1234567890";
int nResult;
nResult= atoi( sNumber ); // automatically does LPCSTR(sNumber) 参考技术C http://zhidao.baidu.com/question/39024655.html
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() 相同。感谢您的回答。以上是关于C++用ShellExecute传递参数的问题的主要内容,如果未能解决你的问题,请参考以下文章