From 51d99dcee41b325688373b11c8855b71ef887384 Mon Sep 17 00:00:00 2001 From: mataes2007 Date: Sat, 19 Nov 2011 18:25:28 +0000 Subject: added Autorun plugin git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@180 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb --- Autorun/main.c | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 Autorun/main.c (limited to 'Autorun/main.c') diff --git a/Autorun/main.c b/Autorun/main.c new file mode 100644 index 0000000..34b0d0f --- /dev/null +++ b/Autorun/main.c @@ -0,0 +1,165 @@ +#include +#include "autorun.h" + +#include "newpluginapi.h" +#include "m_langpack.h" +#include "m_options.h" +#include "m_database.h" +#pragma hdrstop + + +HINSTANCE hInst; +PLUGINLINK *pluginLink; +HANDLE hHookOptionInit = NULL; + +PLUGININFOEX pluginInfoEx= +{ // about plugin + sizeof(PLUGININFOEX), + "Autorun", + PLUGIN_MAKE_VERSION(0,1,0,1), + "This plugin is a simple way to enable/disable to launch Miranda IM with system startup.", + "Sergey V. Gershovich a.k.a. Jazzy$ (fixed by Wolfram3D)", + "", + "Copyright © 2002-2007 Sergey V. Gershovich a.k.a. Jazzy$", + "http://miranda-im.org/download/index.php?action=viewfile&id=285", + 0, 0, + MIID_AUTORUN +}; + +BOOL WINAPI DllMain(HINSTANCE hinstDLL,DWORD fdwReason,LPVOID lpvReserved) +{ + // plugin entry point + if (fdwReason == DLL_PROCESS_ATTACH) + { + hInst = hinstDLL; + DisableThreadLibraryCalls(hinstDLL); + } + return TRUE; +} +void GetProfilePath(char *res) +{ + char dbname[MAX_PATH], dbpath[MAX_PATH], exename[MAX_PATH]; + CallService(MS_DB_GETPROFILENAME,sizeof(dbname),(LPARAM)(char*) dbname); + CallService(MS_DB_GETPROFILEPATH,sizeof(dbpath),(LPARAM)(char*) dbpath); + GetModuleFileName(NULL,exename,sizeof(exename)); + lstrcat(dbpath,"\\"); + lstrcpyn(dbpath+lstrlen(dbpath),dbname,lstrlen(dbname)-3); + strcat(dbpath, "\\"); + strcat(dbpath, dbname); // path + profile name + wsprintf(res,"\"%s\" \"%s\"",exename, dbpath); +} + +static void SetAutorun(BOOL autorun) +{ + HKEY hKey; + DWORD dw; + switch (autorun) + { + case TRUE: + if (RegCreateKeyEx(ROOT_KEY, SUB_KEY,0,NULL,0,KEY_CREATE_SUB_KEY|KEY_SET_VALUE,NULL,&hKey,&dw) == ERROR_SUCCESS) + { + char result[MAX_PATH]; + GetProfilePath (result); + RegSetValueEx(hKey,"MirandaIM",0,REG_SZ,result,lstrlen(result)+1); + RegCloseKey(hKey); + break; + } + case FALSE: + if (RegOpenKey(ROOT_KEY,SUB_KEY,&hKey) == ERROR_SUCCESS) + { + RegDeleteValue(hKey,"MirandaIM"); + RegCloseKey(hKey); + break; + } + } +} + + +static BOOL CmpCurrentAndRegistry() +{ + HKEY hKey; + DWORD dwBufLen = MAX_PATH; + char result[MAX_PATH], dbpath[MAX_PATH]; + GetProfilePath (result); + + if (RegOpenKeyEx(ROOT_KEY, SUB_KEY, 0, KEY_QUERY_VALUE, &hKey) == ERROR_SUCCESS) + { + if (RegQueryValueEx(hKey,"MirandaIM",NULL,NULL,(LPBYTE)dbpath,&dwBufLen) == ERROR_SUCCESS) + { + return (lstrcmpi(result,dbpath) == 0 ? TRUE : FALSE); + } + else + return FALSE; + } + else + return FALSE; +} + +static BOOL CALLBACK DlgProcAutorunOpts(HWND hwndDlg, UINT msg, WPARAM wParam, LPARAM lParam) +{ + switch (msg) + { + case WM_INITDIALOG: + TranslateDialogDefault(hwndDlg); + CheckDlgButton(hwndDlg,IDC_AUTORUN,CmpCurrentAndRegistry()); // Check chekbox if Registry value exists + return TRUE; + case WM_COMMAND: + SendMessage(GetParent(hwndDlg), PSM_CHANGED, 0, 0); // Send message to activate "Apply" button + return TRUE; + break; + case WM_NOTIFY: + switch(((LPNMHDR)lParam)->idFrom) { + case 0: + switch (((LPNMHDR)lParam)->code) + { + case PSN_APPLY: // if "Apply" pressed then... + SetAutorun(IsDlgButtonChecked(hwndDlg,IDC_AUTORUN)); //Save changes to registry; + return TRUE; + } + break; + } + break; + } + return FALSE; +} + + +static int AutorunOptInitialise(WPARAM wParam,LPARAM lParam) +{ + OPTIONSDIALOGPAGE odp; + odp.cbSize=sizeof(odp); + odp.position=100100000; + odp.hInstance=hInst; + odp.pszTemplate=MAKEINTRESOURCE(IDD_OPT_AUTORUN); + odp.pszTitle=Translate(ModuleName); + odp.pszGroup=Translate("Plugins"); + odp.pfnDlgProc=DlgProcAutorunOpts; + odp.flags=ODPF_BOLDGROUPS; + CallService(MS_OPT_ADDPAGE,wParam,(LPARAM)&odp); + return 0; +} +//========================================================================== +__declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion) +{ + return &pluginInfoEx; +} + +static const MUUID interfaces[] = {MIID_AUTORUN, MIID_LAST}; +__declspec(dllexport) const MUUID* MirandaPluginInterfaces(void) +{ + return interfaces; +} + +int __declspec(dllexport) Load(PLUGINLINK *link) +{ + pluginLink = link; + hHookOptionInit = HookEvent(ME_OPT_INITIALISE,AutorunOptInitialise); + return 0; +} + +int __declspec(dllexport) Unload(void) +{ + if (hHookOptionInit) + UnhookEvent(hHookOptionInit); + return 0; +} \ No newline at end of file -- cgit v1.2.3