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(); 一起使用。

编辑 我什至不能 运行 msgsystem();。它只能从 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