C++ ShellExecute 消息问题
C++ ShellExecute msg issue
我有一个发送本地消息的 .bat
文件。当我 运行 它自己(双击)它工作时(弹出一条消息)。但是,当我使用 ShellExecute();
启动 .bat 时,它不起作用。可能是什么情况?这是代码:
message.bat
msg * hello
main.cpp
#include <windows.h>
int main()
{
ShellExecute(NULL, "open", "message.bat", NULL, NULL, 0);
}
.bat
中的其他内容,例如 start <something>
、shutdown
等,可与 ShellExecute();
一起使用。
编辑 我什至不能 运行 msg
和 system();
。它只能从 cmd
或 .bat
文件手动工作。
您应该 运行 像这样批处理文件:
const TCHAR batchFilePath[MAX_PATH] = _T("C:\Test\message.bat");
TCHAR systemDirPath[MAX_PATH] = _T("");
::GetSystemDirectory( systemDirPath, sizeof(systemDirPath)/sizeof(_TCHAR) );
TCHAR commandLine[2 * MAX_PATH + 16] = _T("");
_sntprintf( commandLine, sizeof(commandLine)/sizeof(_TCHAR),
_T("\"%s\cmd.exe\" /C \"%s\""), systemDirPath, batchFilePath );
STARTUPINFO si = {0};
si.cb = sizeof(si);
PROCESS_INFORMATION pi = {0};
if( !::CreateProcess( NULL,
commandLine,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi )
)
{
_tprintf( _T("CreateProcess failed (%d)\n"), GetLastError() );
return FALSE;
}
::WaitForSingleObject( pi.hProcess, INFINITE );
::CloseHandle( pi.hProcess );
::CloseHandle( pi.hThread );
会不会是您在 64 位上将其编译为 32 位 OS?在这种情况下,将不允许 运行 msg.exe
我有一个发送本地消息的 .bat
文件。当我 运行 它自己(双击)它工作时(弹出一条消息)。但是,当我使用 ShellExecute();
启动 .bat 时,它不起作用。可能是什么情况?这是代码:
message.bat
msg * hello
main.cpp
#include <windows.h>
int main()
{
ShellExecute(NULL, "open", "message.bat", NULL, NULL, 0);
}
.bat
中的其他内容,例如 start <something>
、shutdown
等,可与 ShellExecute();
一起使用。
编辑 我什至不能 运行 msg
和 system();
。它只能从 cmd
或 .bat
文件手动工作。
您应该 运行 像这样批处理文件:
const TCHAR batchFilePath[MAX_PATH] = _T("C:\Test\message.bat");
TCHAR systemDirPath[MAX_PATH] = _T("");
::GetSystemDirectory( systemDirPath, sizeof(systemDirPath)/sizeof(_TCHAR) );
TCHAR commandLine[2 * MAX_PATH + 16] = _T("");
_sntprintf( commandLine, sizeof(commandLine)/sizeof(_TCHAR),
_T("\"%s\cmd.exe\" /C \"%s\""), systemDirPath, batchFilePath );
STARTUPINFO si = {0};
si.cb = sizeof(si);
PROCESS_INFORMATION pi = {0};
if( !::CreateProcess( NULL,
commandLine,
NULL,
NULL,
FALSE,
0,
NULL,
NULL,
&si,
&pi )
)
{
_tprintf( _T("CreateProcess failed (%d)\n"), GetLastError() );
return FALSE;
}
::WaitForSingleObject( pi.hProcess, INFINITE );
::CloseHandle( pi.hProcess );
::CloseHandle( pi.hThread );
会不会是您在 64 位上将其编译为 32 位 OS?在这种情况下,将不允许 运行 msg.exe