void CToxOptionsMultimedia::EnumDevices(CCtrlCombo &combo, IMMDeviceEnumerator *pEnumerator, EDataFlow dataFlow, const char* setting) { LPWSTR pwszDefID = NULL; ptrW wszDefID(m_proto->getWStringA(setting)); if (wszDefID != NULL) { size_t len = mir_wstrlen(wszDefID) + 1; pwszDefID = (LPWSTR)CoTaskMemAlloc(len*2); mir_wstrncpy(pwszDefID, wszDefID, len); } else { CComPtr<IMMDevice> pDevice = NULL; if (FAILED(pEnumerator->GetDefaultAudioEndpoint(dataFlow, eConsole, &pDevice))) return; if (FAILED(pDevice->GetId(&pwszDefID))) return; } CComPtr<IMMDeviceCollection> pDevices = NULL; EXIT_ON_ERROR(pEnumerator->EnumAudioEndpoints(dataFlow, DEVICE_STATE_ACTIVE, &pDevices)); UINT count; EXIT_ON_ERROR(pDevices->GetCount(&count)); for (UINT i = 0; i < count; i++) { CComPtr<IMMDevice> pDevice = NULL; EXIT_ON_ERROR(pDevices->Item(i, &pDevice)); CComPtr<IPropertyStore> pProperties = NULL; EXIT_ON_ERROR(pDevice->OpenPropertyStore(STGM_READ, &pProperties)); PROPVARIANT varName; PropVariantInit(&varName); EXIT_ON_ERROR(pProperties->GetValue(PKEY_Device_FriendlyName, &varName)); LPWSTR pwszID = NULL; EXIT_ON_ERROR(pDevice->GetId(&pwszID)); combo.InsertString(varName.pwszVal, i, (LPARAM)mir_wstrdup(pwszID)); if (mir_wstrcmpi(pwszID, pwszDefID) == 0) combo.SetCurSel(i); CoTaskMemFree(pwszID); PropVariantClear(&varName); } Exit: CoTaskMemFree(pwszDefID); }
void OnInitDialog() { char szUin[10]; Window_SetSkinIcon_IcoLib(m_hwnd, SKINICON_OTHER_ADDCONTACT); if (m_acs.handleType == HANDLE_EVENT) { DWORD dwUin; DBEVENTINFO dbei = { sizeof(dbei) }; dbei.cbBlob = sizeof(DWORD); dbei.pBlob = (PBYTE)&dwUin; db_event_get(m_acs.hDbEvent, &dbei); _ltoa(dwUin, szUin, 10); m_acs.szProto = dbei.szModule; } MCONTACT hContact; TCHAR *szName = NULL, *tmpStr = NULL; if (m_acs.handleType == HANDLE_CONTACT) szName = cli.pfnGetContactDisplayName(hContact = m_acs.hContact, 0); else { int isSet = 0; hContact = 0; if (m_acs.handleType == HANDLE_EVENT) { DBEVENTINFO dbei = { sizeof(dbei) }; dbei.cbBlob = db_event_getBlobSize(m_acs.hDbEvent); dbei.pBlob = (PBYTE)mir_alloc(dbei.cbBlob); db_event_get(m_acs.hDbEvent, &dbei); hContact = *(MCONTACT*)(dbei.pBlob + sizeof(DWORD)); mir_free(dbei.pBlob); if (hContact != INVALID_CONTACT_ID) { szName = cli.pfnGetContactDisplayName(hContact, 0); isSet = 1; } } if (!isSet) { if (m_acs.handleType == HANDLE_EVENT) szName = mir_a2t(szUin); else { szName = sttDecodeString(m_acs.psr->flags, m_acs.psr->id); if (!szName) szName = sttDecodeString(m_acs.psr->flags, m_acs.psr->nick); } } } if (szName && szName[0]) SetCaption(CMString(FORMAT, TranslateT("Add %s"), szName)); else SetCaption(TranslateT("Add contact")); mir_free(tmpStr); if (m_acs.handleType == HANDLE_CONTACT && m_acs.hContact) if (m_acs.szProto == NULL || (m_acs.szProto != NULL && *m_acs.szProto == 0)) m_acs.szProto = GetContactProto(m_acs.hContact); int groupSel = 0; ptrT tszGroup(db_get_tsa(hContact, "CList", "Group")); TCHAR *grpName; for (int groupId = 1; (grpName = Clist_GroupGetName(groupId, NULL)) != NULL; groupId++) { int id = m_group.AddString(grpName, groupId); if (!mir_tstrcmpi(tszGroup, grpName)) groupSel = id; } m_group.InsertString(TranslateT("None"), 0); m_group.SetCurSel(groupSel); // By default check both checkboxes m_chkAdded.SetState(true); m_chkAuth.SetState(true); // Set last choice if (db_get_b(NULL, "Miranda", "AuthOpenWindow", 1)) m_chkOpen.SetState(true); DWORD flags = (m_acs.szProto) ? CallProtoServiceInt(NULL, m_acs.szProto, PS_GETCAPS, PFLAGNUM_4, 0) : 0; if (flags & PF4_FORCEADDED) // force you were added requests for this protocol m_chkAdded.Enable(false); if (flags & PF4_FORCEAUTH) // force auth requests for this protocol m_chkAuth.Enable(false); if (flags & PF4_NOCUSTOMAUTH) m_authReq.Enable(false); else { m_authReq.Enable(m_chkAuth.Enabled()); m_authReq.SetText(TranslateT("Please authorize my request and add me to your contact list.")); } }