已經完成了我的JNI份額,並在我可以的地方引導。只要你必須本土去完成某件事情,並且假設任務簡單並且性能不是主要問題,那麼我發現啓動一個單獨的進程要比處理JNI或它的任何表兄弟容易得多。下面是適於從this文章,將設置基於單個命令行參數的主音量一些C++代碼:
#include <WinSDKVer.h>
#define _WIN32_WINNT _WIN32_WINNT_VISTA
#include <SDKDDKVer.h>
#define WIN32_LEAN_AND_MEAN
// Windows Header Files:
#include <windows.h>
#include <tchar.h>
#include <mmdeviceapi.h>
#include <endpointvolume.h>
int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
double newVolume = _ttof(lpCmdLine);
CoInitialize(NULL);
IMMDeviceEnumerator* deviceEnumerator = NULL;
if(CoCreateInstance(__uuidof(MMDeviceEnumerator), NULL, CLSCTX_INPROC_SERVER, __uuidof(IMMDeviceEnumerator), (LPVOID *)&deviceEnumerator) == S_OK) {
IMMDevice* defaultDevice = NULL;
if(deviceEnumerator->GetDefaultAudioEndpoint(eRender, eConsole, &defaultDevice) == S_OK) {
IAudioEndpointVolume* endpointVolume = NULL;
if(defaultDevice->Activate(__uuidof(IAudioEndpointVolume), CLSCTX_INPROC_SERVER, NULL, (LPVOID *)&endpointVolume) == S_OK) {
endpointVolume->SetMasterVolumeLevelScalar((float)newVolume, NULL);
endpointVolume->Release();
}
defaultDevice->Release();
}
deviceEnumerator->Release();
}
CoUninitialize();
return 0;
}
希望這有助於。
來源
2011-09-26 02:23:17
Ken
參見http://stackoverflow.com/questions/4964947/set-computer-volume – rogerdpack 2013-09-04 18:35:59