Sound - Standardgerät ändern.



  • hallo !

    folgende situation:

    (BS: WIN XP Pro)

    In meinem Rechner sind 2 Soundkarten drinnen - eine onboard und eine SB audigy.
    An der Audigy sind die lautsprecher angeschlossen, an der anderen ein kopfhörer.

    wenn ich nun abends spiele, schalte ich in der systemsteuerung->sounds&audiogeräte->Audio das standardgerät von audigy auf den onboardsoundchip.

    soweit so gut........

    manchmal passiert es, dass ich am nexten tag vergesse wieder die audigy als standard zu definieren.

    ich brauche daher ein proggie, welches mir das wieder rücksetzt bzw. systemsteuerung->sounds&audiogeräte->audio aufruft.

    Besser wäre noch: wenn mir jemand tipps geben könnte, wie ich dass mit hilfe der mfc (d.h. mit einem eigenem proggie) lösen könnte.

    mfc & happy coding !

    ernsti !

    #include <afxwin.h>
    
    class CBla : public CWinApp
    {
    public:
        BOOL InitInstance()
        {
            AfxMessageBox("blablabla");
            return TRUE;
        }
    };
    
    CBla bla;
    


  • hat vielleicht jemand einen link zum thema ????? *verzweifel*



  • hallo

    das einzige was ich beisteuern kann is:
    rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,"0",1 <- danit solltest direkt ins audiomenue kommen. kannst das ja bei jedem neustart aufrufen lassen und kurz nachgucken ob die einstellungen stimmen. ansonsten, wo ich aber null plan habe, sollte das mittels WMI funktionieren.

    Meep Meep



  • @meep meep !

    super, danke !

    mit rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,"0",2 ist mir schon sehr geholfen !



  • Mich möchte auch gerne wissen, wie man die Sounddevices enumerieren bzw. dann ändern kann. Bei Codeguru und Codeproject konnte ich nichts passendes entdecken.



  • Hallo!

    Ich mach jetzt deswegen nicht einen neuen Thread auf wenns grad so perfekt passt. Also ein Kumpel von mir hat GENAU das selbe wie Ernsti. Eine Soundkarte für die Lautsprecher und eine für die Kopfhörer, und er wechselt immer und hat mich gefragt obs möglich wäre die Einstellung von einem Mini-Programm übernehmen zu lassen. Ich hab ihm versprochen dass ich mich mal danach umschaue und wenn möglich was kleines für ihn bastle. Das Problem ist jetzt einfach dass ich nicht 2 Soundkarten habe und das schlecht testen kann. Dieses rundll32.exe shell32.dll,Control_RunDLL mmsys.cpl,"0",2 bei ausführen eingeben ist schon mal gut, aber mir ist nicht klar wie ich den Befehl im Programm einbinden soll und welcher Wert bestimmt welche der beiden Soundkarten angewählt wird etc. Hat da jemand schon Erfahrungen gemacht? Hast du es hingekriegt Ernsti? (ich weiss ja nichtmal ob du überhaupt noch im Forum bist 🙂 )

    Danke für die Aufmerksamkeit



  • Hat das denn keiner benutzt? 😞

    Dacht ich mir fast, die Funktion braucht man auch nicht so oft. Ich find leider auch nichts bei Google...



  • folgender code könnte funktionieren, habs leider nicht testen können da ich zur Zeit keinen XP Rechner mit 2 karten zur verfügung habe !
    ausserdem fehlt noch der code, der dann die einstellungen speichert bzw onok aufruft.

    ShellExecute(NULL,"open","rundll32.exe", "shell32.dll,Control_RunDLL mmsys.cpl,\"0\",2",NULL,NULL);
    
    	DWORD dwOldTime=GetTickCount();
    	BOOL  bError=FALSE;
    	while(1)
    	{
    		if(GetTickCount()-dwOldTime>1000)
    		{
    			bError=TRUE;
    			break;
    		}
    		if(FindWindow(NULL,"Eigenschaften von Sounds und Multimedia"))
    			break;
    	}
    
    	if(!bError)
    	{
    		HWND hwnd = ::FindWindow(NULL,"Eigenschaften von Sounds und Multimedia");
    
    		if(hwnd)
    		{
    			HWND hwnd2 = ::FindWindowEx(hwnd,NULL,NULL,"Audio");
    			if(hwnd2)
    			{
    				HWND hwnd3 = ::FindWindowEx(hwnd2,NULL,"ComboBox",NULL);
    
    				if(hwnd3)
    				{
    					CComboBox cb;
    					cb.Attach(hwnd3);
    
    					int nMax=cb.GetCount();
    					int nPos=0;
    
    					if(nMax>1)
    					{
    						int nActual=cb.GetCurSel();
    						switch(nActual)
    						{
    						case 0: nPos=1;
    								break;
    						case 1: nPos=0;
    								break;
    						}
    						cb.SetCurSel(nPos);
    					}
    					cb.Detach();
    				}
    				// hier fehlt noch code zum schliessen bzw. dem OK Button aufruf des dialogs
    
    			}
    		}
    	}
    


  • Super, vielen vielen Dank! Ich hab zwar selber auch nicht 2 Soundkarten drin (machs ja für einen Kumpel) aber ich habs mir genau angeschaut und es sieht soweit ok aus, muss nur noch ein paar Anpassungen machen und dann wird das sicher klappen. Ich bin gar nicht auf die Idee gekommen im Fenster "zu arbeiten", dachte eher an eine Funktion in der MFC oder API die das kann 🙂

    Nochmal vielen Dank



  • ich wollte das ursprünglich auch eleganter lösen.... hab aber -auch wie du- nix passendes gefunden....


Log in to reply