【问题标题】:Passing a variable in System() c++在 System() c++ 中传递变量
【发布时间】:2022-01-13 01:20:38
【问题描述】:
if (t.elapsed_millisecs() > 500) {
     system(("powershell(Get - WmiObject - Namespace root / WMI - Class WmiMonitorBrightnessMethods).WmiSetBrightness(1, " + brightness + string(")")).c_str());
     t = {};
}

brightness 只是一个 int,可以设置为 1 到 100

我正在尝试在一定时间内更改亮度,但我遇到了 system() 函数的问题。当程序试图执行system()函数时,cmd输出“'_'不是内部或外部命令、可运行程序或批处理文件。”

我的问题是如何正确地将变量传递给系统函数?

【问题讨论】:

  • std::to_string(亮度) ?现在我很确定你用亮度值来抵消那个 char*(然后将“)”连接到那个),这不是你想要的
  • 你不能。 system() 只接受一个变量、一个参数、一个 C 字符串。因此,您应该问的是如何创建这样的字符串。你知道std::ostringstreamstd::string怎么用吗?
  • @SamVarshavchik 我尝试制作一个单独的字符串,但它也不起作用
  • 我并没有简单地说“字符串”,而是提到了std::stringstd::ostringstream。这是对执行此操作的一组特定 C++ 类的显式引用。此外,我不知道“它也不起作用”是什么意思。我只能评论显示给我的代码。

标签: c++ windows


【解决方案1】:

您在示例中随意使用空格。

这个运行正常:

int brightness = 42;
string s = "powershell(Get-WmiObject -Namespace root/WMI -Class WmiMonitorBrightnessMethods).WmiSetBrightness(1, ";
s += to_string(brightness);
s += ")";
cout << s;
system(s.c_str());

虽然不会改变亮度,但我不知道WMI...

我可以在 PowerShell 控制台中运行它:

$myMonitor = Get-WmiObject -Namespace root\wmi -Class WmiMonitorBrightnessMethods
$myMonitor.wmisetbrightness(3,50)

相同的结果 - 没有错误,没有效果。

更新:

有效! (我一开始是在远程桌面上测试的)

【讨论】:

    猜你喜欢
    • 2017-05-22
    • 1970-01-01
    • 2010-11-03
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-21
    • 2013-06-26
    相关资源
    最近更新 更多