From a8a2a1e55b5ae4ba2b770d02cb6909d9d2ff4387 Mon Sep 17 00:00:00 2001 From: Vadim Dashevskiy Date: Mon, 22 Oct 2012 09:40:44 +0000 Subject: ProfileManager and Restar plugin's services now restart Miranda to the same profile they where called from git-svn-id: http://svn.miranda-ng.org/main/trunk@2040 1316c22d-e87f-b044-9b9b-93d7a3e3ba9c --- plugins/ProfileManager/src/pmanagerEx.cpp | 21 +++++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) (limited to 'plugins/ProfileManager/src') diff --git a/plugins/ProfileManager/src/pmanagerEx.cpp b/plugins/ProfileManager/src/pmanagerEx.cpp index 8565faab30..5009d4b898 100644 --- a/plugins/ProfileManager/src/pmanagerEx.cpp +++ b/plugins/ProfileManager/src/pmanagerEx.cpp @@ -16,6 +16,7 @@ There is no warranty. #include #include #include +#include #include #include "resource.h" @@ -26,7 +27,7 @@ TCHAR fn[MAX_PATH]; TCHAR lmn[MAX_PATH]; TCHAR* pathn; int hLangpack; -HANDLE hLoadPM, hChangePM, hDbchecker; +HANDLE hLoadPM, hChangePM, hDbchecker, hRestartMe; PLUGININFOEX pluginInfo={ sizeof(PLUGININFOEX), @@ -82,6 +83,21 @@ static INT_PTR CheckDb(WPARAM wParam, LPARAM lParam) return 0; } +static INT_PTR RestartMe(WPARAM wParam, LPARAM lParam) +{ + TCHAR mirandaPath[MAX_PATH], cmdLine[100]; + PROCESS_INFORMATION pi; + STARTUPINFO si = {0}; + si.cb = sizeof(si); + GetModuleFileName(NULL, mirandaPath, SIZEOF(mirandaPath)); + TCHAR *profilename = Utils_ReplaceVarsT(_T("%miranda_profilename%")); + mir_sntprintf(cmdLine, SIZEOF(cmdLine), _T("\"%s\" /restart:%d /profile=%s"), mirandaPath, GetCurrentProcessId(), profilename); + CallService("CloseAction", 0, 0); + CreateProcess(mirandaPath, cmdLine, NULL, NULL, FALSE, 0, NULL, NULL, &si, &pi); + mir_free(profilename); + return 0; +} + extern "C" __declspec(dllexport) int Load(void) { CLISTMENUITEM mi; @@ -121,6 +137,7 @@ extern "C" __declspec(dllexport) int Load(void) mi.pszService = "Database/CheckDb"; Menu_AddMainMenuItem(&mi); + hRestartMe = CreateServiceFunction("System/RestartMe", RestartMe); ZeroMemory(&mi, sizeof(mi)); mi.cbSize = sizeof(mi); mi.position = -500200000; @@ -128,7 +145,7 @@ extern "C" __declspec(dllexport) int Load(void) mi.hIcon = LoadIcon(hInst, MAKEINTRESOURCE(IDI_Restart)); mi.ptszPopupName = NULL; mi.ptszName = _T("Restart"); - mi.pszService = MS_SYSTEM_RESTART; + mi.pszService = "System/RestartMe"; Menu_AddMainMenuItem(&mi); return 0; -- cgit v1.2.3