【问题标题】:Why command don't execute?为什么命令不执行?
【发布时间】:2020-07-25 13:16:31
【问题描述】:

我尝试对 CMD 执行命令,但它不起作用 包括:

#include <Windows.h>
#include <processthreadsapi.h>
#include <shellapi.h>
#include <stdio.h>
#include <iostream>

我如何尝试打开记事本:

ShellExecute(NULL, (LPCWSTR)"open", (LPCWSTR)"cmd", (LPCWSTR)"/c notepad.exe", NULL, SW_NORMAL);

【问题讨论】:

  • 你能解释一下你的演员吗?我的意思是LPCWSTR
  • 显式转换通常不是修复错误类型的编译器错误的方法。当然,您的代码可以编译,但可能无法正常工作。
  • 另外,命令行必须包含程序名称。在这种情况下,它会认为 /c 是程序名称并且将不起作用,因为 /c 然后作为实际参数丢失。您可以传递NULL 而不是应用程序(或将其保留为cmd),然后使用cmd /c notepad.exe 作为命令行。但是,我完全不明白您为什么要参与 CMD - 直接运行 notepad.exe
  • 我认为您的函数 ShellExecute 无法获取 wchar_t* 而不是 char* 或以空字符结尾的字符串。转换为正确的东西( char* 或什么都不做),它会起作用
  • 这里有一个错误(LPCWSTR)"/c notepad.exe",当您必须强制转换字符串类型时,您几乎总是做错事。请改用L"/c notepad.exe"。相关:https://stackoverflow.com/questions/1810343/is-a-wide-character-string-literal-starting-with-l-like-lhello-world-guarantee

标签: c++


【解决方案1】:

这行得通

ShellExecute(NULL, L"open", L"cmd", L"/c notepad.exe", NULL, SW_NORMAL);

不要使用强制转换来消除编译器错误。错误告诉您您使用了错误的类型,请改用正确的类型。

【讨论】:

    猜你喜欢
    • 2020-09-06
    • 1970-01-01
    • 2021-10-17
    • 2016-06-28
    • 2013-07-20
    • 1970-01-01
    • 1970-01-01
    • 2023-03-06
    • 1970-01-01
    相关资源
    最近更新 更多