Frage

Wie ändere ich das Standard -Standard -Audiogerät für die Wiedergabe und Aufnahme in Vista programmgesteuert?

Gibt es eine Registrierungseinstellung dafür wie Sound -Manager im Fenster XP?

Welche API macht es?

War es hilfreich?

Lösung

Es gibt keine öffentliche API, mit der Sie das Standard -Audio -Gerät ändern können, dh Funktionalität, die unter der Benutzersteuerung angesehen wird. Dies war in Windows immer der Fall.

Wenn Sie jedoch im Internet suchen, gibt es eine Reihe von Personen, die die APIs umgekehrt haben, die in Windows Vista verwendet werden, aber ich werde Sie nicht auf sie verweisen (die umgekehrten APIs sind interner Nicht unterstützte APIs und kann sich ohne vorherige Ankündigung von Microsoft ändern. Sie verwenden diese Lösungen auf eigene Gefahr.

Andere Tipps

Schaltgerät für Systemablettungsablettung Verwendet "Software\Microsoft\Multimedia\Sound Mapper", "Playback" So setzen Sie den Index des Schallgeräts, der durch Aufzählung der Geräte erhalten wurde.McIsendcommand von "winmm.dll" wird ebenfalls verwendet

In diesem Quellcode Sie werden die Registrierungsschlüssel finden, die verwendet werden, um dies zu erreichen.

Wenn das nicht funktioniert, könnten Sie geben Prozessmonitor Versuchen Sie, alle Registrierungsaktivitäten von Windows zu überwachen, wenn Sie das Standardgerät ändern. Auf meiner Vista -Installation dreht sich das Bedienfeld mit Twiddles mit "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Render\"

Zum Vista sehenhttp://www.vistaaudiochanger.com/

Ich weiß wirklich nicht, ob jemand das noch braucht, aber hier ist meine Lösung. Tatsächlich ist es für das Capture -Gerät, aber es kann leicht in das Render -Gerät geändert werden.

Es legt 3 Registrierungswerte in den Schlüssel des Geräts zur aktuellen Zeit fest. Magie, aber so funktioniert es. Hinweis: Nur auf Win7 x64 getestet

void SetDefaultRecordDevice(tstring strDeviceName){
    const int BUFF_LEN = 260;
    //HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\MMDevices\Audio\Capture\{79434968-09f6-4dff-8086-c5e618b21473}\Role:0:
    //"DE 07 08 00 06 00 10 00 15 00 38 00 1E 00 48 03"
    HKEY hkCaptureDevices;
    RegOpenKeyEx(HKEY_LOCAL_MACHINE, _T("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\MMDevices\\Audio\\Capture") , 0, KEY_ENUMERATE_SUB_KEYS | KEY_WOW64_64KEY, &hkCaptureDevices);
    TCHAR lpwstrDeviceGuidKey[BUFF_LEN];
    DWORD dwDeviceGuidKeySize = BUFF_LEN;
    for(int i=0;RegEnumKeyEx(hkCaptureDevices, i, lpwstrDeviceGuidKey, &dwDeviceGuidKeySize, 0, 0, 0, 0) != ERROR_NO_MORE_ITEMS; ++i){
        dwDeviceGuidKeySize = BUFF_LEN;
        HKEY hkProps;
        RegOpenKeyEx(hkCaptureDevices, (tstring(lpwstrDeviceGuidKey) + _T("\\Properties")).c_str() , 0, KEY_READ | KEY_WOW64_64KEY, &hkProps);
        TCHAR data[BUFF_LEN];
        DWORD dwDataSize = BUFF_LEN;
        if(RegQueryValueEx(hkProps, _T("{a45c254e-df1c-4efd-8020-67d146a850e0},2"), 0, 0, (LPBYTE)data, &dwDataSize) !=  ERROR_SUCCESS){
            continue;
        } else {
            tstring strCurrentDeviceName(data);
            // TODO név általánosítás
            if(strDeviceName == strCurrentDeviceName){
                HKEY hkGuid;
                RegOpenKeyEx(hkCaptureDevices, lpwstrDeviceGuidKey , 0, KEY_READ | KEY_SET_VALUE | KEY_QUERY_VALUE | KEY_WOW64_64KEY | KEY_NOTIFY , &hkGuid);

                time_t CurrentTime;
                time(&CurrentTime);

                time_t     now = time(0);
                struct tm  tstruct;


                gmtime_s(&tstruct, &now);
                // Visit http://en.cppreference.com/w/cpp/chrono/c/strftime
                // for more information about date/time format

                char CustomRegistryDateValue[16];

                WORD year = tstruct.tm_year + 1900;
                WORD month = tstruct.tm_mon+1;
                WORD dayOfTheWeek = tstruct.tm_wday;
                WORD day = tstruct.tm_mday;
                WORD hour = tstruct.tm_hour;
                WORD minute = tstruct.tm_min;
                WORD second = tstruct.tm_sec;
                WORD millisec = 0x0; // hasrautés

                int k = 0;
                *((WORD*)CustomRegistryDateValue + k++) = year;
                *((WORD*)CustomRegistryDateValue + k++) = month;
                *((WORD*)CustomRegistryDateValue + k++) = dayOfTheWeek;
                *((WORD*)CustomRegistryDateValue + k++) = day;
                *((WORD*)CustomRegistryDateValue + k++) = hour;
                *((WORD*)CustomRegistryDateValue + k++) = minute;
                *((WORD*)CustomRegistryDateValue + k++) = second;
                *((WORD*)CustomRegistryDateValue + k++) = millisec;

                RegSetValueExA(hkGuid, ("Role:0"), 0, REG_BINARY, (LPBYTE)CustomRegistryDateValue, 16);
                RegSetValueExA(hkGuid, ("Role:1"), 0, REG_BINARY, (LPBYTE)CustomRegistryDateValue, 16);
                RegSetValueExA(hkGuid, ("Role:2"), 0, REG_BINARY, (LPBYTE)CustomRegistryDateValue, 16);
                RegFlushKey(hkGuid);
                RegCloseKey(hkGuid);
            }
        }
        RegCloseKey(hkProps);
    }
    RegCloseKey(hkCaptureDevices);
}
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top