From 544fb33475eb7ea1735f9e19f78dcf3c5e1ceb66 Mon Sep 17 00:00:00 2001 From: MikalaiR Date: Tue, 29 Dec 2015 19:59:31 +0000 Subject: Toaster: memleaks fix, code clenup git-svn-id: http://svn.miranda-ng.org/main/trunk@15967 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/Toaster/src/utils.cpp | 61 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 plugins/Toaster/src/utils.cpp (limited to 'plugins/Toaster/src/utils.cpp') diff --git a/plugins/Toaster/src/utils.cpp b/plugins/Toaster/src/utils.cpp new file mode 100644 index 0000000000..86062d2f4a --- /dev/null +++ b/plugins/Toaster/src/utils.cpp @@ -0,0 +1,61 @@ +#include "stdafx.h" + +#define SHORTCUT_PATH "\\Microsoft\\Windows\\Start Menu\\Programs\\Miranda NG.lnk" + +using namespace Microsoft::WRL; + +wchar_t* GetShortcutPath() +{ + wchar_t path[MAX_PATH]; + GetEnvironmentVariable(_T("APPDATA"), path, MAX_PATH); + wcscat_s(path, _T(SHORTCUT_PATH)); + return mir_wstrdup(path); +} + +HRESULT InstallShortcut(_In_z_ wchar_t *shortcutPath) +{ + wchar_t exePath[MAX_PATH]; + GetModuleFileName(NULL, exePath, MAX_PATH); + + ComPtr shellLink; + CHECKHR(CoCreateInstance(CLSID_ShellLink, nullptr, CLSCTX_INPROC_SERVER, IID_PPV_ARGS(&shellLink))); + + CHECKHR(shellLink->SetPath(exePath)); + + CHECKHR(shellLink->SetArguments(L"")); + + ComPtr propertyStore; + CHECKHR(shellLink.As(&propertyStore)); + + PROPVARIANT appIdPropVar; + HRESULT hr = InitPropVariantFromString(AppUserModelID, &appIdPropVar); + if (SUCCEEDED(hr)) + { + hr = propertyStore->SetValue(PKEY_AppUserModel_ID, appIdPropVar); + if (SUCCEEDED(hr)) + { + hr = propertyStore->Commit(); + if (SUCCEEDED(hr)) + { + ComPtr persistFile; + hr = shellLink.As(&persistFile); + if (SUCCEEDED(hr)) + { + hr = persistFile->Save(shortcutPath, TRUE); + } + } + } + PropVariantClear(&appIdPropVar); + } + return hr; +} + +bool ShortcutExists() +{ + return (GetFileAttributes(ptrW(GetShortcutPath())) < 0xFFFFFFF); +} + +HRESULT TryCreateShortcut() +{ + return (ShortcutExists() ? S_OK : InstallShortcut(ptrW(GetShortcutPath()))); +} -- cgit v1.2.3