summaryrefslogtreecommitdiff
path: root/MenuItemEx
diff options
context:
space:
mode:
authorwatcherhd <watcherhd@e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb>2011-04-21 14:14:52 +0000
committerwatcherhd <watcherhd@e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb>2011-04-21 14:14:52 +0000
commitcb4a46e7fbe62d788e66ed6121c717a2d22a4d7c (patch)
tree30df260fdc5a1b5a7049c2f8cac8b7ef17513d6d /MenuItemEx
parent19b6f534d2e784a1e120bf52c4aa07004798f473 (diff)
svn.miranda.im is moving to a new home!
git-svn-id: http://miranda-plugins.googlecode.com/svn/trunk@7 e753b5eb-9565-29b2-b5c5-2cc6f99dfbcb
Diffstat (limited to 'MenuItemEx')
-rw-r--r--MenuItemEx/DoIt.bat16
-rw-r--r--MenuItemEx/docs/menuex_changelog.txt122
-rw-r--r--MenuItemEx/icons/Always Visible.icobin0 -> 2038 bytes
-rw-r--r--MenuItemEx/icons/CopyID_overlay.icobin0 -> 2550 bytes
-rw-r--r--MenuItemEx/icons/CopyMirVer.icobin0 -> 2550 bytes
-rw-r--r--MenuItemEx/icons/Ignore_list.icobin0 -> 2550 bytes
-rw-r--r--MenuItemEx/icons/Never Visible.icobin0 -> 2038 bytes
-rw-r--r--MenuItemEx/icons/auth_added.icobin0 -> 2550 bytes
-rw-r--r--MenuItemEx/icons/auth_ask.icobin0 -> 2550 bytes
-rw-r--r--MenuItemEx/icons/change_proto.icobin0 -> 2550 bytes
-rw-r--r--MenuItemEx/icons/copyip_overlay.icobin0 -> 2550 bytes
-rw-r--r--MenuItemEx/icons/hide_from_list.icobin0 -> 2550 bytes
-rw-r--r--MenuItemEx/icons/msg_status.icobin0 -> 2550 bytes
-rw-r--r--MenuItemEx/icons/msg_xStatus.icobin0 -> 2550 bytes
-rw-r--r--MenuItemEx/icons/recv_files.icobin0 -> 2550 bytes
-rw-r--r--MenuItemEx/icons/salad.right.icobin0 -> 2550 bytes
-rw-r--r--MenuItemEx/icons/show_in_list.icobin0 -> 1150 bytes
-rw-r--r--MenuItemEx/images.c363
-rw-r--r--MenuItemEx/images.h8
-rw-r--r--MenuItemEx/main.c1346
-rw-r--r--MenuItemEx/menuex.dsp131
-rw-r--r--MenuItemEx/menuex.dsw29
-rw-r--r--MenuItemEx/menuex.h74
-rw-r--r--MenuItemEx/menuex.rc174
-rw-r--r--MenuItemEx/menuex.vcproj440
-rw-r--r--MenuItemEx/menuex_10.sln38
-rw-r--r--MenuItemEx/menuex_10.suobin0 -> 9216 bytes
-rw-r--r--MenuItemEx/menuex_10.vcxproj560
-rw-r--r--MenuItemEx/menuex_10.vcxproj.filters44
-rw-r--r--MenuItemEx/menuex_10.vcxproj.user3
-rw-r--r--MenuItemEx/menuex_8.vcproj500
-rw-r--r--MenuItemEx/menuex_9.vcproj958
-rw-r--r--MenuItemEx/options.c132
-rw-r--r--MenuItemEx/resource.h50
-rw-r--r--MenuItemEx/resource.rc2
-rw-r--r--MenuItemEx/sdk/m_fingerprint.h70
-rw-r--r--MenuItemEx/sdk/m_metacontacts.h166
-rw-r--r--MenuItemEx/sdk/m_msg_buttonsbar.h120
-rw-r--r--MenuItemEx/sdk/m_updater.h150
-rw-r--r--MenuItemEx/version.h32
-rw-r--r--MenuItemEx/version.rc38
41 files changed, 5566 insertions, 0 deletions
diff --git a/MenuItemEx/DoIt.bat b/MenuItemEx/DoIt.bat
new file mode 100644
index 0000000..0496f19
--- /dev/null
+++ b/MenuItemEx/DoIt.bat
@@ -0,0 +1,16 @@
+"%ProgramFiles%\Microsoft Visual Studio .NET 2003\Common7\IDE\devenv.exe" /REBUILD "Release" menuex.sln
+"%ProgramFiles%\Microsoft Visual Studio .NET 2003\Common7\IDE\devenv.exe" /REBUILD "Release Unicode" menuex.sln
+"%ProgramFiles%\Microsoft Visual Studio 9.0\Common7\IDE\devenv.exe" /REBUILD "Release Unicode|x64" menuex_9.sln
+if not exist plugins md plugins
+copy /Y Release\plugins\MenuEx.dll plugins\MenuEx.dll
+if exist menuitemex.zip del menuitemex.zip
+"%ProgramFiles%\7-Zip\7z.exe" a -mx9 menuitemex.zip plugins\MenuEx.dll docs\menuex_changelog.txt
+copy /Y "Release Unicode\plugins\MenuEx.dll" plugins\MenuEx.dll
+if exist menuitemexw.zip del menuitemexw.zip
+"%ProgramFiles%\7-Zip\7z.exe" a -mx9 menuitemexw.zip plugins\MenuEx.dll docs\menuex_changelog.txt
+copy /Y "Release Unicode x64\plugins\MenuEx.dll" plugins\MenuEx.dll
+if exist menuitemexxw.zip del menuitemexxw.zip
+"%ProgramFiles%\7-Zip\7z.exe" a -mx9 menuitemexxw.zip plugins\MenuEx.dll docs\menuex_changelog.txt
+del plugins\MenuEx.dll
+if exist menuitemex_src.zip del menuitemex_src.zip
+"%ProgramFiles%\7-Zip\7z.exe" a -mx9 menuitemex_src.zip *.c *.h *.rc *.vcproj *.vcxproj *.vcxproj.filters sdk\*.h icons\*.ico docs\*.txt
diff --git a/MenuItemEx/docs/menuex_changelog.txt b/MenuItemEx/docs/menuex_changelog.txt
new file mode 100644
index 0000000..e7932a3
--- /dev/null
+++ b/MenuItemEx/docs/menuex_changelog.txt
@@ -0,0 +1,122 @@
+Verison 1.3.0.8
+
+[+] Added ability to copy unicode status message
+[*] Authorization request fixed
+
+Verison 1.3.0.7
+
+[+] Added option to disable showing user ID in menu item.
+[+] Added option to trim too long user ID in menu item.
+
+Verison 1.3.0.6
+
+[+] Unicode in authorization requests (for Miranda 0.9.0.7 and higher)
+
+Version 1.3.0.5
+
+[*] Crash fix for disabled accounts
+
+Version 1.3.0.4
+
+[*] Unicode in CopyToClipboard function
+
+Verison 1.3.0.3
+
+[+] Support Miranda 0.7
+
+Verison 1.3.0.2
+
+[+] Added "Add item name" option for the "Copy status message" function
+[+] Added "Open ignore settings" item
+[*] Some tweaks in the options page
+
+
+Verison 1.3.0.1 [20-04-2009]
+
+***NOW IT'S WORKING ONLY WITH CORE FROM LATEST NIGHTLY BUILDS***
+[+] Added "Browse Received Files" button on Tabsrmm button bar (disabled by default)
+[+] Added ability to show popup with the copied text for various functions
+[+] Show all menu item on ctrl + click
+[+] Feature "Protocol" is replaced with "Copy to Account" (hold Ctrl key for move to account)
+[+] Show dialog with offer to send authorization request, if contact is copied/moved to another account.
+[+] Icolib support
+[+] Accounts support in various functions
+[-] "Group..." menu item was removed
+[*] New, more nice submenu in contact menu
+[*] Improved "Copy status message" function.
+[*] Added icon for "Show in list" item (icon by king_of_crunk)
+[*] New icons for "Always visible" and "Always invisible" items from clist_modern
+[*] Changed "Browse Received Files" icon
+[*] Improved Request authorization dialog:
+ - now it's translatable
+ - added caption
+ - added default request text
+ - send authorization request on ctrl + enter
+ - and some other
+[*] Options was moved into the Customise group
+[*] Fix for a gdi leak
+[*] Various bugfixes and changes
+
+
+Verison 1.2.1.14 [21-04-2008]
+
+[*] new icons based on ICE iconpack
+
+
+Verison 1.2.1.13 [10-04-2008]
+
+[*] StatusMsg function modified (no SMR needed for copy xStatus)
+
+
+Verison 1.2.1.12 [09-04-2008]
+
+[*] MIID added
+[+] CopyID copied most online contact id in MetaContact
+
+
+Verison 1.2.1.11 [25-02-2007]
+
+[*] icon fixes (from ghazan)
+
+
+Verison 1.2.1.10 [12-01-2007]
+
+[+] Option "Show alpha icon" for "Hide from list" menu item
+[+] Option "Copy MirVer"
+
+
+Verison 1.2.1.9
+
+[+] Option "Show alpha icons"
+
+
+Verison 1.2.1.8
+
+[*] add more icons
+
+
+Verison 1.2.1.7
+
+[+] Option "Copy IP"
+
+
+Verison 1.2.1.6
+
+[+] Option "Add protocol name"
+
+
+Verison 1.2.1.3
+
+[+] Option "Copy Status Message", need SMR plugin
+
+
+Verison 1.2.1.2
+
+[+] Updater support
+
+
+Verison 1.2.1.1
+
+[+] New icons
+[+] Option "Copy ID"
+[+] Option "Browse Received Files"
diff --git a/MenuItemEx/icons/Always Visible.ico b/MenuItemEx/icons/Always Visible.ico
new file mode 100644
index 0000000..25c1a92
--- /dev/null
+++ b/MenuItemEx/icons/Always Visible.ico
Binary files differ
diff --git a/MenuItemEx/icons/CopyID_overlay.ico b/MenuItemEx/icons/CopyID_overlay.ico
new file mode 100644
index 0000000..4c5bc0a
--- /dev/null
+++ b/MenuItemEx/icons/CopyID_overlay.ico
Binary files differ
diff --git a/MenuItemEx/icons/CopyMirVer.ico b/MenuItemEx/icons/CopyMirVer.ico
new file mode 100644
index 0000000..9b7bc67
--- /dev/null
+++ b/MenuItemEx/icons/CopyMirVer.ico
Binary files differ
diff --git a/MenuItemEx/icons/Ignore_list.ico b/MenuItemEx/icons/Ignore_list.ico
new file mode 100644
index 0000000..5635149
--- /dev/null
+++ b/MenuItemEx/icons/Ignore_list.ico
Binary files differ
diff --git a/MenuItemEx/icons/Never Visible.ico b/MenuItemEx/icons/Never Visible.ico
new file mode 100644
index 0000000..131ae02
--- /dev/null
+++ b/MenuItemEx/icons/Never Visible.ico
Binary files differ
diff --git a/MenuItemEx/icons/auth_added.ico b/MenuItemEx/icons/auth_added.ico
new file mode 100644
index 0000000..fa37e93
--- /dev/null
+++ b/MenuItemEx/icons/auth_added.ico
Binary files differ
diff --git a/MenuItemEx/icons/auth_ask.ico b/MenuItemEx/icons/auth_ask.ico
new file mode 100644
index 0000000..d8879d1
--- /dev/null
+++ b/MenuItemEx/icons/auth_ask.ico
Binary files differ
diff --git a/MenuItemEx/icons/change_proto.ico b/MenuItemEx/icons/change_proto.ico
new file mode 100644
index 0000000..07c72f9
--- /dev/null
+++ b/MenuItemEx/icons/change_proto.ico
Binary files differ
diff --git a/MenuItemEx/icons/copyip_overlay.ico b/MenuItemEx/icons/copyip_overlay.ico
new file mode 100644
index 0000000..2823f13
--- /dev/null
+++ b/MenuItemEx/icons/copyip_overlay.ico
Binary files differ
diff --git a/MenuItemEx/icons/hide_from_list.ico b/MenuItemEx/icons/hide_from_list.ico
new file mode 100644
index 0000000..69fb9f9
--- /dev/null
+++ b/MenuItemEx/icons/hide_from_list.ico
Binary files differ
diff --git a/MenuItemEx/icons/msg_status.ico b/MenuItemEx/icons/msg_status.ico
new file mode 100644
index 0000000..1d0607d
--- /dev/null
+++ b/MenuItemEx/icons/msg_status.ico
Binary files differ
diff --git a/MenuItemEx/icons/msg_xStatus.ico b/MenuItemEx/icons/msg_xStatus.ico
new file mode 100644
index 0000000..d057d35
--- /dev/null
+++ b/MenuItemEx/icons/msg_xStatus.ico
Binary files differ
diff --git a/MenuItemEx/icons/recv_files.ico b/MenuItemEx/icons/recv_files.ico
new file mode 100644
index 0000000..d8e15aa
--- /dev/null
+++ b/MenuItemEx/icons/recv_files.ico
Binary files differ
diff --git a/MenuItemEx/icons/salad.right.ico b/MenuItemEx/icons/salad.right.ico
new file mode 100644
index 0000000..03dd1f4
--- /dev/null
+++ b/MenuItemEx/icons/salad.right.ico
Binary files differ
diff --git a/MenuItemEx/icons/show_in_list.ico b/MenuItemEx/icons/show_in_list.ico
new file mode 100644
index 0000000..bea1dfd
--- /dev/null
+++ b/MenuItemEx/icons/show_in_list.ico
Binary files differ
diff --git a/MenuItemEx/images.c b/MenuItemEx/images.c
new file mode 100644
index 0000000..aed5d99
--- /dev/null
+++ b/MenuItemEx/images.c
@@ -0,0 +1,363 @@
+#include "menuex.h"
+#include "images.h"
+
+extern HINSTANCE hinstance;
+
+
+void HalfBitmap32Alpha(HBITMAP hBitmap)
+{
+ BITMAP bmp;
+ DWORD dwLen;
+ BYTE *p;
+ int x, y;
+
+ GetObject(hBitmap, sizeof(bmp), &bmp);
+
+ if (bmp.bmBitsPixel != 32)
+ return;
+
+ dwLen = bmp.bmWidth * bmp.bmHeight * (bmp.bmBitsPixel / 8);
+ p = (BYTE *)malloc(dwLen);
+ if (p == NULL)
+ return;
+ memset(p, 0, dwLen);
+
+ GetBitmapBits(hBitmap, dwLen, p);
+
+ for (y = 0; y < bmp.bmHeight; ++y) {
+ BYTE *px = p + bmp.bmWidth * 4 * y;
+
+ for (x = 0; x < bmp.bmWidth; ++x)
+ {
+ px[3]>>=1;
+ px += 4;
+ }
+ }
+
+ SetBitmapBits(hBitmap, dwLen, p);
+
+ free(p);
+}
+
+
+// Make a bitmap all transparent, but only if it is a 32bpp
+//void MakeBmpTransparent(HBITMAP hBitmap)
+//{
+// BITMAP bmp;
+// DWORD dwLen;
+// BYTE *p;
+//
+// GetObject(hBitmap, sizeof(bmp), &bmp);
+//
+// if (bmp.bmBitsPixel != 32)
+// return;
+//
+// dwLen = bmp.bmWidth * bmp.bmHeight * (bmp.bmBitsPixel / 8);
+// p = (BYTE *)malloc(dwLen);
+// if (p == NULL)
+// return;
+//
+// memset(p, 0, dwLen);
+// SetBitmapBits(hBitmap, dwLen, p);
+//
+// free(p);
+//}
+
+
+// Correct alpha from bitmaps loaded without it (it cames with 0 and should be 255)
+void CorrectBitmap32Alpha(HBITMAP hBitmap, BOOL force)
+{
+ BITMAP bmp;
+ DWORD dwLen;
+ BYTE *p;
+ int x, y;
+ BOOL fixIt;
+
+ GetObject(hBitmap, sizeof(bmp), &bmp);
+
+ if (bmp.bmBitsPixel != 32)
+ return;
+
+ dwLen = bmp.bmWidth * bmp.bmHeight * (bmp.bmBitsPixel / 8);
+ p = (BYTE *)malloc(dwLen);
+ if (p == NULL)
+ return;
+ memset(p, 0, dwLen);
+
+ GetBitmapBits(hBitmap, dwLen, p);
+
+ fixIt = TRUE;
+ for (y = 0; fixIt && y < bmp.bmHeight; ++y) {
+ BYTE *px = p + bmp.bmWidth * 4 * y;
+
+ for (x = 0; fixIt && x < bmp.bmWidth; ++x)
+ {
+ if (px[3] != 0 && !force)
+ {
+ fixIt = FALSE;
+ }
+ else
+ {
+ if (px[0] != 0 || px[1] != 0 || px[2] != 0)
+ px[3] = 255;
+ }
+
+ px += 4;
+ }
+ }
+
+ if (fixIt)
+ SetBitmapBits(hBitmap, dwLen, p);
+
+ free(p);
+}
+
+
+HBITMAP CopyBitmapTo32(HBITMAP hBitmap)
+{
+ BITMAPINFO RGB32BitsBITMAPINFO;
+ BYTE * ptPixels;
+ HBITMAP hDirectBitmap;
+
+ BITMAP bmp;
+ DWORD dwLen;
+ BYTE *p;
+
+ GetObject(hBitmap, sizeof(bmp), &bmp);
+
+ dwLen = bmp.bmWidth * bmp.bmHeight * 4;
+ p = (BYTE *)malloc(dwLen);
+ if (p == NULL)
+ return NULL;
+
+ // Create bitmap
+ ZeroMemory(&RGB32BitsBITMAPINFO, sizeof(BITMAPINFO));
+ RGB32BitsBITMAPINFO.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
+ RGB32BitsBITMAPINFO.bmiHeader.biWidth = bmp.bmWidth;
+ RGB32BitsBITMAPINFO.bmiHeader.biHeight = bmp.bmHeight;
+ RGB32BitsBITMAPINFO.bmiHeader.biPlanes = 1;
+ RGB32BitsBITMAPINFO.bmiHeader.biBitCount = 32;
+
+ hDirectBitmap = CreateDIBSection(NULL,
+ (BITMAPINFO *)&RGB32BitsBITMAPINFO,
+ DIB_RGB_COLORS,
+ (void **)&ptPixels,
+ NULL, 0);
+
+ // Copy data
+ if (bmp.bmBitsPixel != 32)
+ {
+ HDC hdcOrig, hdcDest;
+ HBITMAP oldOrig, oldDest;
+
+ hdcOrig = CreateCompatibleDC(NULL);
+ oldOrig = (HBITMAP) SelectObject(hdcOrig, hBitmap);
+
+ hdcDest = CreateCompatibleDC(NULL);
+ oldDest = (HBITMAP) SelectObject(hdcDest, hDirectBitmap);
+
+ BitBlt(hdcDest, 0, 0, bmp.bmWidth, bmp.bmHeight, hdcOrig, 0, 0, SRCCOPY);
+
+ SelectObject(hdcDest, oldDest);
+ DeleteObject(hdcDest);
+ SelectObject(hdcOrig, oldOrig);
+ DeleteObject(hdcOrig);
+
+ // Set alpha
+ CorrectBitmap32Alpha(hDirectBitmap, FALSE);
+ }
+ else
+ {
+ GetBitmapBits(hBitmap, dwLen, p);
+ SetBitmapBits(hDirectBitmap, dwLen, p);
+ }
+
+ free(p);
+
+ return hDirectBitmap;
+}
+
+
+//HBITMAP CreateBitmap32(int cx, int cy)
+//{
+// BITMAPINFO RGB32BitsBITMAPINFO;
+// UINT * ptPixels;
+// HBITMAP DirectBitmap;
+//
+// ZeroMemory(&RGB32BitsBITMAPINFO,sizeof(BITMAPINFO));
+// RGB32BitsBITMAPINFO.bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
+// RGB32BitsBITMAPINFO.bmiHeader.biWidth=cx;//bm.bmWidth;
+// RGB32BitsBITMAPINFO.bmiHeader.biHeight=cy;//bm.bmHeight;
+// RGB32BitsBITMAPINFO.bmiHeader.biPlanes=1;
+// RGB32BitsBITMAPINFO.bmiHeader.biBitCount=32;
+//
+// DirectBitmap = CreateDIBSection(NULL,
+// (BITMAPINFO *)&RGB32BitsBITMAPINFO,
+// DIB_RGB_COLORS,
+// (void **)&ptPixels,
+// NULL, 0);
+// return DirectBitmap;
+//}
+
+
+BOOL MakeBitmap32(HBITMAP *hBitmap)
+{
+ BITMAP bmp;
+
+ GetObject(*hBitmap, sizeof(bmp), &bmp);
+
+ if (bmp.bmBitsPixel != 32) {
+ // Convert to 32 bpp
+ HBITMAP hBmpTmp = CopyBitmapTo32(*hBitmap);
+ DeleteObject(*hBitmap);
+ *hBitmap = hBmpTmp;
+ }
+
+ return TRUE;
+}
+
+
+//#define GET_PIXEL(__P__, __X__, __Y__) ( __P__ + width * 4 * (__Y__) + 4 * (__X__) )
+
+//BOOL MakeGrayscale(HBITMAP *hBitmap)
+//{
+// BYTE *p = NULL;
+// BYTE *p1;
+// DWORD dwLen;
+// int width, height, x, y;
+// BITMAP bmp;
+//
+// GetObject(*hBitmap, sizeof(bmp), &bmp);
+// width = bmp.bmWidth;
+// height = bmp.bmHeight;
+//
+// dwLen = width * height * 4;
+// p = (BYTE *)malloc(dwLen);
+// if (p == NULL)
+// {
+// return FALSE;
+// }
+//
+// if (bmp.bmBitsPixel != 32)
+// {
+// // Convert to 32 bpp
+// HBITMAP hBmpTmp = CopyBitmapTo32(*hBitmap);
+// DeleteObject(*hBitmap);
+// *hBitmap = hBmpTmp;
+// }
+// GetBitmapBits(*hBitmap, dwLen, p);
+//
+// // Make grayscale
+// for (y = 0 ; y < height ; y++)
+// {
+// for (x = 0 ; x < width ; x++)
+// {
+// p1 = GET_PIXEL(p, x, y);
+// p1[0] = p1[1] = p1[2] = ( p1[0] + p1[1] + p1[2] ) / 3;
+// }
+// }
+//
+// dwLen = SetBitmapBits(*hBitmap, dwLen, p);
+// free(p);
+//
+// return TRUE;
+//}
+
+
+HICON MakeHalfAlphaIcon(HICON SourceIcon)
+{
+ ICONINFO TargetIconInfo;
+ BITMAP TargetBitmapInfo;
+ HICON TargetIcon, TempIcon;
+
+ TempIcon = CopyIcon(SourceIcon);
+ if ( !GetIconInfo(TempIcon, &TargetIconInfo))
+ return NULL;
+
+ if ( !GetObject(TargetIconInfo.hbmColor, sizeof(BITMAP), &TargetBitmapInfo))
+ return NULL;
+
+ MakeBitmap32(&TargetIconInfo.hbmColor);
+ HalfBitmap32Alpha(TargetIconInfo.hbmColor);
+ TargetIcon = CreateIconIndirect(&TargetIconInfo);
+
+ DestroyIcon(TempIcon);
+ DeleteObject(TargetIconInfo.hbmColor);
+ DeleteObject(TargetIconInfo.hbmMask);
+ return TargetIcon;
+}
+
+
+//HICON MakeGrayscaleIcon(HICON SourceIcon)
+//{
+// ICONINFO TargetIconInfo;
+// BITMAP TargetBitmapInfo;
+// HICON TargetIcon, TempIcon;
+//
+// TempIcon = CopyIcon(SourceIcon);
+// if (! GetIconInfo(TempIcon, &TargetIconInfo) || GetObject(TargetIconInfo.hbmColor, sizeof(BITMAP), &TargetBitmapInfo)==0) return NULL;
+//
+// MakeGrayscale(&TargetIconInfo.hbmColor);
+//
+// TargetIcon = CreateIconIndirect(&TargetIconInfo);
+// DestroyIcon(TempIcon);
+//
+// return TargetIcon;
+//}
+
+
+HICON BindOverlayIcon(HICON SourceIcon,LPCSTR OverlayIconName)
+{
+ ICONINFO OverlayIconInfo, TargetIconInfo;
+ BITMAP OverlayBitmapInfo, TargetBitmapInfo;
+ HBITMAP OldOverlayBitmap, OldTargetBitmap;
+ HICON OverlayIcon, TargetIcon, TempIcon;
+ HDC OverlayDC, TargetDC;
+ BLENDFUNCTION bf = {0,0,255,1};
+
+ TempIcon = CopyIcon(SourceIcon);
+ if ( !GetIconInfo( TempIcon, &TargetIconInfo ))
+ return NULL;
+
+ MakeBitmap32(&TargetIconInfo.hbmColor);
+ CorrectBitmap32Alpha(TargetIconInfo.hbmColor, FALSE);
+ GetObject(TargetIconInfo.hbmColor, sizeof(BITMAP), &TargetBitmapInfo);
+
+ OverlayIcon = (HICON)CallService( MS_SKIN2_GETICON, 0, (LPARAM)OverlayIconName);
+ if ( !GetIconInfo(OverlayIcon, &OverlayIconInfo) || !GetObject(OverlayIconInfo.hbmColor, sizeof(BITMAP), &OverlayBitmapInfo))
+ return NULL;
+
+ TargetDC = CreateCompatibleDC(NULL);
+ OldTargetBitmap = (HBITMAP)SelectObject(TargetDC, TargetIconInfo.hbmColor);
+
+ OverlayDC = CreateCompatibleDC(NULL);
+ OldOverlayBitmap = (HBITMAP)SelectObject(OverlayDC, OverlayIconInfo.hbmColor);
+
+ AlphaBlend(TargetDC, 0, 0, TargetBitmapInfo.bmWidth, TargetBitmapInfo.bmHeight,
+ OverlayDC, 0, 0, OverlayBitmapInfo.bmWidth, OverlayBitmapInfo.bmHeight, bf);
+
+ SelectObject(TargetDC, TargetIconInfo.hbmMask);
+ SelectObject(OverlayDC, OverlayIconInfo.hbmMask);
+
+ BitBlt(TargetDC, 0, 0, TargetBitmapInfo.bmWidth, TargetBitmapInfo.bmHeight,
+ OverlayDC, 0, 0, SRCCOPY);
+
+ TargetIcon = CreateIconIndirect(&TargetIconInfo);
+ DestroyIcon(TempIcon);
+ //DestroyIcon(OverlayIcon);
+
+ SelectObject(TargetDC, OldTargetBitmap);
+ DeleteObject(TargetIconInfo.hbmColor);
+ DeleteObject(TargetIconInfo.hbmMask);
+ DeleteDC(TargetDC);
+
+ SelectObject(OverlayDC, OldOverlayBitmap);
+ DeleteObject(OverlayIconInfo.hbmColor);
+ DeleteObject(OverlayIconInfo.hbmMask);
+ DeleteDC(OverlayDC);
+
+ return TargetIcon;
+}
+
+
+// EOF
diff --git a/MenuItemEx/images.h b/MenuItemEx/images.h
new file mode 100644
index 0000000..e828871
--- /dev/null
+++ b/MenuItemEx/images.h
@@ -0,0 +1,8 @@
+#ifndef __IMAGE_UTILS_H__
+#define __IMAGE_UTILS_H__
+
+HICON BindOverlayIcon(HICON,LPCSTR);
+//HICON MakeGrayscaleIcon(HICON);
+HICON MakeHalfAlphaIcon(HICON);
+
+#endif // __IMAGE_UTILS_H__
diff --git a/MenuItemEx/main.c b/MenuItemEx/main.c
new file mode 100644
index 0000000..1533d6b
--- /dev/null
+++ b/MenuItemEx/main.c
@@ -0,0 +1,1346 @@
+#include "menuex.h"
+#include "images.h"
+#include "version.h"
+
+#define MS_SETINVIS "MenuEx/SetInvis"
+#define MS_SETVIS "MenuEx/SetVis"
+#define MS_HIDE "MenuEx/Hide"
+#define MS_IGNORE "MenuEx/Ignore"
+#define MS_PROTO "MenuEx/ChangeProto"
+#define MS_ADDED "MenuEx/SendAdded"
+#define MS_AUTHREQ "MenuEx/SendAuthReq"
+#define MS_COPYID "MenuEx/CopyID"
+#define MS_RECVFILES "MenuEx/RecvFiles"
+#define MS_STATUSMSG "MenuEx/CopyStatusMsg"
+#define MS_COPYIP "MenuEx/CopyIP"
+#define MS_COPYMIRVER "MenuEx/CopyMirVer"
+
+
+const int vf_default = VF_VS|VF_HFL|VF_IGN|VF_CID|VF_SHOWID|VF_RECV|VF_STAT|VF_SMNAME|VF_CIDN|VF_CIP;
+
+PLUGINLINK *pluginLink;
+MUUID interfaces[] = {MIID_MENUEX, MIID_LAST};
+struct MM_INTERFACE mmi;
+HINSTANCE hinstance;
+HANDLE hmenuVis,hmenuOff,hmenuHide,hmenuIgnore,hmenuProto,hmenuAdded,hmenuAuthReq;
+HANDLE hmenuCopyID,hmenuRecvFiles,hmenuStatusMsg,hmenuCopyIP,hmenuCopyMirVer;
+static HANDLE hIgnoreItem[9], hProtoItem[MAX_PROTOS], hHooks[7], hServices[12];
+HICON hIcon[5];
+BOOL bMetaContacts, bMir_08;
+PROTOACCOUNT **accs;
+OPENOPTIONSDIALOG ood;
+int protoCount;
+static LONG_PTR OldAuthReqEditProc;
+
+struct {
+ char *module;
+ char *name;
+ TCHAR *fullName;
+ char flag;
+}
+static const statusMsg[]={
+ { "CList", "StatusMsg", LPGENT("Status message"), 1 },
+ { 0, "XStatusName", LPGENT("XStatus title"), 4 },
+ { 0, "XStatusMsg", LPGENT("XStatus message"), 2 },
+ { "AdvStatus", "tune/text", LPGENT("Listening to"), 8 },
+ { "AdvStatus", "activity/title", LPGENT("Activity title"), 8 },
+ { "AdvStatus", "activity/text", LPGENT("Activity text"), 8 }
+};
+
+struct
+{
+ TCHAR* szDescr;
+ char* szName;
+ int defIconID;
+}
+static const iconList[] = {
+ { _T("Hide from list"), "miex_hidefl", IDI_ICON0 },
+ { _T("Show in list"), "miex_showil", IDI_ICON8 },
+ { _T("Always visible"), "miex_vis", IDI_ICON1 },
+ { _T("Never visible"), "miex_invis", IDI_ICON2 },
+ { _T("Send 'You were added'"), "miex_added", IDI_ICON4 },
+ { _T("Request authorization"), "miex_authorization", IDI_ICON5 },
+ { _T("Copy to Account"), "miex_protocol", IDI_ICON6 },
+ { _T("Ignore"), "miex_ignore", IDI_ICON7 },
+ { _T("Browse Received Files"), "miex_recfiles", IDI_ICON12 },
+ { _T("Copy MirVer"), "miex_copymver", IDI_ICON13 }
+};
+
+struct
+{
+ TCHAR* szDescr;
+ char* szName;
+ int defIconID;
+}
+static const overlayIconList[] = {
+ { _T("Copy ID"), "miex_copyid", IDI_ICON3 },
+ { _T("Copy Status Message"), "miex_copysm1", IDI_ICON9 },
+ { _T("Copy xStatus Message"), "miex_copysm2", IDI_ICON10 },
+ { _T("Copy IP"), "miex_copyip", IDI_ICON11 }
+};
+
+struct {
+ TCHAR* name;
+ int type;
+ int icon;
+}
+static const ii[] = {
+ { LPGENT("All"), IGNOREEVENT_ALL, SKINICON_OTHER_FILLEDBLOB },
+ { LPGENT("Messages"), IGNOREEVENT_MESSAGE, SKINICON_EVENT_MESSAGE },
+ { LPGENT("URL"), IGNOREEVENT_URL, SKINICON_EVENT_URL },
+ { LPGENT("Files"), IGNOREEVENT_FILE, SKINICON_EVENT_FILE },
+ { LPGENT("User Online"), IGNOREEVENT_USERONLINE, SKINICON_OTHER_USERONLINE },
+ { LPGENT("Authorization"), IGNOREEVENT_AUTHORIZATION, SKINICON_OTHER_MIRANDA },
+ { LPGENT("You Were Added"), IGNOREEVENT_YOUWEREADDED, SKINICON_OTHER_ADDCONTACT },
+ { LPGENT("Typing Notify"), IGNOREEVENT_TYPINGNOTIFY, SKINICON_OTHER_TYPING }
+};
+
+PLUGININFOEX pluginInfoEx = {
+ sizeof(PLUGININFOEX),
+ MODULENAME,
+ __VERSION_DWORD,
+ __DESC,
+ __AUTHORS,
+ __EMAIL,
+ __COPYRIGHTS,
+ __WEB __PLUGIN_ID_STR,
+ UNICODE_AWARE,
+ 0,
+ MIID_MENUEX
+};
+
+struct ModSetLinkLinkItem { // code from dbe++ plugin by Bio
+ char *name;
+ BYTE *next; //struct ModSetLinkLinkItem
+};
+
+typedef struct {
+ struct ModSetLinkLinkItem *first;
+ struct ModSetLinkLinkItem *last;
+} ModuleSettingLL;
+
+int GetSetting(HANDLE hContact, const char *szModule, const char *szSetting, DBVARIANT *dbv)
+{
+ DBCONTACTGETSETTING cgs;
+
+ cgs.szModule=szModule;
+ cgs.szSetting=szSetting;
+ cgs.pValue=dbv;
+ dbv->type = 0;
+
+ return CallService(MS_DB_CONTACT_GETSETTING_STR,(WPARAM)hContact,(LPARAM)&cgs);
+}
+
+int enumModulesSettingsProc( const char *szName, LPARAM lParam)
+{
+ ModuleSettingLL *msll = (ModuleSettingLL *)lParam;
+ if (!msll->first)
+ {
+ msll->first = (struct ModSetLinkLinkItem *)malloc(sizeof(struct ModSetLinkLinkItem));
+ if (!msll->first) return 1;
+ msll->first->name = _strdup(szName);
+ msll->first->next = 0;
+ msll->last = msll->first;
+ }
+ else
+ {
+ struct ModSetLinkLinkItem *item = (struct ModSetLinkLinkItem *)malloc(sizeof(struct ModSetLinkLinkItem));
+ if (!item) return 1;
+ msll->last->next = (BYTE*)item;
+ msll->last = (struct ModSetLinkLinkItem *)item;
+ item->name = _strdup(szName);
+ item->next = 0;
+ }
+ return 0;
+}
+
+void FreeModuleSettingLL(ModuleSettingLL* msll)
+{
+ if (msll)
+ {
+ struct ModSetLinkLinkItem *item = msll->first;
+ struct ModSetLinkLinkItem *temp;
+
+ while (item)
+ {
+ if (item->name)
+ {
+ free(item->name);
+ item->name = 0;
+ }
+ temp = item;
+ item = (struct ModSetLinkLinkItem *)item->next;
+ if (temp)
+ {
+ free(temp);
+ temp = 0;
+ }
+ }
+
+ msll->first = 0;
+ msll->last = 0;
+ }
+}
+
+void RenameDbProto(HANDLE hContact, HANDLE hContactNew, char* oldName, char* newName, int delOld)
+{
+ DBVARIANT dbv;
+ ModuleSettingLL settinglist;
+ struct ModSetLinkLinkItem *setting;
+ DBCONTACTENUMSETTINGS dbces;
+
+ // enum all setting the contact has for the module
+ dbces.pfnEnumProc = enumModulesSettingsProc;
+ dbces.szModule = oldName;
+ dbces.lParam = (LPARAM)&settinglist;
+ settinglist.first = 0;
+ settinglist.last = 0;
+ CallService(MS_DB_CONTACT_ENUMSETTINGS, (WPARAM)hContact,(LPARAM)&dbces);
+
+ setting = settinglist.first;
+ while (setting)
+ {
+ if (!GetSetting(hContact,oldName,setting->name,&dbv))
+ {
+ switch (dbv.type)
+ {
+ case DBVT_BYTE:
+ DBWriteContactSettingByte(hContactNew, newName, setting->name, dbv.bVal);
+ break;
+ case DBVT_WORD:
+ DBWriteContactSettingWord(hContactNew, newName, setting->name, dbv.wVal);
+ break;
+ case DBVT_DWORD:
+ DBWriteContactSettingDword(hContactNew, newName, setting->name, dbv.dVal);
+ break;
+ case DBVT_ASCIIZ:
+ DBWriteContactSettingString(hContactNew, newName, setting->name, dbv.pszVal);
+ break;
+ case DBVT_UTF8:
+ DBWriteContactSettingStringUtf(hContactNew, newName, setting->name, dbv.pszVal);
+ break;
+ case DBVT_BLOB:
+ DBWriteContactSettingBlob(hContactNew, newName, setting->name, dbv.pbVal, dbv.cpbVal);
+ break;
+
+ }
+ if (delOld)
+ DBDeleteContactSetting(hContact, oldName, setting->name);
+ }
+ DBFreeVariant(&dbv);
+ setting = (struct ModSetLinkLinkItem *)setting->next;
+ }
+ FreeModuleSettingLL(&settinglist);
+} // end code from dbe++
+
+static void IconsInit()
+{
+ int i;
+ SKINICONDESC sid = {0};
+ TCHAR tszFile[MAX_PATH];
+ GetModuleFileName(hinstance, tszFile, MAX_PATH);
+
+ sid.cbSize = sizeof(SKINICONDESC);
+ sid.flags = SIDF_ALL_TCHAR;
+ sid.ptszDefaultFile = tszFile;
+ sid.cx = sid.cy = 16;
+ sid.ptszSection = LPGENT(MODULENAME);
+
+
+ for ( i = 0; i < SIZEOF(iconList); i++ ) {
+ sid.pszName = iconList[i].szName;
+ sid.ptszDescription = iconList[i].szDescr;
+ sid.iDefaultIndex = -iconList[i].defIconID;
+ CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
+ }
+
+ for ( i = 0; i < SIZEOF(overlayIconList); i++ ) {
+ sid.pszName = overlayIconList[i].szName;
+ sid.ptszDescription = overlayIconList[i].szDescr;
+ sid.iDefaultIndex = -overlayIconList[i].defIconID;
+ CallService(MS_SKIN2_ADDICON, 0, (LPARAM)&sid);
+ }
+}
+
+void ShowPopup(char* szText, TCHAR* tszText, HANDLE hContact)
+{
+ POPUPDATAT ppd = {0};
+ TCHAR* text = 0;
+
+ if (tszText)
+ text = mir_tstrdup(tszText);
+ else if (szText)
+ text = mir_a2t(szText);
+ if (!text) return;
+
+ ppd.lchIcon = LoadSkinnedIcon(SKINICON_OTHER_MIRANDA);
+ ppd.lchContact = hContact;
+ _tcsncpy(ppd.lptzContactName, (TCHAR*)CallService(MS_CLIST_GETCONTACTDISPLAYNAME, (WPARAM)hContact, GCDNF_TCHAR), MAX_CONTACTNAME - 1);
+ _tcsncpy(ppd.lptzText, text, MAX_SECONDLINE - 1);
+ ppd.iSeconds = -1;
+
+ PUAddPopUpT(&ppd);
+ mir_free(text);
+}
+
+BOOL DirectoryExists(HANDLE hContact)
+{
+ int attr;
+ char path[MAX_PATH];
+ CallService(MS_FILE_GETRECEIVEDFILESFOLDER, (WPARAM)hContact, (LPARAM)&path);
+ attr = GetFileAttributesA(path);
+ return (attr!=-1) && (attr&FILE_ATTRIBUTE_DIRECTORY);
+}
+
+void CopyToClipboard(HWND hwnd,LPSTR pszMsg, LPTSTR ptszMsg)
+{
+ HGLOBAL hglbCopy;
+ LPTSTR lptstrCopy;
+ LPTSTR buf = 0;
+ if (ptszMsg)
+ buf = mir_tstrdup(ptszMsg);
+ else if (pszMsg)
+ buf = mir_a2t(pszMsg);
+
+ if (buf == 0)
+ return;
+
+ hglbCopy = GlobalAlloc(GMEM_MOVEABLE, (lstrlen(buf)+1)*sizeof(TCHAR));
+ lptstrCopy = (LPTSTR)GlobalLock(hglbCopy);
+ lstrcpy(lptstrCopy, buf);
+ mir_free(buf);
+ GlobalUnlock(hglbCopy);
+
+ OpenClipboard(NULL);
+ EmptyClipboard();
+#ifdef _UNICODE
+ SetClipboardData(CF_UNICODETEXT, hglbCopy);
+#else
+ SetClipboardData(CF_TEXT, hglbCopy);
+#endif
+ CloseClipboard();
+}
+
+BOOL isMetaContact(HANDLE hContact) {
+
+ char *proto;
+ if(bMetaContacts) {
+ proto = (char *)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ if( lstrcmpA(proto,"MetaContacts") == 0 ) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+
+HANDLE getDefaultContact(HANDLE hContact) {
+
+ if(bMetaContacts) {
+ return (HANDLE)CallService(MS_MC_GETDEFAULTCONTACT,(WPARAM)hContact,0);
+ }
+ return 0;
+}
+
+
+HANDLE getMostOnline(HANDLE hContact) {
+
+ if(bMetaContacts) {
+ return (HANDLE)CallService(MS_MC_GETMOSTONLINECONTACT,(WPARAM)hContact,0);
+ }
+ return 0;
+}
+
+
+void GetID(HANDLE hContact,LPSTR szProto,LPSTR szID)
+{
+ DBVARIANT dbv_uniqueid;
+ LPSTR uID = (LPSTR) CallProtoService(szProto, PS_GETCAPS, PFLAG_UNIQUEIDSETTING, 0);
+ if ( uID == (LPSTR)CALLSERVICE_NOTFOUND )
+ uID = NULL;
+
+ *szID='\0';
+
+ if( uID && DBGetContactSetting(hContact, szProto, uID ,&dbv_uniqueid)==0 ) {
+ if (dbv_uniqueid.type ==DBVT_DWORD)
+ wsprintfA(szID, "%u", dbv_uniqueid.dVal);
+ else if (dbv_uniqueid.type ==DBVT_WORD)
+ wsprintfA(szID, "%u", dbv_uniqueid.wVal);
+ else if (dbv_uniqueid.type ==DBVT_BLOB)
+ wsprintfA(szID, "%s", dbv_uniqueid.cpbVal);
+ else
+ wsprintfA(szID, "%s", dbv_uniqueid.pszVal);
+
+ DBFreeVariant(&dbv_uniqueid);
+ }
+}
+
+int StatusMsgExists(HANDLE hContact)
+{
+ LPSTR module,msg;
+ char par[32];
+ BOOL ret=0;
+ int i;
+
+ module = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ if(!module) return 0;
+
+ for(i = 0; i < SIZEOF(statusMsg); i++) {
+ if (statusMsg[i].flag & 8)
+ mir_snprintf(par, SIZEOF(par), "%s/%s", module, statusMsg[i].name);
+ else
+ strcpy(par, statusMsg[i].name);
+
+ msg = DBGetString(hContact, (statusMsg[i].module) ? statusMsg[i].module : module, par);
+ if(msg) {
+ if(strlen(msg))
+ ret |= statusMsg[i].flag;
+ mir_free(msg);
+ }
+ }
+ return ret;
+}
+
+BOOL IPExists(HANDLE hContact)
+{
+ LPSTR szProto;
+ DWORD mIP,rIP;
+
+ szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ if(!szProto) return 0;
+
+ mIP = DBGetContactSettingDword(hContact, szProto, "IP", 0);
+ rIP = DBGetContactSettingDword(hContact, szProto, "RealIP", 0);
+
+ return (mIP!=0 || rIP!=0);
+}
+
+BOOL MirVerExists(HANDLE hContact)
+{
+ LPSTR szProto, msg;
+ BOOL ret=0;
+
+ szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ if(!szProto) return 0;
+
+ msg = DBGetString(hContact,szProto,"MirVer");
+ if(msg) {
+ if(strlen(msg)) ret = 1;
+ mir_free(msg);
+ }
+
+ return ret;
+}
+
+void getIP(HANDLE hContact,LPSTR szProto,LPSTR szIP)
+{
+ char szmIP[64]={0};
+ char szrIP[64]={0};
+ DWORD mIP = DBGetContactSettingDword(hContact, szProto, "IP", 0);
+ DWORD rIP = DBGetContactSettingDword(hContact, szProto, "RealIP", 0);
+ if( mIP ) wsprintfA(szmIP, "External IP: %d.%d.%d.%d\r\n", mIP>>24,(mIP>>16)&0xFF,(mIP>>8)&0xFF,mIP&0xFF);
+ if( rIP ) wsprintfA(szrIP, "Internal IP: %d.%d.%d.%d\r\n", rIP>>24,(rIP>>16)&0xFF,(rIP>>8)&0xFF,rIP&0xFF);
+ strcpy(szIP,szrIP);
+ strcat(szIP,szmIP);
+}
+
+LPSTR getMirVer(HANDLE hContact)
+{
+ LPSTR szProto, msg;
+
+ szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ if(!szProto) return NULL;
+
+ msg = DBGetString(hContact,szProto,"MirVer");
+ if(msg) {
+ if(strlen(msg))
+ return msg;
+ mir_free(msg);
+ }
+
+ return NULL;
+}
+
+static LRESULT CALLBACK AuthReqEditSubclassProc(HWND hwnd,UINT msg,WPARAM wParam,LPARAM lParam)
+{
+ switch(msg) {
+ case WM_CHAR:
+ if(wParam == '\n' && CTRL_IS_PRESSED) { // ctrl + ENTER
+ PostMessage(GetParent(hwnd), WM_COMMAND, IDOK, 0);
+ return 0;
+ }
+ if(wParam == 1 && CTRL_IS_PRESSED) { // ctrl + a
+ SendMessage(hwnd, EM_SETSEL, 0, -1);
+ return 0;
+ }
+ break;
+ case WM_SETFOCUS:
+ SendMessage(hwnd, EM_SETSEL, 0, -1);
+ break;
+ }
+ return CallWindowProc((WNDPROC)OldAuthReqEditProc,hwnd,msg,wParam,lParam);
+}
+
+INT_PTR CALLBACK AuthReqWndProc(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam)
+{
+ static HANDLE hcontact;
+
+ switch(msg){
+ case WM_INITDIALOG:
+ TranslateDialogDefault(hdlg);
+ OldAuthReqEditProc = SetWindowLongPtr(GetDlgItem(hdlg, IDC_REASON), GWLP_WNDPROC, (LONG_PTR)AuthReqEditSubclassProc);
+ SendDlgItemMessage(hdlg, IDC_REASON, EM_LIMITTEXT, (WPARAM)255, 0);
+ SetDlgItemText(hdlg, IDC_REASON, TranslateT("Please authorize me to add you to my contact list."));
+ hcontact=(HANDLE)lparam;
+ break;
+
+ case WM_COMMAND:
+ switch(LOWORD(wparam)) {
+ case IDOK:
+ {
+ char szReason[256] = {0};
+#ifdef _UNICODE
+ WCHAR wszReason[256] = {0};
+
+ if (CallService(MS_SYSTEM_GETVERSION, 0, 0) < 0x00090007)
+ {
+ GetDlgItemTextA(hdlg,IDC_REASON,szReason,255);
+ CallContactService(hcontact,PSS_AUTHREQUEST,0,(LPARAM)szReason);
+ }
+ else
+ {
+ GetDlgItemText(hdlg,IDC_REASON,wszReason,255);
+ CallContactService(hcontact,PSS_AUTHREQUESTW,0,(LPARAM)wszReason);
+ }
+#else
+ GetDlgItemTextA(hdlg,IDC_REASON,szReason,255);
+ CallContactService(hcontact,PSS_AUTHREQUEST,0,(LPARAM)szReason);
+#endif
+ } // fall through
+ case IDCANCEL:
+ DestroyWindow(hdlg);
+ break;
+ }
+ break;
+ }
+
+ return 0;
+}
+
+BOOL isVisSupport(HANDLE hContact)
+{
+ char *szProto=(char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,(WPARAM)hContact,0);
+ if(szProto==NULL) return 0;
+ return CallProtoService(szProto,PS_GETCAPS,PFLAGNUM_1,0)&PF1_INVISLIST;
+}
+
+BOOL isInvSupport(HANDLE hContact)
+{
+ char *szProto=(char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,(WPARAM)hContact,0);
+ if(szProto==NULL) return 0;
+ return CallProtoService(szProto,PS_GETCAPS,PFLAGNUM_1,0)&PF1_VISLIST;
+}
+
+BOOL isProtoOnline(char *szProto)
+{
+//#ifdef _DEBUG
+// return TRUE;
+//#else
+ DWORD protoStatus;
+ protoStatus = CallProtoService(szProto,PS_GETSTATUS,0,0);
+ return (protoStatus > ID_STATUS_OFFLINE && protoStatus < ID_STATUS_IDLE);
+
+//#endif
+}
+
+INT_PTR onSendAuthRequest(WPARAM wparam,LPARAM lparam)
+{
+ DWORD flags;
+ char *szProto;
+
+ szProto=(char *)CallService(MS_PROTO_GETCONTACTBASEPROTO,wparam,0);
+
+ flags=CallProtoService(szProto,PS_GETCAPS,PFLAGNUM_4,0);
+ if (flags&PF4_NOCUSTOMAUTH)
+ CallContactService((HANDLE)wparam,PSS_AUTHREQUEST,0, (LPARAM)"");
+ else
+ CreateDialogParam(hinstance,MAKEINTRESOURCE(IDD_AUTHREQ),(HWND)CallService(MS_CLUI_GETHWND,0,0),AuthReqWndProc,(LPARAM)wparam);
+
+ return 0;
+}
+
+INT_PTR onSendAdded(WPARAM wparam,LPARAM lparam)
+{
+ CallContactService((HANDLE)wparam,PSS_ADDED,0,0);
+ return 0;
+}
+
+// set the invisible-flag in db
+INT_PTR onSetInvis(WPARAM wparam,LPARAM lparam)
+{
+ CallContactService((HANDLE)wparam,PSS_SETAPPARENTMODE,(DBGetContactSettingWord((HANDLE)wparam,(const char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,wparam,0),"ApparentMode",0)==ID_STATUS_OFFLINE)?0:ID_STATUS_OFFLINE,0);
+ return 0;
+}
+
+// set visible-flag in db
+INT_PTR onSetVis(WPARAM wparam,LPARAM lparam)
+{
+ CallContactService((HANDLE)wparam,PSS_SETAPPARENTMODE,(DBGetContactSettingWord((HANDLE)wparam,(const char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,wparam,0),"ApparentMode",0)==ID_STATUS_ONLINE)?0:ID_STATUS_ONLINE,0);
+ return 0;
+}
+
+INT_PTR onHide(WPARAM wparam,LPARAM lparam)
+{
+ DBWriteContactSettingByte((HANDLE)wparam,"CList","Hidden",(byte)!DBGetContactSettingByte((HANDLE)wparam,"CList","Hidden",0));
+ CallService(MS_CLUI_SORTLIST,0,0);
+ return 0;
+}
+
+void ShowItem(CLISTMENUITEM *cli, HANDLE hmenu)
+{
+ cli->flags=CMIM_FLAGS | CMIF_TCHAR;
+ CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenu,(LPARAM)cli);
+}
+
+void HideItem(CLISTMENUITEM *cli,HANDLE hmenu)
+{
+ cli->flags|=CMIF_HIDDEN;
+ CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenu,(LPARAM)cli);
+}
+
+// following 4 functions should be self-explanatory
+void ModifyVisibleSet(CLISTMENUITEM *cli,int mode,BOOL alpha)
+{
+ cli->flags |= CMIM_ICON;
+ cli->hIcon = (mode) ? hIcon[1] : (alpha?hIcon[3] : LoadSkinnedIcon(SKINICON_OTHER_SMALLDOT));
+ CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hmenuVis, (LPARAM)cli);
+}
+
+void ModifyInvisSet(CLISTMENUITEM *cli,int mode,BOOL alpha)
+{
+ cli->flags |= CMIM_ICON;
+ cli->hIcon = (mode) ? hIcon[2] : (alpha ? hIcon[4] : LoadSkinnedIcon(SKINICON_OTHER_SMALLDOT));
+ CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hmenuOff, (LPARAM)cli);
+}
+
+void ModifyHidden(CLISTMENUITEM *cli,int mode)
+{
+ cli->flags |= CMIM_ICON | CMIM_NAME;
+ cli->hIcon = (mode) ?
+ (HICON)CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_showil") :
+ (HICON)CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_hidefl");
+ cli->ptszName = mode ? LPGENT("Show in list") : LPGENT("Hide from list");
+ CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hmenuHide, (LPARAM)cli);
+}
+
+void ModifyCopyID(CLISTMENUITEM *cli, HANDLE hContact, BOOL bShowID, BOOL bTrimID)
+{
+ LPSTR szProto;
+ char szID[256];
+ TCHAR buffer[256];
+ HICON hIconCID;
+ HANDLE hC;
+
+ cli->flags|=CMIM_ICON|CMIM_NAME;
+
+ if(isMetaContact(hContact)) {
+ hC = getMostOnline(hContact);
+ if( !hContact ) hC = getDefaultContact(hContact);
+ hContact = hC;
+ }
+
+ szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ if(!szProto) {
+ HideItem(cli,hmenuCopyID);
+ return;
+ }
+ hIconCID = (HICON) CallProtoService(szProto, PS_LOADICON, PLI_PROTOCOL|PLIF_SMALL, 0);
+ cli->hIcon = BindOverlayIcon(hIconCID, "miex_copyid");
+ DestroyIcon(hIconCID);
+ hIconCID = cli->hIcon;
+
+ GetID(hContact,szProto,(LPSTR)&szID);
+ if(szID[0])
+ {
+ if (bShowID)
+ {
+ TCHAR* tmp;
+
+ if (bTrimID && (strlen(szID) > MAX_IDLEN))
+ {
+ szID[MAX_IDLEN - 2] = szID[MAX_IDLEN - 1] = szID[MAX_IDLEN] = '.';
+ szID[MAX_IDLEN + 1] = 0;
+ }
+ tmp = mir_a2t(szID);
+ mir_sntprintf(buffer, SIZEOF(buffer), _T("%s [%s]"), TranslateT("Copy ID"), tmp);
+ mir_free(tmp);
+
+ cli->ptszName = (TCHAR*)&buffer;
+ }
+ else
+ cli->ptszName = _T("Copy ID");
+ }
+ else {
+ cli->flags=CMIM_FLAGS|CMIF_HIDDEN;
+ }
+ CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenuCopyID,(LPARAM)cli);
+ DestroyIcon(hIconCID);
+}
+
+void ModifyStatusMsg(CLISTMENUITEM *cli,HANDLE hContact)
+{
+ LPSTR szProto;
+ HICON hIconSMsg;
+
+ cli->flags|=CMIM_ICON;
+
+ szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ if(!szProto) {
+ HideItem(cli,hmenuStatusMsg);
+ return;
+ }
+
+ hIconSMsg = (HICON) CallProtoService(szProto, PS_LOADICON, PLI_PROTOCOL|PLIF_SMALL, 0);
+ cli->hIcon = BindOverlayIcon(hIconSMsg, (StatusMsgExists(hContact)&2) ? "miex_copysm2" : "miex_copysm1");
+ DestroyIcon(hIconSMsg);
+ hIconSMsg = cli->hIcon;
+
+ CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenuStatusMsg,(LPARAM)cli);
+ DestroyIcon(hIconSMsg);
+}
+
+void ModifyCopyIP(CLISTMENUITEM *cli,HANDLE hContact)
+{
+ LPSTR szProto;
+ HICON hIconCIP;
+
+ cli->flags |= CMIM_ICON;
+
+ szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0);
+ if(!szProto) {
+ HideItem(cli,hmenuCopyIP);
+ return;
+ }
+
+ hIconCIP = (HICON) CallProtoService(szProto, PS_LOADICON, PLI_PROTOCOL|PLIF_SMALL, 0);
+
+ cli->hIcon = BindOverlayIcon(hIconCIP, "miex_copyip");
+ DestroyIcon(hIconCIP);
+ hIconCIP = cli->hIcon;
+
+ CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenuCopyIP,(LPARAM)cli);
+ DestroyIcon(hIconCIP);
+}
+
+void ModifyCopyMirVer(CLISTMENUITEM *cli,HANDLE hContact)
+{
+ LPSTR msg;
+ cli->flags|=CMIM_ICON;
+ cli->hIcon=NULL;
+ if(ServiceExists(MS_FP_GETCLIENTICON)) {
+ msg = getMirVer(hContact);
+ if(msg) {
+ cli->hIcon = (HICON)CallService(MS_FP_GETCLIENTICON,(WPARAM)msg,(LPARAM)1);
+ mir_free(msg);
+ }
+ }
+ if(!cli->hIcon) cli->hIcon = hIcon[0];
+ CallService(MS_CLIST_MODIFYMENUITEM,(WPARAM)hmenuCopyMirVer,(LPARAM)cli);
+}
+
+INT_PTR onCopyID(WPARAM wparam,LPARAM lparam)
+{
+ LPSTR szProto;
+ char szID[128] = {0}, buffer[256] = {0};
+ HANDLE hContact ,hC;
+ PROTOACCOUNT* pa;
+
+ hContact = (HANDLE)wparam;
+ if(isMetaContact(hContact)) {
+ hC = getMostOnline(hContact);
+ if( !hContact ) hC = getDefaultContact(hContact);
+ hContact = hC;
+ }
+ if ((szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0)) == NULL)
+ return 0;
+
+ GetID(hContact,szProto,(LPSTR)&szID);
+
+ if(DBGetContactSettingWord(NULL,VISPLG,"flags",vf_default)&VF_CIDN) {
+ if (bMir_08)
+ pa = (PROTOACCOUNT*)CallService(MS_PROTO_GETACCOUNT, 0, (LPARAM)szProto);
+
+ if (bMir_08 && !pa->bOldProto)
+ mir_snprintf(buffer, SIZEOF(buffer), "%s: %s", pa->szProtoName, szID);
+ else
+ mir_snprintf(buffer, SIZEOF(buffer), "%s: %s", szProto, szID);
+ }
+ else
+ strcpy(buffer, szID);
+
+ CopyToClipboard((HWND)lparam, buffer, 0);
+ if(CTRL_IS_PRESSED && ServiceExists(MS_POPUP_ADDPOPUP))
+ ShowPopup(buffer, 0, hContact);
+
+ return 0;
+}
+
+INT_PTR onCopyStatusMsg(WPARAM wparam,LPARAM lparam)
+{
+ LPSTR module;
+ LPTSTR msg;
+ char par[32];
+ TCHAR buffer[2048];
+ int i;
+ WORD flags=DBGetContactSettingWord(NULL,VISPLG,"flags",vf_default);
+
+ module = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, wparam, 0);
+ if(!module) return 0;
+
+ buffer[0]=0;
+ for(i = 0; i < SIZEOF(statusMsg); i++) {
+ if (statusMsg[i].flag & 8)
+ mir_snprintf(par, SIZEOF(par), "%s/%s", module, statusMsg[i].name);
+ else
+ strcpy(par, statusMsg[i].name);
+
+ msg = DBGetStringT((HANDLE)wparam, (statusMsg[i].module) ? statusMsg[i].module : module, par);
+ if(msg)
+ {
+ if(_tcsclen(msg))
+ {
+ if (flags&VF_SMNAME)
+ {
+ _tcsncat (buffer, TranslateTS(statusMsg[i].fullName), (SIZEOF(buffer) - _tcsclen(buffer) - 1));
+ _tcsncat (buffer, _T(": "), (SIZEOF(buffer) - _tcsclen(buffer) - 1));
+ }
+ _tcsncat(buffer, msg, (SIZEOF(buffer) - _tcsclen(buffer) - 1));
+ _tcsncat(buffer, _T("\r\n"), (SIZEOF(buffer) - _tcsclen(buffer) - 1));
+ }
+ mir_free(msg);
+ }
+ }
+
+ CopyToClipboard((HWND)lparam, 0, buffer);
+ if(CTRL_IS_PRESSED && ServiceExists(MS_POPUP_ADDPOPUP))
+ ShowPopup(0, buffer, (HANDLE)wparam);
+
+ return 0;
+}
+
+INT_PTR onCopyIP(WPARAM wparam,LPARAM lparam)
+{
+ LPSTR szProto;
+ char szIP[128];
+
+ szProto = (LPSTR) CallService(MS_PROTO_GETCONTACTBASEPROTO, wparam, 0);
+ getIP((HANDLE)wparam,szProto,(LPSTR)&szIP);
+
+ CopyToClipboard((HWND)lparam, szIP, 0);
+ if(CTRL_IS_PRESSED && ServiceExists(MS_POPUP_ADDPOPUP))
+ ShowPopup(szIP, 0, (HANDLE)wparam);
+
+ return 0;
+}
+
+INT_PTR onCopyMirVer(WPARAM wparam,LPARAM lparam)
+{
+ LPSTR msg = getMirVer((HANDLE)wparam);
+ if(msg) {
+ CopyToClipboard((HWND)lparam, msg, 0);
+ if(CTRL_IS_PRESSED && ServiceExists(MS_POPUP_ADDPOPUP))
+ ShowPopup(msg, 0, (HANDLE)wparam);
+
+ mir_free(msg);
+ }
+ return 0;
+}
+
+INT_PTR onRecvFiles(WPARAM wparam,LPARAM lparam)
+{
+ char path[MAX_PATH];
+ CallService(MS_FILE_GETRECEIVEDFILESFOLDER, wparam, (LPARAM)&path);
+ ShellExecuteA(0, "open", path, 0, 0, SW_SHOW);
+ return 0;
+}
+
+INT_PTR onChangeProto(WPARAM wparam,LPARAM lparam)
+{
+ HANDLE hContact, hContactNew;
+
+ hContact = (HANDLE)wparam;
+ if (!strcmp((char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, wparam, 0), (char*)lparam))
+ return 0;
+
+ if (CTRL_IS_PRESSED)
+ {
+ hContactNew = hContact;
+ RenameDbProto(hContact, hContactNew, (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0), (char*)lparam, 1);
+ CallService(MS_PROTO_REMOVEFROMCONTACT, (WPARAM)hContact, CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0));
+ CallService(MS_PROTO_ADDTOCONTACT, (WPARAM)hContactNew, lparam);
+ }
+ else
+ {
+ hContactNew = (HANDLE)CallService(MS_DB_CONTACT_ADD, 0, 0);
+ if (hContactNew)
+ {
+ CallService(MS_PROTO_ADDTOCONTACT, (WPARAM)hContactNew, lparam);
+ RenameDbProto(hContact, hContactNew, (char*)CallService(MS_PROTO_GETCONTACTBASEPROTO, (WPARAM)hContact, 0), (char*)lparam, 0);
+ RenameDbProto(hContact, hContactNew, "CList", "CList", 0);
+ }
+ else
+ return 0;
+ }
+ if(MessageBox(NULL,(LPCTSTR)TranslateT("Do you want to send authorization request\nto new contact?"),
+ TranslateT("Miranda IM"), MB_OKCANCEL | MB_SETFOREGROUND | MB_TOPMOST) == IDOK)
+
+ onSendAuthRequest((WPARAM)hContactNew, 0);
+
+ return 0;
+}
+
+int isIgnored(HANDLE hContact, int type)
+{
+ int i = 0, all = 0;
+ if (type == IGNOREEVENT_ALL)
+ {
+ for (i = 1; i < SIZEOF(ii); i++)
+ {
+ if (isIgnored(hContact, ii[i].type))
+ all++;
+ }
+ return (all == SIZEOF(ii) - 1) ? 1 : 0; // ignoring all or not
+ }
+ else
+ return CallService(MS_IGNORE_ISIGNORED, (WPARAM)hContact, (LPARAM)type);
+}
+
+INT_PTR onIgnore(WPARAM wparam,LPARAM lparam)
+{
+ CallService(isIgnored((HANDLE)wparam, lparam) ? MS_IGNORE_UNIGNORE : MS_IGNORE_IGNORE, wparam, lparam);
+ return 0;
+}
+
+static HANDLE AddSubmenuItem(HANDLE hRoot, TCHAR* name, HICON icon, DWORD flag, char* service, int pos, int param)
+{
+ CLISTMENUITEM mi = { 0 };
+ mi.cbSize = sizeof(mi);
+ mi.hParentMenu = hRoot;
+ mi.pszPopupName = (char*)hRoot; // for Miranda 0.7
+ mi.popupPosition = param;
+ mi.position = pos;
+ mi.ptszName = name;
+ mi.hIcon = icon;
+ mi.flags = CMIF_TCHAR | CMIF_CHILDPOPUP;
+ if (flag)
+ mi.flags |= flag;
+ mi.pszService = service;
+ return ( HANDLE )CallService(MS_CLIST_ADDCONTACTMENUITEM, param, (LPARAM)&mi);
+}
+
+static void ModifySubmenuItem(HANDLE hItem, TCHAR* name, int checked, int hidden)
+{
+ CLISTMENUITEM mi = { 0 };
+ mi.cbSize = sizeof(mi);
+ mi.ptszName = name;
+ mi.flags = CMIM_FLAGS | CMIF_TCHAR;
+ if ( checked )
+ mi.flags |= CMIF_CHECKED;
+ if ( hidden )
+ mi.flags |= CMIF_HIDDEN;
+ CallService(MS_CLIST_MODIFYMENUITEM, (WPARAM)hItem, (LPARAM)&mi);
+}
+
+// called when the contact-menu is built
+int BuildMenu(WPARAM wparam,LPARAM lparam)
+{
+ CLISTMENUITEM miAV={0},miNV,miHFL,miIGN,miPROTO,miADD,miREQ,miCID,miRECV,miSTAT,miCIP,miCMV;
+ WORD flags=DBGetContactSettingWord(NULL,VISPLG,"flags",vf_default);
+ int i = 0, j = 0, check = 0, all = 0, hide = 0;
+ BOOL bIsOnline = FALSE, bShowAll = CTRL_IS_PRESSED;
+ PROTOACCOUNT* pa;
+ char* pszProto;
+ pszProto = (LPSTR)CallService(MS_PROTO_GETCONTACTBASEPROTO, wparam, 0);
+ if(bMir_08)
+ pa = (PROTOACCOUNT*)CallService(MS_PROTO_GETACCOUNT, 0, (LPARAM)pszProto);
+
+ bIsOnline = isProtoOnline(pszProto);
+
+ miAV.cbSize=sizeof(CLISTMENUITEM);
+ miAV.flags=CMIM_FLAGS | CMIF_TCHAR;
+ miAV.hIcon=NULL;
+ miAV.pszContactOwner=NULL;
+ miNV=miHFL=miIGN=miPROTO=miADD=miREQ=miCID=miRECV=miSTAT=miCIP=miCMV=miAV;
+
+ if(bShowAll || flags&VF_VS) {
+ ShowItem(&miAV,hmenuVis);
+ ShowItem(&miNV,hmenuOff);
+ }
+ else {
+ HideItem(&miAV,hmenuVis);
+ HideItem(&miNV,hmenuOff);
+ }
+
+ if(bShowAll || flags&VF_HFL){
+ ShowItem(&miHFL,hmenuHide);
+ ModifyHidden(&miHFL,DBGetContactSettingByte((HANDLE)wparam,"CList","Hidden",0));
+ }
+ else HideItem(&miHFL,hmenuHide);
+
+ if(bShowAll || flags&VF_IGN)
+ {
+ ShowItem(&miIGN,hmenuIgnore);
+ for (i = 1; i < SIZEOF(ii); i++)
+ {
+ check = isIgnored((HANDLE)wparam, ii[i].type);
+ if (check)
+ all++;
+ ModifySubmenuItem(hIgnoreItem[i], ii[i].name, check, 0);
+
+ if (all == SIZEOF(ii) - 1) // ignor all
+ check = 1;
+ else
+ check = 0;
+ ModifySubmenuItem(hIgnoreItem[0], ii[i].name, check, 0);
+ }
+ }
+
+ else HideItem(&miIGN,hmenuIgnore);
+
+ if(bMir_08 && pa && (bShowAll || flags&VF_PROTO))
+ {
+ for (i = 0; i < protoCount; i++)
+ {
+ if ((!accs[i]->bIsEnabled) || (strcmp(pa->szProtoName, accs[i]->szProtoName)))
+ hide = 1;
+ else
+ {
+ hide = 0;
+ j++;
+ }
+
+ if (CallService(MS_PROTO_ISPROTOONCONTACT, wparam, (LPARAM)accs[i]->szModuleName))
+ check = 1;
+ else
+ check = 0;
+
+ ModifySubmenuItem(hProtoItem[i], accs[i]->tszAccountName, check, hide);
+ }
+ if (j > 1)
+ ShowItem(&miPROTO,hmenuProto);
+ else
+ HideItem(&miPROTO,hmenuProto);
+ }
+ else HideItem(&miPROTO,hmenuProto);
+
+ if((bShowAll || flags & VF_ADD) && bIsOnline && (bMir_08 ? IsAccountEnabled( pa ) : TRUE))
+ ShowItem(&miADD,hmenuAdded);
+ else
+ HideItem(&miADD,hmenuAdded);
+
+ if((bShowAll || flags & VF_REQ) && bIsOnline && (bMir_08 ? IsAccountEnabled( pa ) : TRUE))
+ ShowItem(&miREQ,hmenuAuthReq);
+ else
+ HideItem(&miREQ,hmenuAuthReq);
+
+ if(bShowAll || flags&VF_CID){
+ ShowItem(&miCID,hmenuCopyID);
+ ModifyCopyID(&miCID,(HANDLE)wparam, flags&VF_SHOWID, flags&VF_TRIMID);
+ }
+ else HideItem(&miCID,hmenuCopyID);
+
+ if((bShowAll || flags&VF_RECV) && DirectoryExists((HANDLE)wparam)) ShowItem(&miRECV,hmenuRecvFiles);
+ else HideItem(&miRECV,hmenuRecvFiles);
+
+ if((bShowAll || flags&VF_STAT) && StatusMsgExists((HANDLE)wparam)){
+ ShowItem(&miSTAT,hmenuStatusMsg);
+ ModifyStatusMsg(&miSTAT,(HANDLE)wparam);
+ }
+ else HideItem(&miSTAT,hmenuStatusMsg);
+
+ if((bShowAll || flags&VF_CIP) && IPExists((HANDLE)wparam)){
+ ShowItem(&miCIP,hmenuCopyIP);
+ ModifyCopyIP(&miCIP,(HANDLE)wparam);
+ }
+ else HideItem(&miCIP,hmenuCopyIP);
+
+ if((bShowAll || flags&VF_CMV) && MirVerExists((HANDLE)wparam)){
+ ShowItem(&miCMV,hmenuCopyMirVer);
+ ModifyCopyMirVer(&miCMV,(HANDLE)wparam);
+ }
+ else HideItem(&miCMV,hmenuCopyMirVer);
+
+ if(bShowAll || (flags&VF_VS))
+ {
+ int apparent=DBGetContactSettingWord((HANDLE)wparam,(const char*)CallService(MS_PROTO_GETCONTACTBASEPROTO,wparam,0),"ApparentMode",0);
+ if(isVisSupport((HANDLE)wparam)) ModifyVisibleSet(&miAV,apparent==ID_STATUS_ONLINE,flags&VF_SAI);
+ else HideItem(&miAV,hmenuVis);
+ if(isInvSupport((HANDLE)wparam)) ModifyInvisSet(&miNV,apparent==ID_STATUS_OFFLINE,flags&VF_SAI);
+ else HideItem(&miAV,hmenuOff);
+ }
+ return 0;
+}
+
+int EnumProtoSubmenu(WPARAM wparam, LPARAM lparam)
+{
+ int i;
+ int pos = 1000;
+ if (protoCount) // remove old items
+ {
+ for (i = 0; i < protoCount; i++)
+ {
+ if (hProtoItem[i])
+ {
+ CallService(MS_CLIST_REMOVECONTACTMENUITEM, (WPARAM)hProtoItem[i], 0);
+ hProtoItem[i] = 0;
+ }
+ }
+ }
+ CallService( MS_PROTO_ENUMACCOUNTS, (WPARAM)&protoCount, (LPARAM)&accs);
+ if (protoCount > MAX_PROTOS)
+ protoCount = MAX_PROTOS;
+ for (i = 0; i < protoCount; i++)
+ {
+ hProtoItem[i] = AddSubmenuItem((HGENMENU)hmenuProto, accs[i]->tszAccountName,
+ LoadSkinnedProtoIcon(accs[i]->szModuleName, ID_STATUS_ONLINE), CMIF_KEEPUNTRANSLATED,
+ MS_PROTO, pos++, (int)accs[i]->szModuleName);
+ }
+ return 0;
+}
+
+// Tabsrmm toolbar support
+static int TabsrmmButtonPressed(WPARAM wParam, LPARAM lParam)
+{
+ CustomButtonClickData *cbcd=(CustomButtonClickData *)lParam;
+
+ if(!strcmp(cbcd->pszModule, MODULENAME) && cbcd->dwButtonId == 0)
+ onRecvFiles(wParam, 0);
+
+ return 0;
+}
+
+static int TabsrmmButtonsInit(WPARAM wParam, LPARAM lParam)
+{
+ BBButton bbd = {0};
+
+ bbd.cbSize = sizeof(BBButton);
+ bbd.pszModuleName = MODULENAME;
+ bbd.dwButtonID = 0;
+ bbd.dwDefPos = 1000;
+ bbd.ptszTooltip = _T("Browse Received Files");
+ bbd.bbbFlags = BBBF_ISLSIDEBUTTON | BBBF_CANBEHIDDEN;
+ bbd.hIcon = (HANDLE)CallService(MS_SKIN2_GETICONHANDLE, 0, (LPARAM)"miex_recfiles");
+ CallService (MS_BB_ADDBUTTON, 0, (LPARAM)&bbd);
+
+ return 0;
+}
+
+static void TabsrmmButtonsModify(HANDLE hContact)
+{
+ if (!DirectoryExists(hContact))
+ {
+ BBButton bbd = {0};
+ bbd.cbSize = sizeof(BBButton);
+ bbd.dwButtonID = 0;
+ bbd.pszModuleName = MODULENAME;
+ bbd.bbbFlags = BBSF_DISABLED | BBSF_HIDDEN;
+ CallService(MS_BB_SETBUTTONSTATE, (WPARAM)hContact, (LPARAM)&bbd);
+ }
+}
+
+static int ContactWindowOpen(WPARAM wparam,LPARAM lParam)
+{
+ MessageWindowEventData *MWeventdata = (MessageWindowEventData*)lParam;
+
+ if(MWeventdata->uType == MSG_WINDOW_EVT_OPENING && MWeventdata->hContact)
+ {
+ TabsrmmButtonsModify(MWeventdata->hContact);
+ }
+ return 0;
+}
+
+// called when all modules are loaded
+static int PluginInit(WPARAM wparam,LPARAM lparam)
+{
+ int pos = 1000, i = 0;
+
+ CLISTMENUITEM mi;
+
+ IconsInit();
+
+ bMetaContacts = ServiceExists(MS_MC_GETMETACONTACT)!=0;
+ bMir_08 = ServiceExists(MS_PROTO_GETACCOUNT)!=0;
+
+ hServices[0] = CreateServiceFunction(MS_SETINVIS,onSetInvis);
+ hServices[1] = CreateServiceFunction(MS_SETVIS,onSetVis);
+ hServices[2] = CreateServiceFunction(MS_HIDE,onHide);
+ hServices[3] = CreateServiceFunction(MS_IGNORE,onIgnore);
+ if (bMir_08)
+ hServices[4] = CreateServiceFunction(MS_PROTO,onChangeProto);
+ hServices[5] = CreateServiceFunction(MS_ADDED,onSendAdded);
+ hServices[6] = CreateServiceFunction(MS_AUTHREQ,onSendAuthRequest);
+ hServices[7] = CreateServiceFunction(MS_COPYID,onCopyID);
+ hServices[8] = CreateServiceFunction(MS_RECVFILES,onRecvFiles);
+ hServices[9] = CreateServiceFunction(MS_STATUSMSG,onCopyStatusMsg);
+ hServices[10] = CreateServiceFunction(MS_COPYIP,onCopyIP);
+ hServices[11] = CreateServiceFunction(MS_COPYMIRVER,onCopyMirVer);
+
+ mi.cbSize=sizeof(CLISTMENUITEM);
+ mi.flags = CMIF_TCHAR;
+ mi.hIcon=NULL;
+ mi.pszContactOwner=NULL;
+
+ mi.position=120000;
+ mi.ptszName=LPGENT("Always visible");
+ mi.pszService=MS_SETVIS;
+ hmenuVis=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi);
+
+ mi.position++;
+ mi.ptszName=LPGENT("Never visible");
+ mi.pszService=MS_SETINVIS;
+ hmenuOff=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi);
+
+ mi.position++;
+ mi.ptszName=NULL;
+ mi.pszService=MS_HIDE;
+ hmenuHide=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi);
+
+ mi.position++;
+ mi.pszPopupName = (char*)-1; // for Miranda 0.7
+ mi.ptszName=LPGENT("Ignore");
+ mi.pszService = 0;
+ mi.flags |= CMIF_ROOTHANDLE;
+ mi.hIcon=(HICON)CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_ignore" );
+ hmenuIgnore=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi);
+
+ hIgnoreItem[0] = AddSubmenuItem(hmenuIgnore, ii[0].name, LoadSkinnedIcon(ii[0].icon), 0, MS_IGNORE, pos, ii[0].type );
+ pos += 100000; // insert separator
+ for (i = 1; i < SIZEOF(ii); i++)
+ {
+ hIgnoreItem[i] = AddSubmenuItem(hmenuIgnore, ii[i].name, LoadSkinnedIcon(ii[i].icon), 0, MS_IGNORE, pos++, ii[i].type );
+ }
+ pos += 100000; // insert separator
+ ood.cbSize = sizeof(ood);
+ ood.pszGroup = "Events";
+ ood.pszPage = "Ignore";
+ AddSubmenuItem(hmenuIgnore, LPGENT("Open ignore settings"), (HICON)CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_ignore"), 0, MS_OPT_OPENOPTIONS, pos, (int)&ood );
+
+ mi.pszPopupName = 0;
+ if (bMir_08)
+ {
+ mi.position++;
+ mi.ptszName=LPGENT("Copy to Account");
+ mi.pszService=MS_PROTO;
+ mi.hIcon=( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_protocol");
+ hmenuProto=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi);
+
+ EnumProtoSubmenu(0, 0);
+ }
+
+ mi.flags = CMIF_TCHAR;
+
+ mi.position++;
+ mi.ptszName=LPGENT("Send 'You were added'");
+ mi.pszService=MS_ADDED;
+ mi.hIcon=( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_added");
+ hmenuAdded=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi);
+
+ mi.position++;
+ mi.ptszName=LPGENT("Request authorization");
+ mi.pszService=MS_AUTHREQ;
+ mi.hIcon=( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_authorization");
+ hmenuAuthReq=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi);
+
+ mi.position++;
+ mi.ptszName=LPGENT("Copy ID");
+ mi.pszService=MS_COPYID;
+ hmenuCopyID=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi);
+
+ mi.position++;
+ mi.ptszName=LPGENT("Browse Received Files");
+ mi.pszService=MS_RECVFILES;
+ mi.hIcon=( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_recfiles");
+ hmenuRecvFiles=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi);
+
+ mi.position++;
+ mi.ptszName=LPGENT("Copy Status Message");
+ mi.pszService=MS_STATUSMSG;
+ mi.hIcon=NULL;//LoadIcon(hinstance, MAKEINTRESOURCE(IDI_ICON5));
+ hmenuStatusMsg=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi);
+
+ mi.position++;
+ mi.ptszName=LPGENT("Copy IP");
+ mi.pszService=MS_COPYIP;
+ hmenuCopyIP=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi);
+
+ mi.position++;
+ mi.ptszName=LPGENT("Copy MirVer");
+ mi.pszService=MS_COPYMIRVER;
+ hmenuCopyMirVer=(HANDLE)CallService(MS_CLIST_ADDCONTACTMENUITEM,0,(LPARAM)&mi);
+
+ hIcon[0] = ( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_copymver");
+ hIcon[1] = ( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_vis");
+ hIcon[2] = ( HICON )CallService( MS_SKIN2_GETICON, 0, (LPARAM)"miex_invis");
+ hIcon[3] = MakeHalfAlphaIcon(hIcon[1]);
+ hIcon[4] = MakeHalfAlphaIcon(hIcon[2]);
+
+ hHooks[0] = HookEvent(ME_CLIST_PREBUILDCONTACTMENU,BuildMenu);
+ hHooks[1] = HookEvent(ME_OPT_INITIALISE,OptionsInit);
+ if (bMir_08)
+ hHooks[2] = HookEvent(ME_PROTO_ACCLISTCHANGED, EnumProtoSubmenu);
+ hHooks[3] = HookEvent(ME_MSG_TOOLBARLOADED, TabsrmmButtonsInit);
+ if (hHooks[3])
+ {
+ hHooks[4] = HookEvent(ME_MSG_BUTTONPRESSED, TabsrmmButtonPressed);
+ hHooks[5] = HookEvent(ME_MSG_WINDOWEVENT,ContactWindowOpen);
+ }
+
+ // updater plugin support
+ if(ServiceExists(MS_UPDATE_REGISTERFL)) {
+ CallService(MS_UPDATE_REGISTERFL, (WPARAM)__PLUGIN_ID, (LPARAM)&pluginInfoEx);
+ }
+ return 0;
+}
+
+__declspec(dllexport) PLUGININFOEX* MirandaPluginInfoEx(DWORD mirandaVersion)
+{
+ return &pluginInfoEx;
+}
+
+
+__declspec(dllexport) MUUID* MirandaPluginInterfaces(void) {
+ return interfaces;
+}
+
+__declspec(dllexport)int Load(PLUGINLINK *link)
+{
+ pluginLink=link;
+ mir_getMMI( &mmi );
+ hHooks[6] = HookEvent(ME_SYSTEM_MODULESLOADED,PluginInit);
+ return 0;
+}
+
+__declspec(dllexport)int Unload(void)
+{
+ int i;
+ for (i = 0; i < SIZEOF(hHooks); i++)
+ {
+ if (hHooks[i])
+ UnhookEvent(hHooks[i]);
+ }
+ for (i = 0; i < SIZEOF(hServices); i++)
+ {
+ if (hServices[i])
+ DestroyServiceFunction(hServices[i]);
+ }
+
+ DestroyIcon( hIcon[3] );
+ DestroyIcon( hIcon[4] );
+ return 0;
+}
+
+BOOL WINAPI DllMain(HINSTANCE hinst,DWORD fdwReason,LPVOID lpvReserved)
+{
+ hinstance=hinst;
+ return 1;
+}
diff --git a/MenuItemEx/menuex.dsp b/MenuItemEx/menuex.dsp
new file mode 100644
index 0000000..72a6292
--- /dev/null
+++ b/MenuItemEx/menuex.dsp
@@ -0,0 +1,131 @@
+# Microsoft Developer Studio Project File - Name="MenuItemEx" - Package Owner=<4>
+# Microsoft Developer Studio Generated Build File, Format Version 6.00
+# ** DO NOT EDIT **
+
+# TARGTYPE "Win32 (x86) Dynamic-Link Library" 0x0102
+
+CFG=MenuItemEx - Win32 Release
+!MESSAGE This is not a valid makefile. To build this project using NMAKE,
+!MESSAGE use the Export Makefile command and run
+!MESSAGE
+!MESSAGE NMAKE /f "menuex.mak".
+!MESSAGE
+!MESSAGE You can specify a configuration when running NMAKE
+!MESSAGE by defining the macro CFG on the command line. For example:
+!MESSAGE
+!MESSAGE NMAKE /f "menuex.mak" CFG="MenuItemEx - Win32 Release"
+!MESSAGE
+!MESSAGE Possible choices for configuration are:
+!MESSAGE
+!MESSAGE "MenuItemEx - Win32 Release" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE "MenuItemEx - Win32 Debug" (based on "Win32 (x86) Dynamic-Link Library")
+!MESSAGE
+
+# Begin Project
+# PROP AllowPerConfigDependencies 0
+# PROP Scc_ProjName ""
+# PROP Scc_LocalPath ""
+CPP=cl.exe
+MTL=midl.exe
+RSC=rc.exe
+
+!IF "$(CFG)" == "MenuItemEx - Win32 Release"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "Release"
+# PROP BASE Intermediate_Dir "Release"
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "Release"
+# PROP Intermediate_Dir "Release"
+# PROP Ignore_Export_Lib 1
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MT /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_WINDOWS" /D "_MBCS" /D "_USRDLL" /D "MP_MenuItemEx_EXPORTS" /YX /FD /c
+# ADD CPP /nologo /MD /W3 /GX /O1 /Ob2 /I "../../include" /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x407 /d "NDEBUG"
+# ADD RSC /l 0x419 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib /nologo /dll /machine:I386
+# ADD LINK32 user32.lib shell32.lib gdi32.lib msimg32.lib /nologo /base:"0x67100000" /dll /map /machine:I386 /filealign:0x200
+# SUBTRACT LINK32 /pdb:none
+
+!ELSEIF "$(CFG)" == "MenuItemEx - Win32 Debug"
+
+# PROP BASE Use_MFC 0
+# PROP BASE Use_Debug_Libraries 0
+# PROP BASE Output_Dir "MenuItemEx___Win32_Debug"
+# PROP BASE Intermediate_Dir "MenuItemEx___Win32_Debug"
+# PROP BASE Ignore_Export_Lib 1
+# PROP BASE Target_Dir ""
+# PROP Use_MFC 0
+# PROP Use_Debug_Libraries 0
+# PROP Output_Dir "release"
+# PROP Intermediate_Dir "debug"
+# PROP Ignore_Export_Lib 0
+# PROP Target_Dir ""
+# ADD BASE CPP /nologo /MD /W3 /Gi /GX /O2 /YX /FD /c
+# ADD CPP /nologo /MD /W3 /Gi /GX /ZI /Od /FR /YX /FD /c
+# ADD BASE MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD MTL /nologo /D "NDEBUG" /mktyplib203 /win32
+# ADD BASE RSC /l 0x417 /d "NDEBUG"
+# ADD RSC /l 0x417 /d "NDEBUG"
+BSC32=bscmake.exe
+# ADD BASE BSC32 /nologo
+# ADD BSC32 /nologo
+LINK32=link.exe
+# ADD BASE LINK32 user32.lib /nologo /base:"0x67100000" /dll /map /machine:I386 /filealign:0x200
+# SUBTRACT BASE LINK32 /pdb:none
+# ADD LINK32 user32.lib /nologo /base:"0x67100000" /dll /incremental:yes /map /debug /machine:I386 /out:"../../debug/menuex.dll" /filealign:0x200
+# SUBTRACT LINK32 /pdb:none
+
+!ENDIF
+
+# Begin Target
+
+# Name "MenuItemEx - Win32 Release"
+# Name "MenuItemEx - Win32 Debug"
+# Begin Group "Source Files"
+
+# PROP Default_Filter "cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+# Begin Source File
+
+SOURCE=.\images.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\main.c
+# End Source File
+# Begin Source File
+
+SOURCE=.\options.c
+# End Source File
+# End Group
+# Begin Group "Header Files"
+
+# PROP Default_Filter "h;hpp;hxx;hm;inl"
+# Begin Source File
+
+SOURCE=.\menuex.h
+# End Source File
+# Begin Source File
+
+SOURCE=.\resource.h
+# End Source File
+# End Group
+# Begin Group "Resource Files"
+
+# PROP Default_Filter "ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+# Begin Source File
+
+SOURCE=.\resource.rc
+# End Source File
+# End Group
+# End Target
+# End Project
diff --git a/MenuItemEx/menuex.dsw b/MenuItemEx/menuex.dsw
new file mode 100644
index 0000000..b2a6bce
--- /dev/null
+++ b/MenuItemEx/menuex.dsw
@@ -0,0 +1,29 @@
+Microsoft Developer Studio Workspace File, Format Version 6.00
+# WARNING: DO NOT EDIT OR DELETE THIS WORKSPACE FILE!
+
+###############################################################################
+
+Project: "MenuItemEx"=.\menuex.dsp - Package Owner=<4>
+
+Package=<5>
+{{{
+}}}
+
+Package=<4>
+{{{
+}}}
+
+###############################################################################
+
+Global:
+
+Package=<5>
+{{{
+}}}
+
+Package=<3>
+{{{
+}}}
+
+###############################################################################
+
diff --git a/MenuItemEx/menuex.h b/MenuItemEx/menuex.h
new file mode 100644
index 0000000..55e0ab5
--- /dev/null
+++ b/MenuItemEx/menuex.h
@@ -0,0 +1,74 @@
+#ifndef MENUEX_H__
+#define MENUEX_H__
+
+#define _CRT_SECURE_NO_DEPRECATE
+#define MIRANDA_VER 0x0700
+
+#include "m_stdhdr.h"
+#include <windows.h>
+#include "resource.h"
+#include <stdio.h>
+#include "newpluginapi.h"
+#include "win2k.h"
+#include "m_system.h"
+#include "m_utils.h"
+#include "m_options.h"
+#include "m_database.h"
+#include "m_langpack.h"
+#include "m_file.h"
+#include "m_clist.h"
+#include "m_protosvc.h"
+#include "m_protomod.h"
+#include "m_clui.h"
+#include "m_ignore.h"
+#include "m_icolib.h"
+#include "m_skin.h"
+#include "m_genmenu.h"
+#include "m_popup.h"
+#include "m_message.h"
+#include "sdk/m_updater.h"
+#include "sdk/m_fingerprint.h"
+#include "sdk/m_metacontacts.h"
+#include "sdk/m_msg_buttonsbar.h"
+
+#pragma optimize("gsy",on)
+
+#define VISPLG "MenuItemEx"
+#define MODULENAME VISPLG
+
+#define MIIM_STRING 0x00000040
+
+extern PLUGINLINK *pluginLink;
+extern PLUGININFO pluginInfo;
+extern PLUGININFOEX pluginInfoEx;
+extern MUUID interfaces[];
+
+int OptionsInit(WPARAM,LPARAM);
+
+#define MAX_PROTOS 32
+#define MAX_GROUPS 32
+#define MAX_IDLEN 16
+
+#define VF_VS 0x0001
+#define VF_SMNAME 0x0002
+#define VF_HFL 0x0004
+#define VF_IGN 0x0008
+#define VF_PROTO 0x0010
+#define VF_SHOWID 0x0020
+#define VF_ADD 0x0040
+#define VF_REQ 0x0080
+#define VF_CID 0x0100
+#define VF_RECV 0x0200
+#define VF_STAT 0x0400
+#define VF_CIDN 0x0800
+#define VF_CIP 0x1000
+#define VF_SAI 0x2000
+#define VF_TRIMID 0x4000
+#define VF_CMV 0x8000
+
+#define CTRL_IS_PRESSED (GetAsyncKeyState(VK_CONTROL)&0x8000)
+
+extern const int vf_default;
+extern BOOL bMir_08;
+
+#endif
diff --git a/MenuItemEx/menuex.rc b/MenuItemEx/menuex.rc
new file mode 100644
index 0000000..2609320
--- /dev/null
+++ b/MenuItemEx/menuex.rc
@@ -0,0 +1,174 @@
+// Microsoft Visual C++ generated resource script.
+//
+#include "resource.h"
+
+#define APSTUDIO_READONLY_SYMBOLS
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 2 resource.
+//
+#include <windows.h>
+
+/////////////////////////////////////////////////////////////////////////////
+#undef APSTUDIO_READONLY_SYMBOLS
+
+/////////////////////////////////////////////////////////////////////////////
+// Neutral resources
+
+#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_NEU)
+#ifdef _WIN32
+LANGUAGE LANG_NEUTRAL, SUBLANG_NEUTRAL
+#pragma code_page(1251)
+#endif //_WIN32
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Icon
+//
+
+// Icon with lowest ID value placed first to ensure application icon
+// remains consistent on all systems.
+IDI_ICON0 ICON "icons\\hide_from_list.ico"
+IDI_ICON1 ICON "icons\\Always Visible.ico"
+IDI_ICON2 ICON "icons\\Never Visible.ico"
+IDI_ICON3 ICON "icons\\copyid_overlay.ico"
+IDI_ICON4 ICON "icons\\auth_added.ico"
+IDI_ICON5 ICON "icons\\auth_ask.ico"
+IDI_ICON6 ICON "icons\\change_proto.ico"
+IDI_ICON7 ICON "icons\\ignore_list.ico"
+IDI_ICON8 ICON "icons\\show_in_list.ico"
+IDI_ICON9 ICON "icons\\msg_status.ico"
+IDI_ICON10 ICON "icons\\msg_xstatus.ico"
+IDI_ICON11 ICON "icons\\copyip_overlay.ico"
+IDI_ICON12 ICON "icons\\recv_files.ico"
+IDI_ICON13 ICON "icons\\CopyMirVer.ico"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Dialog
+//
+
+IDD_AUTHREQ DIALOGEX 0, 0, 186, 95
+STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | DS_CENTER | WS_POPUP |
+ WS_VISIBLE | WS_CAPTION
+CAPTION "Enter an authorization request"
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ DEFPUSHBUTTON "&Send",IDOK,34,74,50,14
+ PUSHBUTTON "&Cancel",IDCANCEL,98,74,50,14
+ EDITTEXT IDC_REASON,7,7,172,59,ES_MULTILINE | ES_AUTOVSCROLL |
+ ES_WANTRETURN
+END
+
+IDD_OPTIONS DIALOGEX 0, 0, 280, 183
+STYLE DS_SETFONT | DS_FIXEDSYS | WS_CHILD | WS_VISIBLE
+EXSTYLE WS_EX_CONTROLPARENT
+FONT 8, "MS Shell Dlg", 0, 0, 0x1
+BEGIN
+ GROUPBOX "Shown menu items",IDC_STATIC,7,7,266,180
+ CONTROL "Visibility",IDC_VIS,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP,16,18,77,10
+ CONTROL "Show alpha icons",IDC_SHOWALPHAICONS,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,162,18,104,10
+ CONTROL "Hide from list",IDC_HIDE,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP,16,30,77,10
+ CONTROL "Ignore",IDC_IGNORE,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP,16,42,159,10
+ CONTROL "Copy to Account (Ctrl+click for move to Account)",
+ IDC_PROTOS,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,16,54,
+ 192,10
+ CONTROL "Send 'You were added'",IDC_ADDED,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,16,66,158,10
+ CONTROL "Request Authorization",IDC_AUTHREQ,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,16,78,157,10
+ CONTROL "Browse Received Files",IDC_RECVFILES,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,16,90,158,10
+ CONTROL "Copy IP",IDC_COPYIP,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP,16,102,157,10
+ CONTROL "Copy MirVer",IDC_COPYMIRVER,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP,16,114,157,10
+ CONTROL "Copy Status Message",IDC_STATUSMSG,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,16,126,144,10
+ CONTROL "Add item name",IDC_SMNAME,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP,162,126,104,10
+ CONTROL "Copy ID",IDC_COPYID,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP,16,138,76,10
+ CONTROL "Add protocol name",IDC_COPYIDNAME,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,162,138,104,10
+ CONTROL "Show ID in menu item",IDC_SHOWID,"Button",
+ BS_AUTOCHECKBOX | WS_TABSTOP,25,150,132,10
+ CONTROL "Trim too long ID",IDC_TRIMID,"Button",BS_AUTOCHECKBOX |
+ WS_TABSTOP,162,150,104,10
+ LTEXT "* Use Ctrl+click to see popup with the copied text",
+ IDC_HINT1,15,164,249,18
+END
+
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// DESIGNINFO
+//
+
+#ifdef APSTUDIO_INVOKED
+GUIDELINES DESIGNINFO
+BEGIN
+ IDD_AUTHREQ, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 179
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 64
+ END
+
+ IDD_OPTIONS, DIALOG
+ BEGIN
+ LEFTMARGIN, 7
+ RIGHTMARGIN, 273
+ TOPMARGIN, 7
+ BOTTOMMARGIN, 177
+ END
+END
+#endif // APSTUDIO_INVOKED
+
+
+#ifdef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// TEXTINCLUDE
+//
+
+1 TEXTINCLUDE
+BEGIN
+ "resource.h\0"
+ "version.rc\0"
+END
+
+2 TEXTINCLUDE
+BEGIN
+ "#include <windows.h>\r\n"
+ "\0"
+END
+
+3 TEXTINCLUDE
+BEGIN
+ "\r\n"
+ "\0"
+END
+
+#endif // APSTUDIO_INVOKED
+
+#endif // Neutral resources
+/////////////////////////////////////////////////////////////////////////////
+
+
+
+#ifndef APSTUDIO_INVOKED
+/////////////////////////////////////////////////////////////////////////////
+//
+// Generated from the TEXTINCLUDE 3 resource.
+//
+
+
+/////////////////////////////////////////////////////////////////////////////
+#endif // not APSTUDIO_INVOKED
+
diff --git a/MenuItemEx/menuex.vcproj b/MenuItemEx/menuex.vcproj
new file mode 100644
index 0000000..9072c7c
--- /dev/null
+++ b/MenuItemEx/menuex.vcproj
@@ -0,0 +1,440 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="7.10"
+ Name="MenuEx"
+ ProjectGUID="{210DD88D-649B-4695-8C5F-898A4F60A8CE}"
+ SccProjectName=""
+ SccLocalPath="">
+ <Platforms>
+ <Platform
+ Name="Win32"/>
+ </Platforms>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ WholeProgramOptimization="TRUE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ GlobalOptimizations="TRUE"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ OmitFramePointers="FALSE"
+ AdditionalIncludeDirectories="../../include"
+ StringPooling="TRUE"
+ ExceptionHandling="FALSE"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="TRUE"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="menuex.h"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalOptions="/filealign:0x200"
+ AdditionalDependencies="vc7to6.lib msimg32.lib"
+ SuppressStartupBanner="TRUE"
+ AdditionalLibraryDirectories="../../lib"
+ IgnoreAllDefaultLibraries="TRUE"
+ GenerateDebugInformation="TRUE"
+ GenerateMapFile="FALSE"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ BaseAddress="0x67100000"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/menuex.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../include"
+ ExceptionHandling="FALSE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="menuex.h"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="msimg32.lib"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ GenerateDebugInformation="TRUE"
+ GenerateMapFile="TRUE"
+ BaseAddress="0x67100000"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\release/menuex.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="1">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../include"
+ ExceptionHandling="FALSE"
+ BasicRuntimeChecks="3"
+ RuntimeLibrary="3"
+ BufferSecurityCheck="TRUE"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="menuex.h"
+ BrowseInformation="1"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="4"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalDependencies="msimg32.lib"
+ LinkIncremental="2"
+ SuppressStartupBanner="TRUE"
+ GenerateDebugInformation="TRUE"
+ GenerateMapFile="TRUE"
+ BaseAddress="0x67100000"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\release/menuex.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="FALSE"
+ CharacterSet="1"
+ WholeProgramOptimization="FALSE">
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ GlobalOptimizations="TRUE"
+ FavorSizeOrSpeed="2"
+ OmitFramePointers="FALSE"
+ OptimizeForProcessor="0"
+ AdditionalIncludeDirectories="../../include"
+ StringPooling="TRUE"
+ ExceptionHandling="FALSE"
+ RuntimeLibrary="2"
+ BufferSecurityCheck="TRUE"
+ UsePrecompiledHeader="3"
+ PrecompiledHeaderThrough="menuex.h"
+ WarningLevel="3"
+ SuppressStartupBanner="TRUE"
+ DebugInformationFormat="3"/>
+ <Tool
+ Name="VCCustomBuildTool"/>
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="TRUE"
+ AdditionalOptions="/filealign:0x200"
+ AdditionalDependencies="vc7to6.lib msimg32.lib"
+ AdditionalLibraryDirectories="../../lib"
+ IgnoreAllDefaultLibraries="TRUE"
+ GenerateDebugInformation="TRUE"
+ GenerateMapFile="FALSE"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ BaseAddress="0x67100000"
+ TargetMachine="1"/>
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="TRUE"
+ SuppressStartupBanner="TRUE"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/menuex.tlb"
+ HeaderFileName=""/>
+ <Tool
+ Name="VCPostBuildEventTool"/>
+ <Tool
+ Name="VCPreBuildEventTool"/>
+ <Tool
+ Name="VCPreLinkEventTool"/>
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"/>
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"/>
+ <Tool
+ Name="VCXMLDataGeneratorTool"/>
+ <Tool
+ Name="VCWebDeploymentTool"/>
+ <Tool
+ Name="VCManagedWrapperGeneratorTool"/>
+ <Tool
+ Name="VCAuxiliaryManagedWrapperGeneratorTool"/>
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat">
+ <File
+ RelativePath=".\images.c">
+ </File>
+ <File
+ RelativePath="main.c">
+ <FileConfiguration
+ Name="Release|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32">
+ <Tool
+ Name="VCCLCompilerTool"
+ UsePrecompiledHeader="1"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="options.c">
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl">
+ <File
+ RelativePath="menuex.h">
+ </File>
+ <File
+ RelativePath="resource.h">
+ </File>
+ <File
+ RelativePath=".\version.h">
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe">
+ <File
+ RelativePath=".\icons\Always Visible.ico">
+ </File>
+ <File
+ RelativePath=".\icons\auth_added.ico">
+ </File>
+ <File
+ RelativePath=".\icons\auth_ask.ico">
+ </File>
+ <File
+ RelativePath=".\icons\change_proto.ico">
+ </File>
+ <File
+ RelativePath=".\icons\CopyID_overlay.ico">
+ </File>
+ <File
+ RelativePath=".\icons\copyip_overlay.ico">
+ </File>
+ <File
+ RelativePath=".\icons\CopyMirVer.ico">
+ </File>
+ <File
+ RelativePath=".\icons\hide_from_list.ico">
+ </File>
+ <File
+ RelativePath=".\icons\Ignore_list.ico">
+ </File>
+ <File
+ RelativePath=".\menuex.rc">
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath=".\icons\msg_status.ico">
+ </File>
+ <File
+ RelativePath=".\icons\msg_xStatus.ico">
+ </File>
+ <File
+ RelativePath=".\icons\Never Visible.ico">
+ </File>
+ <File
+ RelativePath=".\icons\recv_files.ico">
+ </File>
+ <File
+ RelativePath="resource.rc">
+ </File>
+ <File
+ RelativePath=".\icons\show_in_list.ico">
+ </File>
+ <File
+ RelativePath=".\version.rc">
+ <FileConfiguration
+ Name="Release|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ ExcludedFromBuild="TRUE">
+ <Tool
+ Name="VCResourceCompilerTool"/>
+ </FileConfiguration>
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/MenuItemEx/menuex_10.sln b/MenuItemEx/menuex_10.sln
new file mode 100644
index 0000000..03efc10
--- /dev/null
+++ b/MenuItemEx/menuex_10.sln
@@ -0,0 +1,38 @@
+
+Microsoft Visual Studio Solution File, Format Version 11.00
+# Visual C++ Express 2010
+Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "MenuEx", "menuex_10.vcxproj", "{210DD88D-649B-4695-8C5F-898A4F60A8CE}"
+EndProject
+Global
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
+ Debug Unicode|Win32 = Debug Unicode|Win32
+ Debug Unicode|x64 = Debug Unicode|x64
+ Debug|Win32 = Debug|Win32
+ Debug|x64 = Debug|x64
+ Release Unicode|Win32 = Release Unicode|Win32
+ Release Unicode|x64 = Release Unicode|x64
+ Release|Win32 = Release|Win32
+ Release|x64 = Release|x64
+ EndGlobalSection
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
+ {210DD88D-649B-4695-8C5F-898A4F60A8CE}.Debug Unicode|Win32.ActiveCfg = Debug Unicode|Win32
+ {210DD88D-649B-4695-8C5F-898A4F60A8CE}.Debug Unicode|Win32.Build.0 = Debug Unicode|Win32
+ {210DD88D-649B-4695-8C5F-898A4F60A8CE}.Debug Unicode|x64.ActiveCfg = Debug Unicode|x64
+ {210DD88D-649B-4695-8C5F-898A4F60A8CE}.Debug Unicode|x64.Build.0 = Debug Unicode|x64
+ {210DD88D-649B-4695-8C5F-898A4F60A8CE}.Debug|Win32.ActiveCfg = Debug|Win32
+ {210DD88D-649B-4695-8C5F-898A4F60A8CE}.Debug|Win32.Build.0 = Debug|Win32
+ {210DD88D-649B-4695-8C5F-898A4F60A8CE}.Debug|x64.ActiveCfg = Debug|x64
+ {210DD88D-649B-4695-8C5F-898A4F60A8CE}.Debug|x64.Build.0 = Debug|x64
+ {210DD88D-649B-4695-8C5F-898A4F60A8CE}.Release Unicode|Win32.ActiveCfg = Release Unicode|Win32
+ {210DD88D-649B-4695-8C5F-898A4F60A8CE}.Release Unicode|Win32.Build.0 = Release Unicode|Win32
+ {210DD88D-649B-4695-8C5F-898A4F60A8CE}.Release Unicode|x64.ActiveCfg = Release Unicode|x64
+ {210DD88D-649B-4695-8C5F-898A4F60A8CE}.Release Unicode|x64.Build.0 = Release Unicode|x64
+ {210DD88D-649B-4695-8C5F-898A4F60A8CE}.Release|Win32.ActiveCfg = Release|Win32
+ {210DD88D-649B-4695-8C5F-898A4F60A8CE}.Release|Win32.Build.0 = Release|Win32
+ {210DD88D-649B-4695-8C5F-898A4F60A8CE}.Release|x64.ActiveCfg = Release|x64
+ {210DD88D-649B-4695-8C5F-898A4F60A8CE}.Release|x64.Build.0 = Release|x64
+ EndGlobalSection
+ GlobalSection(SolutionProperties) = preSolution
+ HideSolutionNode = FALSE
+ EndGlobalSection
+EndGlobal
diff --git a/MenuItemEx/menuex_10.suo b/MenuItemEx/menuex_10.suo
new file mode 100644
index 0000000..c8749c5
--- /dev/null
+++ b/MenuItemEx/menuex_10.suo
Binary files differ
diff --git a/MenuItemEx/menuex_10.vcxproj b/MenuItemEx/menuex_10.vcxproj
new file mode 100644
index 0000000..90c342e
--- /dev/null
+++ b/MenuItemEx/menuex_10.vcxproj
@@ -0,0 +1,560 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup Label="ProjectConfigurations">
+ <ProjectConfiguration Include="Debug Unicode|Win32">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug Unicode|x64">
+ <Configuration>Debug Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|Win32">
+ <Configuration>Debug</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Debug|x64">
+ <Configuration>Debug</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|Win32">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release Unicode|x64">
+ <Configuration>Release Unicode</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|Win32">
+ <Configuration>Release</Configuration>
+ <Platform>Win32</Platform>
+ </ProjectConfiguration>
+ <ProjectConfiguration Include="Release|x64">
+ <Configuration>Release</Configuration>
+ <Platform>x64</Platform>
+ </ProjectConfiguration>
+ </ItemGroup>
+ <PropertyGroup Label="Globals">
+ <ProjectName>MenuEx</ProjectName>
+ <ProjectGuid>{210DD88D-649B-4695-8C5F-898A4F60A8CE}</ProjectGuid>
+ <RootNamespace>MenuItemEx</RootNamespace>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v100</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v90</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v90</PlatformToolset>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <CharacterSet>Unicode</CharacterSet>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ </PropertyGroup>
+ <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
+ <ConfigurationType>DynamicLibrary</ConfigurationType>
+ <UseOfMfc>false</UseOfMfc>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <PlatformToolset>v90</PlatformToolset>
+ </PropertyGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
+ <ImportGroup Label="ExtensionSettings">
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <ImportGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="PropertySheets">
+ <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
+ </ImportGroup>
+ <PropertyGroup Label="UserMacros" />
+ <PropertyGroup>
+ <_ProjectFileVersion>10.0.30319.1</_ProjectFileVersion>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">$(SolutionDir)$(Configuration)/Obj\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)\$(Configuration) $(Platform)\Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release|x64'">$(SolutionDir)\$(Configuration) $(Platform)\Obj\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release|x64'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">$(SolutionDir)$(Configuration)/Obj\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)\$(Configuration) $(Platform)\Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">$(SolutionDir)\$(Configuration) $(Platform)\Obj\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">$(SolutionDir)\$(Configuration) $(Platform)\Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">$(SolutionDir)\$(Configuration) $(Platform)\Obj\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">$(SolutionDir)$(Configuration)/Obj\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">true</IgnoreImportLibrary>
+ <OutDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)\$(Configuration) $(Platform)\Plugins\</OutDir>
+ <IntDir Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">$(SolutionDir)\$(Configuration) $(Platform)\Obj\</IntDir>
+ <IgnoreImportLibrary Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">true</IgnoreImportLibrary>
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" />
+ <CodeAnalysisRuleSet Condition="'$(Configuration)|$(Platform)'=='Release|x64'">AllRules.ruleset</CodeAnalysisRuleSet>
+ <CodeAnalysisRules Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <CodeAnalysisRuleAssemblies Condition="'$(Configuration)|$(Platform)'=='Release|x64'" />
+ <IncludePath Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">D:\Sources\include;$(IncludePath)</IncludePath>
+ </PropertyGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Release/menuex.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <AdditionalIncludeDirectories>../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0417</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/filealign:0x200 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>msimg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <AdditionalManifestDependencies>type=%27Win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 processorArchitecture=%27X86%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27;%(AdditionalManifestDependencies)</AdditionalManifestDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+ <BaseAddress>0x67100000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>.\Release/menuex.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <AdditionalIncludeDirectories>../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0417</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/filealign:0x200 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>msimg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <AdditionalManifestDependencies>type=%27Win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 processorArchitecture=%27X86%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27;%(AdditionalManifestDependencies)</AdditionalManifestDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+ <BaseAddress>0x67100000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\release/menuex.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0417</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>msimg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <BaseAddress>0x67100000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>.\release/menuex.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0417</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>msimg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <BaseAddress>0x67100000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\release/menuex.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>EditAndContinue</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0417</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>msimg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <BaseAddress>0x67100000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>.\release/menuex.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Disabled</Optimization>
+ <AdditionalIncludeDirectories>../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDebugDLL</RuntimeLibrary>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0417</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalDependencies>msimg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)Plugins\$(ProjectName).dll</OutputFile>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <GenerateMapFile>true</GenerateMapFile>
+ <BaseAddress>0x67100000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>Win32</TargetEnvironment>
+ <TypeLibraryName>.\Release/menuex.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <AdditionalIncludeDirectories>../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0417</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/filealign:0x200 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>msimg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <AdditionalManifestDependencies>type=%27Win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 processorArchitecture=%27X86%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27;%(AdditionalManifestDependencies)</AdditionalManifestDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+ <BaseAddress>0x67100000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX86</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">
+ <Midl>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <MkTypLibCompatible>true</MkTypLibCompatible>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <TargetEnvironment>X64</TargetEnvironment>
+ <TypeLibraryName>.\Release/menuex.tlb</TypeLibraryName>
+ <HeaderFileName>
+ </HeaderFileName>
+ </Midl>
+ <ClCompile>
+ <Optimization>Full</Optimization>
+ <InlineFunctionExpansion>OnlyExplicitInline</InlineFunctionExpansion>
+ <FavorSizeOrSpeed>Size</FavorSizeOrSpeed>
+ <WholeProgramOptimization>true</WholeProgramOptimization>
+ <AdditionalIncludeDirectories>../../include;%(AdditionalIncludeDirectories)</AdditionalIncludeDirectories>
+ <StringPooling>true</StringPooling>
+ <ExceptionHandling>
+ </ExceptionHandling>
+ <RuntimeLibrary>MultiThreadedDLL</RuntimeLibrary>
+ <FunctionLevelLinking>true</FunctionLevelLinking>
+ <PrecompiledHeader>
+ </PrecompiledHeader>
+ <WarningLevel>Level3</WarningLevel>
+ <SuppressStartupBanner>true</SuppressStartupBanner>
+ <DebugInformationFormat>ProgramDatabase</DebugInformationFormat>
+ </ClCompile>
+ <ResourceCompile>
+ <PreprocessorDefinitions>NDEBUG;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <Culture>0x0417</Culture>
+ </ResourceCompile>
+ <Link>
+ <AdditionalOptions>/filealign:0x200 %(AdditionalOptions)</AdditionalOptions>
+ <AdditionalDependencies>msimg32.lib;%(AdditionalDependencies)</AdditionalDependencies>
+ <OutputFile>$(OutDir)$(ProjectName).dll</OutputFile>
+ <AdditionalManifestDependencies>type=%27Win32%27 name=%27Microsoft.Windows.Common-Controls%27 version=%276.0.0.0%27 processorArchitecture=%27X86%27 publicKeyToken=%276595b64144ccf1df%27 language=%27*%27;%(AdditionalManifestDependencies)</AdditionalManifestDependencies>
+ <GenerateDebugInformation>true</GenerateDebugInformation>
+ <OptimizeReferences>true</OptimizeReferences>
+ <EnableCOMDATFolding>true</EnableCOMDATFolding>
+ <LinkTimeCodeGeneration>UseLinkTimeCodeGeneration</LinkTimeCodeGeneration>
+ <BaseAddress>0x67100000</BaseAddress>
+ <RandomizedBaseAddress>false</RandomizedBaseAddress>
+ <DataExecutionPrevention>
+ </DataExecutionPrevention>
+ <ImportLibrary>$(IntDir)$(TargetName).lib</ImportLibrary>
+ <TargetMachine>MachineX64</TargetMachine>
+ </Link>
+ </ItemDefinitionGroup>
+ <ItemGroup>
+ <ClCompile Include="images.c" />
+ <ClCompile Include="main.c">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">true</BrowseInformation>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">true</BrowseInformation>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">MaxSpeed</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ <ClCompile Include="options.c">
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">Disabled</Optimization>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|Win32'">true</BrowseInformation>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">Disabled</Optimization>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">true</BrowseInformation>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Disabled</Optimization>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">true</BrowseInformation>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Disabled</Optimization>
+ <BrowseInformation Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</BrowseInformation>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|Win32'">MaxSpeed</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">MaxSpeed</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">MaxSpeed</Optimization>
+ <Optimization Condition="'$(Configuration)|$(Platform)'=='Release|x64'">MaxSpeed</Optimization>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="menuex.h" />
+ <ClInclude Include="resource.h" />
+ <ClInclude Include="version.h" />
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="resource.rc">
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Release Unicode|x64'">_WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ <PreprocessorDefinitions Condition="'$(Configuration)|$(Platform)'=='Debug Unicode|x64'">_WIN64;%(PreprocessorDefinitions)</PreprocessorDefinitions>
+ </ResourceCompile>
+ </ItemGroup>
+ <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
+ <ImportGroup Label="ExtensionTargets">
+ </ImportGroup>
+</Project> \ No newline at end of file
diff --git a/MenuItemEx/menuex_10.vcxproj.filters b/MenuItemEx/menuex_10.vcxproj.filters
new file mode 100644
index 0000000..195d7c5
--- /dev/null
+++ b/MenuItemEx/menuex_10.vcxproj.filters
@@ -0,0 +1,44 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+ <ItemGroup>
+ <Filter Include="Source Files">
+ <UniqueIdentifier>{a5d3095f-4b53-4f0d-aa86-7c1c110d5f16}</UniqueIdentifier>
+ <Extensions>cpp;c;cxx;rc;def;r;odl;idl;hpj;bat</Extensions>
+ </Filter>
+ <Filter Include="Header Files">
+ <UniqueIdentifier>{508e535b-c848-4435-acaa-246bb95fa9f9}</UniqueIdentifier>
+ <Extensions>h;hpp;hxx;hm;inl</Extensions>
+ </Filter>
+ <Filter Include="Resource Files">
+ <UniqueIdentifier>{520ce12c-5f98-47c6-a52a-2c46665efddd}</UniqueIdentifier>
+ <Extensions>ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe</Extensions>
+ </Filter>
+ </ItemGroup>
+ <ItemGroup>
+ <ClCompile Include="images.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="main.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ <ClCompile Include="options.c">
+ <Filter>Source Files</Filter>
+ </ClCompile>
+ </ItemGroup>
+ <ItemGroup>
+ <ClInclude Include="menuex.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="resource.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ <ClInclude Include="version.h">
+ <Filter>Header Files</Filter>
+ </ClInclude>
+ </ItemGroup>
+ <ItemGroup>
+ <ResourceCompile Include="resource.rc">
+ <Filter>Resource Files</Filter>
+ </ResourceCompile>
+ </ItemGroup>
+</Project> \ No newline at end of file
diff --git a/MenuItemEx/menuex_10.vcxproj.user b/MenuItemEx/menuex_10.vcxproj.user
new file mode 100644
index 0000000..695b5c7
--- /dev/null
+++ b/MenuItemEx/menuex_10.vcxproj.user
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="utf-8"?>
+<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
+</Project> \ No newline at end of file
diff --git a/MenuItemEx/menuex_8.vcproj b/MenuItemEx/menuex_8.vcproj
new file mode 100644
index 0000000..11aca56
--- /dev/null
+++ b/MenuItemEx/menuex_8.vcproj
@@ -0,0 +1,500 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="8,00"
+ Name="MenuEx"
+ ProjectGUID="{210DD88D-649B-4695-8C5F-898A4F60A8CE}"
+ RootNamespace="MenuItemEx"
+ SccProjectName=""
+ SccLocalPath=""
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/menuex.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ OmitFramePointers="true"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="../../include"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalOptions="/filealign:0x200"
+ AdditionalDependencies="msimg32.lib"
+ LinkIncremental="0"
+ SuppressStartupBanner="true"
+ AdditionalManifestDependencies="type=&apos;Win32&apos; name=&apos;Microsoft.Windows.Common-Controls&apos; version=&apos;6.0.0.0&apos; processorArchitecture=&apos;X86&apos; publicKeyToken=&apos;6595b64144ccf1df&apos; language=&apos;*&apos;"
+ GenerateMapFile="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ BaseAddress="0x67100000"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\release/menuex.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../include"
+ ExceptionHandling="0"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="msimg32.lib"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ GenerateMapFile="true"
+ BaseAddress="0x67100000"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\release/menuex.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../include"
+ ExceptionHandling="0"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ AdditionalDependencies="msimg32.lib"
+ LinkIncremental="2"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ GenerateMapFile="true"
+ BaseAddress="0x67100000"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/menuex.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="../../include"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalOptions="/filealign:0x200"
+ AdditionalDependencies="msimg32.lib"
+ LinkIncremental="0"
+ SuppressStartupBanner="true"
+ AdditionalManifestDependencies="type=&apos;Win32&apos; name=&apos;Microsoft.Windows.Common-Controls&apos; version=&apos;6.0.0.0&apos; processorArchitecture=&apos;X86&apos; publicKeyToken=&apos;6595b64144ccf1df&apos; language=&apos;*&apos;"
+ GenerateMapFile="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="1"
+ BaseAddress="0x67100000"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCWebDeploymentTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath=".\images.c"
+ >
+ </File>
+ <File
+ RelativePath="main.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="options.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ <File
+ RelativePath="menuex.h"
+ >
+ </File>
+ <File
+ RelativePath="resource.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ <File
+ RelativePath="resource.rc"
+ >
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/MenuItemEx/menuex_9.vcproj b/MenuItemEx/menuex_9.vcproj
new file mode 100644
index 0000000..2e0a816
--- /dev/null
+++ b/MenuItemEx/menuex_9.vcproj
@@ -0,0 +1,958 @@
+<?xml version="1.0" encoding="windows-1251"?>
+<VisualStudioProject
+ ProjectType="Visual C++"
+ Version="9,00"
+ Name="MenuEx"
+ ProjectGUID="{210DD88D-649B-4695-8C5F-898A4F60A8CE}"
+ RootNamespace="MenuItemEx"
+ TargetFrameworkVersion="131072"
+ >
+ <Platforms>
+ <Platform
+ Name="Win32"
+ />
+ <Platform
+ Name="x64"
+ />
+ </Platforms>
+ <ToolFiles>
+ </ToolFiles>
+ <Configurations>
+ <Configuration
+ Name="Release|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/menuex.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="../../include"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalOptions="/filealign:0x200"
+ AdditionalDependencies="msimg32.lib"
+ SuppressStartupBanner="true"
+ AdditionalManifestDependencies="type=&apos;Win32&apos; name=&apos;Microsoft.Windows.Common-Controls&apos; version=&apos;6.0.0.0&apos; processorArchitecture=&apos;X86&apos; publicKeyToken=&apos;6595b64144ccf1df&apos; language=&apos;*&apos;"
+ GenerateDebugInformation="true"
+ GenerateMapFile="false"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="0"
+ LinkTimeCodeGeneration="1"
+ BaseAddress="0x67100000"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release|x64"
+ OutputDirectory="$(SolutionDir)\$(ConfigurationName) $(PlatformName)\Plugins"
+ IntermediateDirectory="$(SolutionDir)\$(ConfigurationName) $(PlatformName)\Obj"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Release/menuex.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="../../include"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalOptions="/filealign:0x200"
+ AdditionalDependencies="msimg32.lib"
+ SuppressStartupBanner="true"
+ AdditionalManifestDependencies="type=&apos;Win32&apos; name=&apos;Microsoft.Windows.Common-Controls&apos; version=&apos;6.0.0.0&apos; processorArchitecture=&apos;X86&apos; publicKeyToken=&apos;6595b64144ccf1df&apos; language=&apos;*&apos;"
+ GenerateDebugInformation="true"
+ GenerateMapFile="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ OptimizeForWindows98="0"
+ LinkTimeCodeGeneration="1"
+ BaseAddress="0x67100000"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\release/menuex.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../include"
+ ExceptionHandling="0"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="msimg32.lib"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ GenerateMapFile="true"
+ BaseAddress="0x67100000"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug|x64"
+ OutputDirectory="$(SolutionDir)\$(ConfigurationName) $(PlatformName)\Plugins"
+ IntermediateDirectory="$(SolutionDir)\$(ConfigurationName) $(PlatformName)\Obj"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\release/menuex.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../include"
+ ExceptionHandling="0"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="msimg32.lib"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ GenerateMapFile="true"
+ BaseAddress="0x67100000"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\release/menuex.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../include"
+ ExceptionHandling="0"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="4"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="msimg32.lib"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ GenerateMapFile="true"
+ BaseAddress="0x67100000"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Debug Unicode|x64"
+ OutputDirectory="$(SolutionDir)\$(ConfigurationName) $(PlatformName)\Plugins"
+ IntermediateDirectory="$(SolutionDir)\$(ConfigurationName) $(PlatformName)\Obj"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\release/menuex.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ AdditionalIncludeDirectories="../../include"
+ ExceptionHandling="0"
+ RuntimeLibrary="3"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalDependencies="msimg32.lib"
+ OutputFile="$(OutDir)\Plugins\$(ProjectName).dll"
+ SuppressStartupBanner="true"
+ GenerateDebugInformation="true"
+ GenerateMapFile="true"
+ BaseAddress="0x67100000"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|Win32"
+ OutputDirectory="$(SolutionDir)$(ConfigurationName)/Plugins"
+ IntermediateDirectory="$(SolutionDir)$(ConfigurationName)/Obj"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="1"
+ TypeLibraryName=".\Release/menuex.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="../../include"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalOptions="/filealign:0x200"
+ AdditionalDependencies="msimg32.lib"
+ AdditionalManifestDependencies="type=&apos;Win32&apos; name=&apos;Microsoft.Windows.Common-Controls&apos; version=&apos;6.0.0.0&apos; processorArchitecture=&apos;X86&apos; publicKeyToken=&apos;6595b64144ccf1df&apos; language=&apos;*&apos;"
+ GenerateDebugInformation="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ LinkTimeCodeGeneration="1"
+ BaseAddress="0x67100000"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="1"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ <Configuration
+ Name="Release Unicode|x64"
+ OutputDirectory="$(SolutionDir)\$(ConfigurationName) $(PlatformName)\Plugins"
+ IntermediateDirectory="$(SolutionDir)\$(ConfigurationName) $(PlatformName)\Obj"
+ ConfigurationType="2"
+ UseOfMFC="0"
+ ATLMinimizesCRunTimeLibraryUsage="false"
+ CharacterSet="1"
+ WholeProgramOptimization="1"
+ >
+ <Tool
+ Name="VCPreBuildEventTool"
+ />
+ <Tool
+ Name="VCCustomBuildTool"
+ />
+ <Tool
+ Name="VCXMLDataGeneratorTool"
+ />
+ <Tool
+ Name="VCWebServiceProxyGeneratorTool"
+ />
+ <Tool
+ Name="VCMIDLTool"
+ PreprocessorDefinitions="NDEBUG"
+ MkTypLibCompatible="true"
+ SuppressStartupBanner="true"
+ TargetEnvironment="3"
+ TypeLibraryName=".\Release/menuex.tlb"
+ HeaderFileName=""
+ />
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="3"
+ InlineFunctionExpansion="1"
+ FavorSizeOrSpeed="2"
+ WholeProgramOptimization="true"
+ AdditionalIncludeDirectories="../../include"
+ StringPooling="true"
+ ExceptionHandling="0"
+ RuntimeLibrary="2"
+ EnableFunctionLevelLinking="true"
+ UsePrecompiledHeader="0"
+ WarningLevel="3"
+ SuppressStartupBanner="true"
+ Detect64BitPortabilityProblems="false"
+ DebugInformationFormat="3"
+ />
+ <Tool
+ Name="VCManagedResourceCompilerTool"
+ />
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="NDEBUG"
+ Culture="1047"
+ />
+ <Tool
+ Name="VCPreLinkEventTool"
+ />
+ <Tool
+ Name="VCLinkerTool"
+ IgnoreImportLibrary="true"
+ AdditionalOptions="/filealign:0x200"
+ AdditionalDependencies="msimg32.lib"
+ OutputFile="$(OutDir)\$(ProjectName).dll"
+ AdditionalManifestDependencies="type=&apos;Win32&apos; name=&apos;Microsoft.Windows.Common-Controls&apos; version=&apos;6.0.0.0&apos; processorArchitecture=&apos;X86&apos; publicKeyToken=&apos;6595b64144ccf1df&apos; language=&apos;*&apos;"
+ GenerateDebugInformation="true"
+ OptimizeReferences="2"
+ EnableCOMDATFolding="2"
+ LinkTimeCodeGeneration="1"
+ BaseAddress="0x67100000"
+ RandomizedBaseAddress="1"
+ DataExecutionPrevention="0"
+ ImportLibrary="$(IntDir)/$(TargetName).lib"
+ TargetMachine="17"
+ />
+ <Tool
+ Name="VCALinkTool"
+ />
+ <Tool
+ Name="VCManifestTool"
+ />
+ <Tool
+ Name="VCXDCMakeTool"
+ />
+ <Tool
+ Name="VCBscMakeTool"
+ />
+ <Tool
+ Name="VCFxCopTool"
+ />
+ <Tool
+ Name="VCAppVerifierTool"
+ />
+ <Tool
+ Name="VCPostBuildEventTool"
+ />
+ </Configuration>
+ </Configurations>
+ <References>
+ </References>
+ <Files>
+ <Filter
+ Name="Source Files"
+ Filter="cpp;c;cxx;rc;def;r;odl;idl;hpj;bat"
+ >
+ <File
+ RelativePath=".\images.c"
+ >
+ </File>
+ <File
+ RelativePath="main.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ <File
+ RelativePath="options.c"
+ >
+ <FileConfiguration
+ Name="Release|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="0"
+ BrowseInformation="1"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|Win32"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCCLCompilerTool"
+ Optimization="2"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ <Filter
+ Name="Header Files"
+ Filter="h;hpp;hxx;hm;inl"
+ >
+ <File
+ RelativePath="menuex.h"
+ >
+ </File>
+ <File
+ RelativePath="resource.h"
+ >
+ </File>
+ <File
+ RelativePath=".\version.h"
+ >
+ </File>
+ </Filter>
+ <Filter
+ Name="Resource Files"
+ Filter="ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe"
+ >
+ <File
+ RelativePath="resource.rc"
+ >
+ <FileConfiguration
+ Name="Debug Unicode|x64"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_WIN64"
+ />
+ </FileConfiguration>
+ <FileConfiguration
+ Name="Release Unicode|x64"
+ >
+ <Tool
+ Name="VCResourceCompilerTool"
+ PreprocessorDefinitions="_WIN64"
+ />
+ </FileConfiguration>
+ </File>
+ </Filter>
+ </Files>
+ <Globals>
+ </Globals>
+</VisualStudioProject>
diff --git a/MenuItemEx/options.c b/MenuItemEx/options.c
new file mode 100644
index 0000000..38aff12
--- /dev/null
+++ b/MenuItemEx/options.c
@@ -0,0 +1,132 @@
+#include "menuex.h"
+
+
+extern HINSTANCE hinstance;
+
+struct {
+ int idc;
+ int flag;
+}
+static const checkboxes[]={
+ { IDC_COPYID, VF_CID },
+ { IDC_STATUSMSG, VF_STAT },
+ { IDC_COPYIP, VF_CIP },
+ { IDC_COPYMIRVER, VF_CMV },
+ { IDC_VIS, VF_VS },
+ { IDC_SHOWALPHAICONS, VF_SAI },
+ { IDC_HIDE, VF_HFL },
+ { IDC_IGNORE, VF_IGN },
+ { IDC_PROTOS, VF_PROTO },
+ { IDC_ADDED, VF_ADD },
+ { IDC_AUTHREQ, VF_REQ },
+ { IDC_SHOWID, VF_SHOWID },
+ { IDC_COPYIDNAME, VF_CIDN },
+ { IDC_RECVFILES, VF_RECV },
+ { IDC_SMNAME, VF_SMNAME },
+ { IDC_TRIMID, VF_TRIMID }
+};
+
+INT_PTR CALLBACK OptionsProc(HWND hdlg,UINT msg,WPARAM wparam,LPARAM lparam)
+{
+ WORD flags=DBGetContactSettingWord(NULL,VISPLG,"flags",vf_default);
+ TCHAR buffer[64] = {0};
+ int i;
+
+ switch(msg)
+ {
+ case WM_INITDIALOG:
+
+ TranslateDialogDefault(hdlg);
+
+ for (i = 0; i < SIZEOF(checkboxes); i++)
+ {
+ CheckDlgButton(hdlg, checkboxes[i].idc, (flags & checkboxes[i].flag) ? BST_CHECKED : BST_UNCHECKED);
+ }
+
+ if (ServiceExists(MS_POPUP_ADDPOPUP))
+ {
+ for (i = 0; i < 4; i++)
+ {
+ GetDlgItemText(hdlg, checkboxes[i].idc, buffer, SIZEOF(buffer) - 3);
+ _tcscat(buffer, _T(" *"));
+ SetDlgItemText(hdlg, checkboxes[i].idc, buffer);
+ }
+ }
+ else
+ ShowWindow(GetDlgItem(hdlg, IDC_HINT1), SW_HIDE);
+
+ if (!bMir_08)
+ EnableWindow(GetDlgItem(hdlg,IDC_PROTOS), 0);
+
+ SendMessage(hdlg, WM_USER + 50, 0, 0);
+ return 0;
+
+ case WM_USER+50:
+
+ EnableWindow(GetDlgItem(hdlg,IDC_SHOWALPHAICONS),
+ IsDlgButtonChecked(hdlg,IDC_VIS) == BST_CHECKED);
+ EnableWindow(GetDlgItem(hdlg,IDC_COPYIDNAME),
+ IsDlgButtonChecked(hdlg,IDC_COPYID) == BST_CHECKED);
+ EnableWindow(GetDlgItem(hdlg,IDC_SHOWID),
+ IsDlgButtonChecked(hdlg,IDC_COPYID) == BST_CHECKED);
+ EnableWindow(GetDlgItem(hdlg,IDC_TRIMID),
+ (IsDlgButtonChecked(hdlg,IDC_COPYID) == BST_CHECKED && IsDlgButtonChecked(hdlg,IDC_SHOWID) == BST_CHECKED));
+ EnableWindow(GetDlgItem(hdlg,IDC_SMNAME),
+ IsDlgButtonChecked(hdlg,IDC_STATUSMSG) == BST_CHECKED);
+ return 1;
+
+ case WM_NOTIFY:
+ switch(((LPNMHDR)lparam)->code){
+ case PSN_APPLY:
+ {
+ WORD mod_flags=0;
+
+ for (i = 0; i < SIZEOF(checkboxes); i++)
+ {
+ mod_flags |= IsDlgButtonChecked(hdlg, checkboxes[i].idc) ? checkboxes[i].flag : 0;
+ }
+
+ //DBDeleteContactSetting(NULL,VISPLG,"flags");
+ DBWriteContactSettingWord(NULL,VISPLG,"flags",mod_flags);
+
+ return 1;
+ }
+ }
+ break;
+
+ case WM_COMMAND:
+ if(HIWORD(wparam)==BN_CLICKED && GetFocus()==(HWND)lparam) {
+ SendMessage(GetParent(hdlg),PSM_CHANGED,0,0);
+ if (LOWORD(wparam) == IDC_VIS ||
+ LOWORD(wparam) == IDC_COPYID ||
+ LOWORD(wparam) == IDC_STATUSMSG ||
+ LOWORD(wparam) == IDC_SHOWID) {
+
+ SendMessage(hdlg, WM_USER + 50, 0, 0);
+ }
+ }
+ return 0;
+
+ case WM_CLOSE:
+ EndDialog(hdlg,0);
+ return 0;
+ }
+ return 0;
+}
+
+int OptionsInit(WPARAM wparam,LPARAM lparam)
+{
+ OPTIONSDIALOGPAGE odp={0};
+
+ odp.cbSize=sizeof(odp);
+ odp.position=955000000;
+ odp.hInstance=hinstance;
+ odp.pszTemplate=MAKEINTRESOURCEA(IDD_OPTIONS);
+ odp.ptszTitle= _T(MODULENAME);
+ odp.pfnDlgProc=OptionsProc;
+ odp.ptszGroup=_T("Customize");
+ odp.flags=ODPF_BOLDGROUPS | ODPF_TCHAR;
+
+ CallService(MS_OPT_ADDPAGE,wparam,(LPARAM)&odp);
+ return 0;
+}
diff --git a/MenuItemEx/resource.h b/MenuItemEx/resource.h
new file mode 100644
index 0000000..c2f0ffe
--- /dev/null
+++ b/MenuItemEx/resource.h
@@ -0,0 +1,50 @@
+//{{NO_DEPENDENCIES}}
+// Microsoft Visual C++ generated include file.
+// Used by menuex.rc
+//
+#define IDD_OPTIONS 101
+#define IDD_AUTHREQ 103
+#define IDI_ICON0 110
+#define IDI_ICON1 111
+#define IDI_ICON2 112
+#define IDI_ICON3 113
+#define IDI_ICON4 114
+#define IDI_ICON5 115
+#define IDI_ICON6 116
+#define IDI_ICON7 117
+#define IDI_ICON8 118
+#define IDI_ICON9 119
+#define IDI_ICON10 120
+#define IDI_ICON11 121
+#define IDI_ICON12 122
+#define IDI_ICON13 123
+#define IDC_VIS 1000
+#define IDC_REASON 1001
+#define IDC_HIDE 1002
+#define IDC_IGNORE 1003
+#define IDC_PROTOS 1004
+#define IDC_ADDED 1006
+#define IDC_AUTHREQ 1007
+#define IDC_COPYID 1008
+#define IDC_RECVFILES 1009
+#define IDC_STATUSMSG 1010
+#define IDC_COPYIDNAME 1011
+#define IDC_COPYIP 1012
+#define IDC_SHOWALPHAICONS 1013
+#define IDC_SMNAME 1014
+#define IDC_COPYMIRVER 1015
+#define IDC_HINT1 1016
+#define IDC_SHOWID 1017
+#define IDC_TRIMID 1018
+#define IDC_STATIC -1
+
+// Next default values for new objects
+//
+#ifdef APSTUDIO_INVOKED
+#ifndef APSTUDIO_READONLY_SYMBOLS
+#define _APS_NEXT_RESOURCE_VALUE 124
+#define _APS_NEXT_COMMAND_VALUE 40001
+#define _APS_NEXT_CONTROL_VALUE 1017
+#define _APS_NEXT_SYMED_VALUE 125
+#endif
+#endif
diff --git a/MenuItemEx/resource.rc b/MenuItemEx/resource.rc
new file mode 100644
index 0000000..0c167a2
--- /dev/null
+++ b/MenuItemEx/resource.rc
@@ -0,0 +1,2 @@
+#include "menuex.rc"
+#include "version.rc"
diff --git a/MenuItemEx/sdk/m_fingerprint.h b/MenuItemEx/sdk/m_fingerprint.h
new file mode 100644
index 0000000..b44e937
--- /dev/null
+++ b/MenuItemEx/sdk/m_fingerprint.h
@@ -0,0 +1,70 @@
+/*
+Fingerprint Mod+ (client version) icons module for Miranda IM
+
+Copyright © 2006-2007 Artem Shpynov aka FYR, Bio, Faith Healer. 2009-2010 HierOS
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+/************************************************************************/
+/* Author: Artem Shpynov aka FYR mailto:shpynov@nm.ru */
+/* icons by Angeli-Ka */
+/* January 12, 2006 */
+/************************************************************************/
+
+
+/*
+ * FINGERPRINT PLUGIN SERVICES HEADER
+ */
+
+/*
+ * Service SameClients MS_FP_SAMECLIENTS
+ * wParam - char * first MirVer value
+ * lParam - char * second MirVer value
+ * return pointer to char string - client desription (DO NOT DESTROY) if clients are same otherwise NULL
+ */
+#define MS_FP_SAMECLIENTS "Fingerprint/SameClients"
+
+/*
+ * Service SameClientsW MS_FP_SAMECLIENTSW
+ * wParam - LPWSTR first MirVer value
+ * lParam - LPWSTR second MirVer value
+ * return pointer to char string - client desription (DO NOT DESTROY) if clients are same otherwise NULL
+ */
+#define MS_FP_SAMECLIENTSW "Fingerprint/SameClientsW"
+
+/*
+ * Service GetClientIcon MS_FP_GETCLIENTICON
+ * wParam - char * MirVer value to get client for.
+ * lParam - int noCopy - if wParam is equal to "1" will return icon handler without copiing icon.
+ * the returned in this case handler is static valid only till next service call.
+ */
+#define MS_FP_GETCLIENTICON "Fingerprint/GetClientIcon"
+
+/*
+ * Service GetClientIconW MS_FP_GETCLIENTICONW
+ * wParam - LPWSTR MirVer value to get client for.
+ * lParam - int noCopy - if wParam is equal to "1" will return icon handler without copiing icon.
+ * the returned in this case handler is static valid only till next service call.
+ */
+#define MS_FP_GETCLIENTICONW "Fingerprint/GetClientIconW"
+
+#if defined( _UNICODE )
+ #define MS_FP_SAMECLIENTST MS_FP_SAMECLIENTSW
+ #define MS_FP_GETCLIENTICONT MS_FP_GETCLIENTICONW
+#else
+ #define MS_FP_SAMECLIENTST MS_FP_SAMECLIENTS
+ #define MS_FP_GETCLIENTICONT MS_FP_GETCLIENTICON
+#endif
diff --git a/MenuItemEx/sdk/m_metacontacts.h b/MenuItemEx/sdk/m_metacontacts.h
new file mode 100644
index 0000000..9f348bd
--- /dev/null
+++ b/MenuItemEx/sdk/m_metacontacts.h
@@ -0,0 +1,166 @@
+/*
+
+Miranda IM: the free IM client for Microsoft* Windows*
+
+Copyright © 2004 Universite Louis PASTEUR, STRASBOURG.
+Copyright © 2004 Scott Ellis (www.scottellis.com.au mail@scottellis.com.au)
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+*/
+
+#ifndef M_METACONTACTS_H__
+#define M_METACONTACTS_H__ 1
+
+#ifndef MIID_METACONTACTS
+#define MIID_METACONTACTS {0xc0325019, 0xc1a7, 0x40f5, { 0x83, 0x65, 0x4f, 0x46, 0xbe, 0x21, 0x86, 0x3e}}
+#endif
+
+//get the handle for a contact's parent metacontact
+//wParam=(HANDLE)hSubContact
+//lParam=0
+//returns a handle to the parent metacontact, or null if this contact is not a subcontact
+#define MS_MC_GETMETACONTACT "MetaContacts/GetMeta"
+
+//gets the handle for the default contact
+//wParam=(HANDLE)hMetaContact
+//lParam=0
+//returns a handle to the default contact, or null on failure
+#define MS_MC_GETDEFAULTCONTACT "MetaContacts/GetDefault"
+
+//gets the contact number for the default contact
+//wParam=(HANDLE)hMetaContact
+//lParam=0
+//returns a DWORD contact number, or -1 on failure
+#define MS_MC_GETDEFAULTCONTACTNUM "MetaContacts/GetDefaultNum"
+
+//gets the handle for the 'most online' contact
+//wParam=(HANDLE)hMetaContact
+//lParam=0
+//returns a handle to the 'most online' contact
+#define MS_MC_GETMOSTONLINECONTACT "MetaContacts/GetMostOnline"
+
+//gets the number of subcontacts for a metacontact
+//wParam=(HANDLE)hMetaContact
+//lParam=0
+//returns a DWORD representing the number of subcontacts for the given metacontact
+#define MS_MC_GETNUMCONTACTS "MetaContacts/GetNumContacts"
+
+//gets the handle of a subcontact, using the subcontact's number
+//wParam=(HANDLE)hMetaContact
+//lParam=(DWORD)contact number
+//returns a handle to the specified subcontact
+#define MS_MC_GETSUBCONTACT "MetaContacts/GetSubContact"
+
+//sets the default contact, using the subcontact's contact number
+//wParam=(HANDLE)hMetaContact
+//lParam=(DWORD)contact number
+//returns 0 on success
+#define MS_MC_SETDEFAULTCONTACTNUM "MetaContacts/SetDefault"
+
+//sets the default contact, using the subcontact's handle
+//wParam=(HANDLE)hMetaContact
+//lParam=(HANDLE)hSubcontact
+//returns 0 on success
+#define MS_MC_SETDEFAULTCONTACT "MetaContacts/SetDefaultByHandle"
+
+//forces the metacontact to send using a specific subcontact, using the subcontact's contact number
+//wParam=(HANDLE)hMetaContact
+//lParam=(DWORD)contact number
+//returns 0 on success
+#define MS_MC_FORCESENDCONTACTNUM "MetaContacts/ForceSendContact"
+
+//forces the metacontact to send using a specific subcontact, using the subcontact's handle
+//wParam=(HANDLE)hMetaContact
+//lParam=(HANDLE)hSubcontact
+//returns 0 on success (will fail if 'force default' is in effect)
+#define MS_MC_FORCESENDCONTACT "MetaContacts/ForceSendContactByHandle"
+
+//'unforces' the metacontact to send using a specific subcontact
+//wParam=(HANDLE)hMetaContact
+//lParam=0
+//returns 0 on success (will fail if 'force default' is in effect)
+#define MS_MC_UNFORCESENDCONTACT "MetaContacts/UnforceSendContact"
+
+//'forces' or 'unforces' (i.e. toggles) the metacontact to send using it's default contact
+// overrides (and clears) 'force send' above, and will even force use of offline contacts
+// will send ME_MC_FORCESEND or ME_MC_UNFORCESEND event
+//wParam=(HANDLE)hMetaContact
+//lParam=0
+//returns 1(true) or 0(false) representing new state of 'force default'
+#define MS_MC_FORCEDEFAULT "MetaContacts/ForceSendDefault"
+
+// method to get state of 'force' for a metacontact
+// wParam=(HANDLE)hMetaContact
+// lParam= (DWORD)&contact_number or NULL
+//
+// if lparam supplied, the contact_number of the contatct 'in force' will be copied to the address it points to,
+// or if none is in force, the value (DWORD)-1 will be copied
+// (v0.8.0.8+ returns 1 if 'force default' is true with *lParam == default contact number, else returns 0 with *lParam as above)
+#define MS_MC_GETFORCESTATE "MetaContacts/GetForceState"
+
+// fired when a metacontact's default contact changes (fired upon creation of metacontact also, when default is initially set)
+// wParam=(HANDLE)hMetaContact
+// lParam=(HANDLE)hDefaultContact
+#define ME_MC_DEFAULTTCHANGED "MetaContacts/DefaultChanged"
+
+// fired when a metacontact's subcontacts change (fired upon creation of metacontact, when contacts are added or removed, and when
+// contacts are reordered) - a signal to re-read metacontact data
+// wParam=(HANDLE)hMetaContact
+// lParam=0
+#define ME_MC_SUBCONTACTSCHANGED "MetaContacts/SubcontactsChanged"
+
+// fired when a metacontact is forced to send using a specific subcontact
+// wParam=(HANDLE)hMetaContact
+// lParam=(HANDLE)hForceContact
+#define ME_MC_FORCESEND "MetaContacts/ForceSend"
+
+// fired when a metacontact is 'unforced' to send using a specific subcontact
+// wParam=(HANDLE)hMetaContact
+// lParam=0
+#define ME_MC_UNFORCESEND "MetaContacts/UnforceSend"
+
+// method to get protocol name - used to be sure you're dealing with a "real" metacontacts plugin :)
+// wParam=lParam=0
+#define MS_MC_GETPROTOCOLNAME "MetaContacts/GetProtoName"
+
+
+// added 0.9.5.0 (22/3/05)
+// wParam=(HANDLE)hContact
+// lParam=0
+// convert a given contact into a metacontact
+#define MS_MC_CONVERTTOMETA "MetaContacts/ConvertToMetacontact"
+
+// added 0.9.5.0 (22/3/05)
+// wParam=(HANDLE)hContact
+// lParam=(HANDLE)hMeta
+// add an existing contact to a metacontact
+#define MS_MC_ADDTOMETA "MetaContacts/AddToMetacontact"
+
+// added 0.9.5.0 (22/3/05)
+// wParam=0
+// lParam=(HANDLE)hContact
+// remove a contact from a metacontact
+#define MS_MC_REMOVEFROMMETA "MetaContacts/RemoveFromMetacontact"
+
+
+// added 0.9.13.2 (6/10/05)
+// wParam=(BOOL)disable
+// lParam=0
+// enable/disable the 'hidden group hack' - for clists that support subcontact hiding using 'IsSubcontact' setting
+// should be called once in the clist 'onmodulesloaded' event handler (which, since it's loaded after the db, will be called
+// before the metacontact onmodulesloaded handler where the subcontact hiding is usually done)
+#define MS_MC_DISABLEHIDDENGROUP "MetaContacts/DisableHiddenGroup"
+
+#endif
diff --git a/MenuItemEx/sdk/m_msg_buttonsbar.h b/MenuItemEx/sdk/m_msg_buttonsbar.h
new file mode 100644
index 0000000..1ab6651
--- /dev/null
+++ b/MenuItemEx/sdk/m_msg_buttonsbar.h
@@ -0,0 +1,120 @@
+#ifndef M_MSG_BUTTONSBAR_H__
+#define M_MSG_BUTTONSBAR_H__
+
+//////////////////////////////////////////////////////////////////////////
+// Services
+//
+//////////////////////////////////////////////////////////////////////////
+// Adding a button
+//
+// wParam = 0
+// lParam = (BBButton *) &description
+#define MS_BB_ADDBUTTON "TabSRMM/ButtonsBar/AddButton"
+
+//////////////////////////////////////////////////////////////////////////
+// Remove button
+//
+// wParam = 0
+// lParam = (BBButton *) &description, only button ID and ModuleName used
+#define MS_BB_REMOVEBUTTON "TabSRMM/ButtonsBar/RemoveButton"
+
+//////////////////////////////////////////////////////////////////////////
+// ModifyButton(global)
+//
+// wParam = 0
+// lParam = (BBButton *) &description
+#define MS_BB_MODIFYBUTTON "TabSRMM/ButtonsBar/ModifyButton"
+
+
+#define BBSF_HIDDEN (1<<0)
+#define BBSF_DISABLED (1<<1)
+#define BBSF_PUSHED (1<<2)
+#define BBSF_RELEASED (1<<3)
+
+//////////////////////////////////////////////////////////////////////////
+// GetButtonState(local)
+//
+// wParam = hContact
+// lParam = (BBButton *) &description , only ModuleName and ID used
+// Returns BBButton struct with BBSF_ bbbFlags:
+#define MS_BB_GETBUTTONSTATE "TabSRMM/ButtonsBar/GetButtonState"
+
+//////////////////////////////////////////////////////////////////////////
+// SetButtonState (local)
+//
+// wParam = hContact
+// lParam = (BBButton *) &description , ModuleName, ID,hIcon,Tooltip, and BBSF_ bbbFlags are used
+#define MS_BB_SETBUTTONSTATE "TabSRMM/ButtonsBar/SetButtonState"
+
+
+////////////////////////////////////////////////////////////////
+//Events
+//
+///////////////////////////////////////////////////
+// ToolBar loaded event
+// wParam = 0;
+// lParam = 0;
+// This event will be send after module loaded and after each toolbar reset
+// You should add your buttons on this event
+#define ME_MSG_TOOLBARLOADED "TabSRMM/ButtonsBar/ModuleLoaded"
+
+///////////////////////////////////////////////////
+// ButtonClicked event
+// wParam = (HANDLE)hContact;
+// lParam = (CustomButtonClickData *)&CustomButtonClickData;
+// catch to show a popup menu, etc.
+#define ME_MSG_BUTTONPRESSED "TabSRMM/ButtonsBar/ButtonPressed"
+
+
+//event flags
+#define BBCF_RIGHTBUTTON (1<<0)
+#define BBCF_SHIFTPRESSED (1<<1)
+#define BBCF_CONTROLPRESSED (1<<2)
+#define BBCF_ARROWCLICKED (1<<3)
+
+typedef struct {
+ int cbSize;
+ POINT pt; // screen coordinates for menus
+ char* pszModule; // button owners name
+ DWORD dwButtonId; // registered button ID
+ HWND hwndFrom; // button parents HWND
+ HANDLE hContact; //
+ DWORD flags; // BBCF_ flags
+ } CustomButtonClickData;
+
+
+//button flags
+#define BBBF_DISABLED (1<<0)
+#define BBBF_HIDDEN (1<<1)
+#define BBBF_ISPUSHBUTTON (1<<2)
+#define BBBF_ISARROWBUTTON (1<<3)
+#define BBBF_ISCHATBUTTON (1<<4)
+#define BBBF_ISIMBUTTON (1<<5)
+#define BBBF_ISLSIDEBUTTON (1<<6)
+#define BBBF_ISRSIDEBUTTON (1<<7)
+#define BBBF_CANBEHIDDEN (1<<8)
+#define BBBF_ISDUMMYBUTTON (1<<9)
+#define BBBF_ANSITOOLTIP (1<<10)
+
+#define BBBF_CREATEBYID (1<<11) //only for tabsrmm internal use
+
+typedef struct _tagBBButton
+ {
+ int cbSize; // size of structure
+
+ DWORD dwButtonID; // your button ID, will be combined with pszModuleName for storing settings, etc...
+
+ char* pszModuleName; //module name without spaces and underline symbols (e.g. "tabsrmm")
+ union{
+ char* pszTooltip; //button's tooltip
+ TCHAR* ptszTooltip;
+ };
+ DWORD dwDefPos; // default order pos of button, counted from window edge (left or right)
+ // use value >100, because internal buttons using 10,20,30... 80, etc
+ int iButtonWidth; // must be 0
+ DWORD bbbFlags; // combine of BBBF_ flags above
+ HANDLE hIcon; //Handle to icolib registered icon, it's better to register with pszSection = "TabSRMM/Toolbar"
+ }BBButton;
+
+
+#endif //M_MSG_BUTTONSBAR_H__ \ No newline at end of file
diff --git a/MenuItemEx/sdk/m_updater.h b/MenuItemEx/sdk/m_updater.h
new file mode 100644
index 0000000..488d372
--- /dev/null
+++ b/MenuItemEx/sdk/m_updater.h
@@ -0,0 +1,150 @@
+#ifndef _M_UPDATER_H
+#define _M_UPDATER_H
+
+// NOTES:
+// - For langpack updates, include a string of the following format in the langpack text file:
+// ";FLID: <file listing name> <version>"
+// version must be four numbers seperated by '.', in the range 0-255 inclusive
+// - Updater will disable plugins that are downloaded but were not active prior to the update (this is so that, if an archive contains e.g. ansi and
+// unicode versions, the correct plugin will be the only one active after the new version is installed)...so if you add a support plugin, you may need
+// to install an ini file to make the plugin activate when miranda restarts after the update
+// - Updater will replace all dlls that have the same internal shortName as a downloaded update dll (this is so that msn1.dll and msn2.dll, for example,
+// will both be updated) - so if you have a unicode and a non-unicode version of a plugin in your archive, you should make the internal names different (which will break automatic
+// updates from the file listing if there is only one file listing entry for both versions, unless you use the 'MS_UPDATE_REGISTER' service below)
+// - Updater will install all files in the root of the archive into the plugins folder, except for langpack files that contain the FLID string which go into the root folder (same
+// folder as miranda32.exe)...all folders in the archive will also be copied to miranda's root folder, and their contents transferred into the new folders. The only exception is a
+// special folder called 'root_files' - if there is a folder by that name in the archive, it's contents will also be copied into miranda's root folder - this is intended to be used
+// to install additional dlls etc that a plugin may require)
+
+// if you set Update.szUpdateURL to the following value when registering, as well as setting your beta site and version data,
+// Updater will ignore szVersionURL and pbVersionPrefix, and attempt to find the file listing URL's from the backend XML data.
+// for this to work, the plugin name in pluginInfo.shortName must match the file listing exactly (except for case)
+#define UPDATER_AUTOREGISTER "UpdaterAUTOREGISTER"
+// Updater will also use the backend xml data if you provide URL's that reference the miranda file listing for updates (so you can use that method
+// if e.g. your plugin shortName does not match the file listing) - it will grab the file listing id from the end of these URLs
+
+typedef struct Update_tag {
+ int cbSize;
+ char *szComponentName; // component name as it will appear in the UI (will be translated before displaying)
+
+ char *szVersionURL; // URL where the current version can be found (NULL to disable)
+ BYTE *pbVersionPrefix; // bytes occuring in VersionURL before the version, used to locate the version information within the URL data
+ // (note that this URL could point at a binary file - dunno why, but it could :)
+ int cpbVersionPrefix; // number of bytes pointed to by pbVersionPrefix
+ char *szUpdateURL; // URL where dll/zip is located
+ // set to UPDATER_AUTOREGISTER if you want Updater to find the file listing URLs (ensure plugin shortName matches file listing!)
+
+ char *szBetaVersionURL; // URL where the beta version can be found (NULL to disable betas)
+ BYTE *pbBetaVersionPrefix; // bytes occuring in VersionURL before the version, used to locate the version information within the URL data
+ int cpbBetaVersionPrefix; // number of bytes pointed to by pbVersionPrefix
+ char *szBetaUpdateURL; // URL where dll/zip is located
+
+ BYTE *pbVersion; // bytes of current version, used for comparison with those in VersionURL
+ int cpbVersion; // number of bytes pointed to by pbVersion
+
+ char *szBetaChangelogURL; // url for displaying changelog for beta versions
+} Update;
+
+// register a comonent with Updater
+//
+// wparam = 0
+// lparam = (LPARAM)&Update
+#define MS_UPDATE_REGISTER "Update/Register"
+
+// utility functions to create a version string from a DWORD or from pluginInfo
+// point buf at a buffer at least 16 chars wide - but note the version string returned may be shorter
+//
+__inline static char *CreateVersionString(DWORD version, char *buf) {
+ mir_snprintf(buf, 16, "%d.%d.%d.%d", (version >> 24) & 0xFF, (version >> 16) & 0xFF, (version >> 8) & 0xFF, version & 0xFF);
+ return buf;
+}
+
+__inline static char *CreateVersionStringPlugin(PLUGININFO *pluginInfo, char *buf) {
+ return CreateVersionString(pluginInfo->version, buf);
+}
+
+__inline static char *CreateVersionStringPluginEx(PLUGININFOEX *pluginInfo, char *buf) {
+ return CreateVersionString(pluginInfo->version, buf);
+}
+
+
+// register the 'easy' way - use this method if you have no beta URL and the plugin is on the miranda file listing
+// NOTE: the plugin version string on the file listing must be the string version of the version in pluginInfo (i.e. 0.0.0.1,
+// four numbers between 0 and 255 inclusivem, so no letters, brackets, etc.)
+//
+// wParam = (int)fileID - this is the file ID from the file listing (i.e. the number at the end of the download link)
+// lParam = (PLUGININFO*)&pluginInfo
+#define MS_UPDATE_REGISTERFL "Update/RegisterFL"
+
+// this function can be used to 'unregister' components - useful for plugins that register non-plugin/langpack components and
+// may need to change those components on the fly
+// lParam = (char *)szComponentName
+#define MS_UPDATE_UNREGISTER "Update/Unregister"
+
+// this event is fired when the startup process is complete, but NOT if a restart is imminent
+// it is designed for status managment plugins to use as a trigger for beggining their own startup process
+// wParam = lParam = 0 (unused)
+// (added in version 0.1.6.0)
+#define ME_UPDATE_STARTUPDONE "Update/StartupDone"
+
+// this service can be used to enable/disable Updater's global status control
+// it can be called from the StartupDone event handler
+// wParam = (BOOL)enable
+// lParam = 0
+// (added in version 0.1.6.0)
+#define MS_UPDATE_ENABLESTATUSCONTROL "Update/EnableStatusControl"
+
+// An description of usage of the above service and event:
+// Say you are a status control plugin that normally sets protocol or global statuses in your ModulesLoaded event handler.
+// In order to make yourself 'Updater compatible', you would move the status control code from ModulesLoaded to another function,
+// say DoStartup. Then, in ModulesLoaded you would check for the existence of the MS_UPDATE_ENABLESTATUSCONTROL service.
+// If it does not exist, call DoStartup. If it does exist, hook the ME_UPDATE_STARTUPDONE event and call DoStartup from there. You may
+// also wish to call MS_UPDATE_ENABLESTATUSCONTROL with wParam == FALSE at this time, to disable Updater's own status control feature.
+
+// this service can be used to determine whether updates are possible for a component with the given name
+// wParam = 0
+// lParam = (char *)szComponentName
+// returns TRUE if updates are supported, FALSE otherwise
+#define MS_UPDATE_ISUPDATESUPPORTED "Update/IsUpdateSupported"
+
+#endif
+
+
+/////////////// Usage Example ///////////////
+
+#ifdef EXAMPLE_CODE
+
+// you need to #include "m_updater.h" and HookEvent(ME_SYSTEM_MODULESLOADED, OnModulesLoaded) in your Load function...
+
+int OnModulesLoaded(WPARAM wParam, LPARAM lParam) {
+
+ Update update = {0}; // for c you'd use memset or ZeroMemory...
+ char szVersion[16];
+
+ update.cbSize = sizeof(Update);
+
+ update.szComponentName = pluginInfo.shortName;
+ update.pbVersion = (BYTE *)CreateVersionString(&pluginInfo, szVersion);
+ update.cpbVersion = strlen((char *)update.pbVersion);
+
+ // these are the three lines that matter - the archive, the page containing the version string, and the text (or data)
+ // before the version that we use to locate it on the page
+ // (note that if the update URL and the version URL point to standard file listing entries, the backend xml
+ // data will be used to check for updates rather than the actual web page - this is not true for beta urls)
+ update.szUpdateURL = "http://scottellis.com.au:81/test/updater.zip";
+ update.szVersionURL = "http://scottellis.com.au:81/test/updater_test.html";
+ update.pbVersionPrefix = (BYTE *)"Updater version ";
+
+ update.cpbVersionPrefix = strlen((char *)update.pbVersionPrefix);
+
+ // do the same for the beta versions of the above struct members if you wish to allow beta updates from another URL
+
+ CallService(MS_UPDATE_REGISTER, 0, (WPARAM)&update);
+
+ // Alternatively, to register a plugin with e.g. file ID 2254 on the file listing...
+ // CallService(MS_UPDATE_REGISTERFL, (WPARAM)2254, (LPARAM)&pluginInfo);
+
+ return 0;
+}
+
+#endif
diff --git a/MenuItemEx/version.h b/MenuItemEx/version.h
new file mode 100644
index 0000000..1259601
--- /dev/null
+++ b/MenuItemEx/version.h
@@ -0,0 +1,32 @@
+#define __FILEVERSION_STRING 1,3,0,8
+#define __VERSION_STRING "1.3.0.8"
+#define __VERSION_DWORD 0x01030008
+
+#if defined (_WIN64)
+#define __PLUGIN_NAME "MenuItemEx (x64) plugin for Miranda IM"
+#define __PLUGIN_ID 4304
+#define __PLUGIN_ID_STR "4304"
+#elif (_UNICODE)
+#define __PLUGIN_NAME "MenuItemEx (Unicode) plugin for Miranda IM"
+#define __PLUGIN_ID 4036
+#define __PLUGIN_ID_STR "4036"
+#else
+#define __PLUGIN_NAME "MenuItemEx plugin for Miranda IM"
+#define __PLUGIN_ID 4303
+#define __PLUGIN_ID_STR "4303"
+#endif
+
+#define __WEB "http://addons.miranda-im.org/details.php?action=viewfile&id="
+
+#define __DESC "Adds some useful options to a contacts menu."
+#define __AUTHORS "Heiko Schillinger, Baloo, Billy_Bons"
+#define __EMAIL "micron@nexgo.de, baloo@bk.ru, tatarinov.sergey@gmail.com"
+#define __COPYRIGHTS "© 2001-03 Heiko Schillinger, © 2006-08 Baloo, © 2009-10 Billy_Bons"
+
+#ifdef _UNICODE
+// {b1902a52-9114-4d7e-ac2e-b3a52e01d574}
+#define MIID_MENUEX {0xb1902a52, 0x9114, 0x4d7e, { 0xac, 0x2e, 0xb3, 0xa5, 0x2e, 0x01, 0xd5, 0x74 }}
+#else
+// {0C9B8DDC-4894-4b28-ADF2-FAC071BBBD53}
+#define MIID_MENUEX {0xc9b8ddc, 0x4894, 0x4b28, { 0xad, 0xf2, 0xfa, 0xc0, 0x71, 0xbb, 0xbd, 0x53 }}
+#endif
diff --git a/MenuItemEx/version.rc b/MenuItemEx/version.rc
new file mode 100644
index 0000000..de21f46
--- /dev/null
+++ b/MenuItemEx/version.rc
@@ -0,0 +1,38 @@
+#include "version.h"
+
+/////////////////////////////////////////////////////////////////////////////
+//
+// Version
+//
+
+VS_VERSION_INFO VERSIONINFO
+ FILEVERSION __FILEVERSION_STRING
+ PRODUCTVERSION __FILEVERSION_STRING
+ FILEFLAGSMASK 0x17L
+#ifdef _DEBUG
+ FILEFLAGS 0x1L
+#else
+ FILEFLAGS 0x0L
+#endif
+ FILEOS 0x4L
+ FILETYPE 0x2L
+ FILESUBTYPE 0x0L
+BEGIN
+ BLOCK "StringFileInfo"
+ BEGIN
+ BLOCK "040904b0"
+ BEGIN
+ VALUE "FileDescription", __PLUGIN_NAME
+ VALUE "FileVersion", __VERSION_STRING
+ VALUE "InternalName", "menuex"
+ VALUE "LegalCopyright", __COPYRIGHTS
+ VALUE "OriginalFilename", "menuex.dll"
+ VALUE "ProductName", "menuex"
+ VALUE "ProductVersion", __VERSION_STRING
+ END
+ END
+ BLOCK "VarFileInfo"
+ BEGIN
+ VALUE "Translation", 0x409, 1200
+ END
+END