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