TaskBarCore::TaskBarCore(): State(TBPF_NOPROGRESS), pTaskbarList(nullptr) { HRESULT hRes=CoInitializeEx(nullptr,COINIT_APARTMENTTHREADED); switch (hRes) { case S_OK: case S_FALSE: CoInited=true; case RPC_E_CHANGED_MODE: CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_INPROC_SERVER, #ifdef __GNUC__ IID_ITaskbarList3, IID_PPV_ARGS_Helper(&pTaskbarList) #else IID_PPV_ARGS(&pTaskbarList) #endif ); break; default: CoInited=false; break; } }
taskbar::taskbar(): State(TBPF_NOPROGRESS), pTaskbarList() { CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_INPROC_SERVER, #if COMPILER == C_GCC IID_ITaskbarList3, IID_PPV_ARGS_Helper(&pTaskbarList) #else IID_PPV_ARGS(&pTaskbarList) #endif ); }
IFileIsInUse* CreateIFileIsInUse(const string& File) { IFileIsInUse *pfiu = nullptr; IRunningObjectTable *prot; if (SUCCEEDED(GetRunningObjectTable(0, &prot))) { IMoniker *pmkFile; if (SUCCEEDED(CreateFileMoniker(File.data(), &pmkFile))) { IEnumMoniker *penumMk; if (SUCCEEDED(prot->EnumRunning(&penumMk))) { HRESULT hr = E_FAIL; ULONG celt; IMoniker *pmk; while (FAILED(hr) && (penumMk->Next(1, &pmk, &celt) == S_OK)) { DWORD dwType; if (SUCCEEDED(pmk->IsSystemMoniker(&dwType)) && dwType == MKSYS_FILEMONIKER) { IMoniker *pmkPrefix; if (SUCCEEDED(pmkFile->CommonPrefixWith(pmk, &pmkPrefix))) { if (pmkFile->IsEqual(pmkPrefix) == S_OK) { IUnknown *punk; if (prot->GetObject(pmk, &punk) == S_OK) { hr = punk->QueryInterface( #ifdef __GNUC__ IID_IFileIsInUse, IID_PPV_ARGS_Helper(&pfiu) #else IID_PPV_ARGS(&pfiu) #endif ); punk->Release(); } } pmkPrefix->Release(); } } pmk->Release(); } penumMk->Release(); } pmkFile->Release(); } prot->Release(); } return pfiu; }
taskbar::taskbar(): m_State(TBPF_NOPROGRESS) { CoCreateInstance(CLSID_TaskbarList, nullptr, CLSCTX_INPROC_SERVER, IID_ITaskbarList3, IID_PPV_ARGS_Helper(&ptr_setter(m_TaskbarList))); }