1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
|
#include "openFolder.h"
int hLangpack = 0;
HINSTANCE hInst;
HANDLE hServiceOpenFolder, hButtonTopToolbar;
PLUGININFOEX pluginInfoEx =
{
sizeof( PLUGININFOEX ),
"Open Miranda Folder",
OPENFOLDER_VERSION,
OPENFOLDER_DESCRIPTION,
"jarvis, Kreisquadratur",
"jarvis@jabber.cz, djui@kreisquadratur.de",
"© 2008 jarvis, © 2004 Kreisquadratur",
"http://miranda-ng.org/",
UNICODE_AWARE, //not transient
{ 0x10896143, 0x7249, 0x4b36, { 0xa4, 0x8, 0x65, 0x1, 0xa6, 0xb6, 0x3, 0x5a } } // {10896143-7249-4b36-A408-6501A6B6035A}
};
static IconItem icon = { LPGEN("Open Folder"), "open", IDI_FOLDER };
BOOL WINAPI DllMain( HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved )
{
hInst = hinstDLL;
return TRUE;
}
static INT_PTR MenuCommand_OpenFolder(WPARAM wParam, LPARAM lParam)
{
TCHAR szMirandaPath[MAX_PATH];
GetModuleFileName( GetModuleHandle(NULL), szMirandaPath, SIZEOF(szMirandaPath));
TCHAR* p = _tcsrchr( szMirandaPath, '\\' );
if ( p && p + 1 )
*( p + 1 ) = 0;
if ( GetAsyncKeyState( VK_CONTROL ) & 0x8000 )
ShellExecute(0, _T("explore"), szMirandaPath, 0, 0, SW_SHOWNORMAL);
else
ShellExecute(0, _T("open"), szMirandaPath, 0, 0, SW_SHOWNORMAL);
return 0;
}
// toptoolbar (if plugin is installed)
static int ToptoolBarHook(WPARAM wParam, LPARAM lParam)
{
TTBButton ttbb = { 0 };
ttbb.cbSize = sizeof( ttbb );
ttbb.hIconHandleUp = icon.hIcolib;
ttbb.pszService = MS_OPENFOLDER_OPEN;
ttbb.dwFlags = TTBBF_VISIBLE | TTBBF_SHOWTOOLTIP;
ttbb.name = LPGEN("Open Folder");
TopToolbar_AddButton(&ttbb);
return 0;
}
static int ModulesLoaded(WPARAM wParam, LPARAM lParam)
{
HookEvent(ME_TTB_MODULELOADED,ToptoolBarHook);
// icolib (0.7+)
Icon_Register(hInst, LPGEN("Open Folder"), &icon, 1, OPENFOLDER_MODULE_NAME);
// hotkeys service (0.8+)
HOTKEYDESC hotkey = { 0 };
hotkey.cbSize = sizeof( hotkey );
hotkey.dwFlags = HKD_TCHAR;
hotkey.pszName = "Open Folder";
hotkey.ptszDescription = LPGENT("Open Folder");
hotkey.ptszSection = LPGENT("Main");
hotkey.pszService = MS_OPENFOLDER_OPEN;
hotkey.DefHotKey = MAKEWORD( 'O', HOTKEYF_SHIFT | HOTKEYF_ALT );
Hotkey_Register(&hotkey);
CLISTMENUITEM mi = { sizeof(mi) };
mi.position = 0x7FFFFFFF;
mi.flags = CMIF_ICONFROMICOLIB|CMIF_TCHAR;
mi.icolibItem = icon.hIcolib;
mi.ptszName = LPGENT("Open Folder");
mi.pszService = MS_OPENFOLDER_OPEN;
Menu_AddMainMenuItem(&mi);
return 0;
}
HICON LoadIconExEx( const char* IcoLibName, int NonIcoLibIcon )
{
char szSettingName[64];
mir_snprintf( szSettingName, sizeof( szSettingName ), "%s_%s", OPENFOLDER_MODULE_NAME, IcoLibName );
return Skin_GetIcon(szSettingName);
}
extern "C" __declspec( dllexport ) PLUGININFOEX* MirandaPluginInfoEx( DWORD mirandaVersion )
{
return &pluginInfoEx;
}
/////////////////////////////////////////////////////////////////////////////////////////
extern "C" int __declspec( dllexport ) Load()
{
mir_getLP(&pluginInfoEx);
hServiceOpenFolder = CreateServiceFunction(MS_OPENFOLDER_OPEN, MenuCommand_OpenFolder);
HookEvent(ME_SYSTEM_MODULESLOADED, ModulesLoaded);
return 0;
}
/////////////////////////////////////////////////////////////////////////////////////////
extern "C" int __declspec( dllexport ) Unload()
{
DestroyServiceFunction(hServiceOpenFolder);
return 0;
}
|