παπι Δημοσ. 24 Σεπτεμβρίου 2013 Share Δημοσ. 24 Σεπτεμβρίου 2013 Μετα την σουπερ ντουπερ κονσολα 3d console, λεω να βαλω και αυτο που εφτιαξα τωρα. το προγραμα http://www.insomnia.gr/files/file/480-%CF%84%CF%81%CE%B1%CE%BD%CE%B6%CE%B9%CF%83%CF%84%CE%BF%CF%81/ ο κωδικας #include <Windows.h> #include <mmdeviceapi.h> #include <functiondiscoverykeys_devpkey.h> #include <vector> #include "resource.h" #define iffail(hr) if(FAILED(hr)) #define WM_TRAY (WM_USER + 1) #define IDM_EXIT 1 #define IDM_REFRESH 2 //den ein diko moy //http://www.daveamenta.com/2011-05/programmatically-or-command-line-change-the-default-sound-playback-device-in-windows-7/ interface DECLSPEC_UUID("f8679f50-850a-41cf-9c72-430f290290c8") IPolicyConfig : public IUnknown { public: virtual HRESULT GetMixFormat(PCWSTR,WAVEFORMAT**); virtual HRESULT STDMETHODCALLTYPE GetDeviceFormat(PCWSTR,INT,WAVEFORMAT**); virtual HRESULT STDMETHODCALLTYPE ResetDeviceFormat(PCWSTR); virtual HRESULT STDMETHODCALLTYPE SetDeviceFormat(PCWSTR,WAVEFORMAT**,WAVEFORMAT**); virtual HRESULT STDMETHODCALLTYPE GetProcessingPeriod(PCWSTR,INT,PINT64,PINT64); virtual HRESULT STDMETHODCALLTYPE SetProcessingPeriod( PCWSTR,PINT64); virtual HRESULT STDMETHODCALLTYPE GetShareMode(PCWSTR,struct DeviceShareMode*); virtual HRESULT STDMETHODCALLTYPE SetShareMode(PCWSTR,struct DeviceShareMode*); virtual HRESULT STDMETHODCALLTYPE GetPropertyValue(PCWSTR,const PROPERTYKEY&, PROPVARIANT*); virtual HRESULT STDMETHODCALLTYPE SetPropertyValue(PCWSTR,const PROPERTYKEY&, PROPVARIANT*); //--> virtual HRESULT STDMETHODCALLTYPE SetDefaultEndpoint( __in PCWSTR wszDeviceId, __in ERole eRole); virtual HRESULT STDMETHODCALLTYPE SetEndpointVisibility(PCWSTR,INT); }; class DECLSPEC_UUID("870af99c-171d-4f9e-af0d-e63df40c2bc9") CPolicyConfigClient; //telos ref //ayta ein dika moy std::vector<std::pair<std::wstring,std::wstring>> g_devices; std::wstring g_activeDeviceKey; NOTIFYICONDATA g_tray; HMENU g_popup; int ScanSoundDevices(); int SetSoundDevice(const std::wstring& key); HRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam); int WINAPI WinMain(HINSTANCE, HINSTANCE, PSTR,int) { CoInitialize(0); ScanSoundDevices(); HWND hWnd; MSG msg; WNDCLASSEX wc = { 0 }; wc.cbSize = sizeof(wc); wc.lpszClassName = L"justawnd"; wc.lpfnWndProc = WndProc; RegisterClassEx(&wc); hWnd = CreateWindow(wc.lpszClassName,0,0,0,0,0,0,0,0,0,0); ShowWindow(hWnd,SW_HIDE); ZeroMemory(&g_tray,sizeof(g_tray)); g_tray.cbSize = sizeof(g_tray); g_tray.hWnd = hWnd; g_tray.uID = 1000; g_tray.uFlags = NIF_ICON | NIF_MESSAGE ; g_tray.uCallbackMessage = WM_TRAY; g_tray.hIcon = (HICON)LoadImage(0,L"transistor-xl-small.ico",IMAGE_ICON,0,0,LR_LOADFROMFILE); Shell_NotifyIcon(NIM_ADD,&g_tray); while(GetMessage(&msg,0,0,0)) { TranslateMessage(&msg); DispatchMessage(&msg); } Shell_NotifyIcon(NIM_DELETE, &g_tray); return 0; } int ScanSoundDevices() { IMMDeviceEnumerator *pDevEnumerator = 0; IMMDeviceCollection *pDevCollection = 0; IMMDevice *pActiveDevice = 0; UINT devCount; iffail(CoCreateInstance(__uuidof(MMDeviceEnumerator),0,CLSCTX_ALL,__uuidof(IMMDeviceEnumerator),(void**) &pDevEnumerator)) { return 1; } iffail(pDevEnumerator->EnumAudioEndpoints(eRender,DEVICE_STATE_ACTIVE,&pDevCollection)) { pDevEnumerator->Release(); return 1; } iffail(pDevCollection->GetCount(&devCount)) { pDevCollection->Release(); pDevEnumerator->Release(); return 1; } //active device if(!FAILED(pDevEnumerator->GetDefaultAudioEndpoint(eRender,eConsole,&pActiveDevice))) { LPWSTR pActiveDevKey = 0; pActiveDevice->GetId(&pActiveDevKey); if(pActiveDevKey) { g_activeDeviceKey = pActiveDevKey; CoTaskMemFree(pActiveDevKey); } pActiveDevice->Release(); } g_devices.clear(); for(UINT i = 0 ; i < devCount; i++) { LPWSTR coDevID = 0; IMMDevice *pDevice = 0; if( !FAILED(pDevCollection->Item(i,&pDevice)) && pDevice) { IPropertyStore *pPropStore = 0; if( !FAILED( pDevice->GetId(&coDevID)) && !FAILED( pDevice->OpenPropertyStore(STGM_READ,&pPropStore)) && coDevID ) { PROPVARIANT devName; PropVariantInit(&devName); pPropStore->GetValue(PKEY_Device_FriendlyName,&devName); //key name g_devices.push_back(std::pair<std::wstring,std::wstring>(coDevID,devName.pwszVal) ); PropVariantClear(&devName); CoTaskMemFree(coDevID); } pDevice->Release(); } } pDevCollection->Release(); pDevEnumerator->Release(); return 0; } int SetSoundDevice(const std::wstring& key) { IPolicyConfig *pConfing = 0; int result = 0; iffail(CoCreateInstance(__uuidof(CPolicyConfigClient), 0, CLSCTX_ALL, __uuidof(IPolicyConfig), (void**)&pConfing)) return 1; iffail(pConfing->SetDefaultEndpoint(key.c_str(), eConsole)) result = 1; g_activeDeviceKey = key; pConfing->Release(); return result; } HRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch(msg) { case WM_COMMAND: if( !HIWORD(wParam) ) { if(wParam == IDM_EXIT) PostQuitMessage(0); else if(wParam == IDM_REFRESH) ScanSoundDevices(); else if(wParam > 2 && wParam <= g_devices.size() + 2) SetSoundDevice(g_devices[wParam-3].first); } break; case WM_TRAY: if(lParam == WM_RBUTTONDOWN || lParam == WM_LBUTTONDOWN) { POINT p; GetCursorPos(&p); if(g_popup) { DestroyMenu(g_popup); g_popup = 0; } g_popup = CreatePopupMenu(); //dynamiko menu for(UINT i = 0; i < g_devices.size(); i++) { int flag = MF_STRING; if(!g_devices[i].first.compare(g_activeDeviceKey )) flag |= MF_CHECKED; AppendMenu(g_popup, flag, i + 3, g_devices[i].second.c_str()); } AppendMenu(g_popup, MF_SEPARATOR,0,0); AppendMenu(g_popup, MF_STRING, IDM_REFRESH, L"Refresh Drivers"); AppendMenu(g_popup, MF_STRING, IDM_EXIT, L"Exit"); TrackPopupMenu(g_popup, TPM_NONOTIFY,p.x,p.y,0,hWnd,0); } break; default: return DefWindowProc(hWnd,msg,wParam,lParam); } return 0; } κλασικα, βιτσιοζος με winapi. 1 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Timonkaipumpa Δημοσ. 25 Σεπτεμβρίου 2013 Share Δημοσ. 25 Σεπτεμβρίου 2013 Παπί Πραγματικά... βάλε Hackintosh και γράψε 10 γραμμές objective-c. Πραγματικά κάνε το και μετά πες μου. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
παπι Δημοσ. 25 Σεπτεμβρίου 2013 Μέλος Share Δημοσ. 25 Σεπτεμβρίου 2013 Γιατι να καναω κακο στον εαυτο μου βρε τιμο; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Timonkaipumpa Δημοσ. 25 Σεπτεμβρίου 2013 Share Δημοσ. 25 Σεπτεμβρίου 2013 Εάν δοκιμάσεις Objective-C τότε θα καταλάβεις τι έχανες τόσο καιρό. Ειλικρινά. Κακό κάνεις με το Win API. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
marios_geo Δημοσ. 27 Σεπτεμβρίου 2013 Share Δημοσ. 27 Σεπτεμβρίου 2013 Πραγματικά... βάλε Hackintosh και γράψε 10 γραμμές objective-c. . Η άχρηστη συμβουλή της ημέρας. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
nilosgr Δημοσ. 27 Σεπτεμβρίου 2013 Share Δημοσ. 27 Σεπτεμβρίου 2013 και τι κανει;; δε μας λες... (το λινκ ειναι σπασμενο) Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
παπι Δημοσ. 27 Σεπτεμβρίου 2013 Μέλος Share Δημοσ. 27 Σεπτεμβρίου 2013 Δεν ειναι σπασμενο. http://www.insomnia.gr/files/file/480-%CF%84%CF%81%CE%B1%CE%BD%CE%B6%CE%B9%CF%83%CF%84%CE%BF%CF%81/ Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
migf1 Δημοσ. 27 Σεπτεμβρίου 2013 Share Δημοσ. 27 Σεπτεμβρίου 2013 Δεν ειναι σπασμενο. http://www.insomnia.gr/files/file/480-τρανζιστορ/ Σε μένα πάντως βγάζει: "Συγγνώμη, δεν έχετε άδεια γι 'αυτό!" Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
παπι Δημοσ. 27 Σεπτεμβρίου 2013 Μέλος Share Δημοσ. 27 Σεπτεμβρίου 2013 Ίντα fuck ωρε; Για εμας που εχουμε περισσοτερα audio output, και βαριομαστε να πηγαινουμε control panel-> hardware -> sound -> set defualt καθε τρεις και λιγο. Εφτιαξα ενα προγραμμα το οποιο τεχει στο tray (κατω δεξια) και κανει αυτη την δουλεια για εμας.Βασικα για παρτυ μου το εφτιαξα, αλλα λεω ας το μοιραστω.ΠΡΟΣΟΧΗ! Χρησιμοποιω undocumented API, το οποιο σημαινει οτι δουλευει ΜΟΝΟ σε win7. (μπορει να δουλευει και σε 8)ΥΓ: Στο Website εβαλα το blog μου το οποιο ειναι ασχετο με το προγραμμα, αλλα επειδη απαιτειται ενα website... το εβαλα. Τι είναι Καινούριο σ'αυτή την Έκδοση 1.0.0.0.0002 (2o build) (Εμφάνιση όλων των αλλαγών)Καμια. Alpha version. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
migf1 Δημοσ. 27 Σεπτεμβρίου 2013 Share Δημοσ. 27 Σεπτεμβρίου 2013 Βάλτο κάπου που να μπορούμε να το κατεβάσουμε. Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
παπι Δημοσ. 27 Σεπτεμβρίου 2013 Μέλος Share Δημοσ. 27 Σεπτεμβρίου 2013 Στα file το εβαλα, που ναξερα οτι ειναι "private". Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
παπι Δημοσ. 28 Σεπτεμβρίου 2013 Μέλος Share Δημοσ. 28 Σεπτεμβρίου 2013 meh.. δεν τους αρεσε και το βγαλανε... Στο blog μου εκανα ενα ποστ. http://tsokanoki.blogspot.gr/2013/09/audio-output-switcher.html 1 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
migf1 Δημοσ. 29 Σεπτεμβρίου 2013 Share Δημοσ. 29 Σεπτεμβρίου 2013 Αν το τρέξω σε XP θα πάθω μεγάλο... κακό; Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
παπι Δημοσ. 29 Σεπτεμβρίου 2013 Μέλος Share Δημοσ. 29 Σεπτεμβρίου 2013 Αν το τρέξω σε XP θα πάθω μεγάλο... κακό; Τι κακο να παθεις; Το πολυ πολυ να κανει bind στο γαμο του καραγκιοζη χεχεχε Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
migf1 Δημοσ. 29 Σεπτεμβρίου 2013 Share Δημοσ. 29 Σεπτεμβρίου 2013 (επεξεργασμένο) Τι κακο να παθεις; Το πολυ πολυ να κανει bind στο γαμο του καραγκιοζη χεχεχε Χεχε, οκ θα το δοκιμάσω μόλις τελειώσω κάτι πρότζεκτς που κάνω σε XP (δεν το ρισκάρω νωρίτερα) ... γιατί όμως δεν το κάνεις να τρέχει και σε XP; Επεξ/σία 29 Σεπτεμβρίου 2013 από migf1 Συνδέστε για να σχολιάσετε Κοινοποίηση σε άλλες σελίδες άλλες επιλογές
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα