.exe由C++;在命令行上工作,但不在Java中工作

.exe由C++;在命令行上工作,但不在Java中工作,java,exe,Java,Exe,我有一个.exe可以使我的windows计算机静音。它是由C++程序编译的。当我从命令行运行这个.exe时,无论是静音还是取消静音,它都非常有效。然而,我试图从Java程序运行这个程序,我没有得到任何错误,但它实际上也没有运行,或者至少没有正常运行,因为卷没有切换。自从调用执行.exe返回0且没有错误以来,我一直在四处寻找它可能是什么,但没有任何明显的结果 任何想法都会有帮助。多谢各位 这里是C++代码,编译成“静音.exe”: 注意,我也试着用JNA做了所有这些,并且得到了看起来相同的输出。j

我有一个.exe可以使我的windows计算机静音。它是由C++程序编译的。当我从命令行运行这个.exe时,无论是静音还是取消静音,它都非常有效。然而,我试图从Java程序运行这个程序,我没有得到任何错误,但它实际上也没有运行,或者至少没有正常运行,因为卷没有切换。自从调用执行.exe返回0且没有错误以来,我一直在四处寻找它可能是什么,但没有任何明显的结果

任何想法都会有帮助。多谢各位

这里是C++代码,编译成“静音.exe”:


注意,我也试着用JNA做了所有这些,并且得到了看起来相同的输出。java程序可以看到C++方法并调用它,但是系统没有变化。使用.exe似乎更容易,因为它显然可以在命令行上工作,但这里肯定有更深层次的问题。GUI应用程序默认情况下没有控制台窗口。mute.exe是作为控制台应用程序编写的,因此它会获得控制台窗口吗?请尝试“cmd/c mute.exe”,mute.exe在
mute.exe
的位置?在GetConsoleWindow和SendMessage调用之后,您是否尝试过使用GetLastError检查错误?注意,我也尝试过使用JNA执行所有这些操作,并且有类似的输出。java程序可以看到C++方法并调用它,但是系统没有变化。使用.exe似乎更容易,因为它显然可以在命令行上工作,但这里肯定有更深层次的问题。GUI应用程序默认情况下没有控制台窗口。mute.exe是作为控制台应用程序编写的,因此它会获得控制台窗口吗?请尝试“cmd/c mute.exe”,其中
mute.exe
位于何处?您是否尝试在GetConsoleWindow和SendMessage调用后使用GetLastError检查错误?
  void VolumeControl::mute() {
        HWND hwnd = GetConsoleWindow();
        SendMessage(hwnd, WM_APPCOMMAND, (WPARAM)hwnd, APPCOMMAND_VOLUME_MUTE << 16);
    }
 Process p = Runtime.getRuntime().exec("mute.exe");
 int exitVal = p.waitFor();
 System.out.println(exitVal);
 //Process process = new ProcessBuilder("mute.exe", "-u").start();
 //Runtime rt = Runtime.getRuntime() ;
 //rt.exec("mute.exe");