Changed NOTIFYICONDATA structure to version 4 (Vista and later).
This commit is contained in:
@@ -55,12 +55,10 @@ MENUITEMINFOW mii = { 0 };
|
|||||||
LPVOID szWinTitleBuffer = nullptr;
|
LPVOID szWinTitleBuffer = nullptr;
|
||||||
LPVOID szWinClassBuffer = nullptr;
|
LPVOID szWinClassBuffer = nullptr;
|
||||||
|
|
||||||
// {2D7B7F30-4B5F-4380-9807-57D7A2E37F6C}
|
|
||||||
// static const GUID guid = { 0x2d7b7f30, 0x4b5f, 0x4380, { 0x98, 0x7, 0x57, 0xd7, 0xa2, 0xe3, 0x7f, 0x6c } };
|
|
||||||
|
|
||||||
// Forward declarations of functions included in this code module:
|
// Forward declarations of functions included in this code module:
|
||||||
VOID HandlingTrayIcon();
|
VOID HandlingTrayIcon();
|
||||||
VOID ShowError(UINT, LPCWSTR);
|
VOID ShowError(UINT, LPCWSTR);
|
||||||
|
VOID ShowPopupMenu(HWND, POINT);
|
||||||
BOOL IsWindowApprooved(HWND);
|
BOOL IsWindowApprooved(HWND);
|
||||||
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
|
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
|
||||||
LRESULT CALLBACK KeyboardHookProc(int, WPARAM, LPARAM);
|
LRESULT CALLBACK KeyboardHookProc(int, WPARAM, LPARAM);
|
||||||
@@ -279,11 +277,11 @@ LRESULT CALLBACK WndProc(HWND hMainWnd, UINT message, WPARAM wParam, LPARAM lPar
|
|||||||
|
|
||||||
nid.cbSize = sizeof(NOTIFYICONDATAW);
|
nid.cbSize = sizeof(NOTIFYICONDATAW);
|
||||||
nid.hWnd = hMainWnd;
|
nid.hWnd = hMainWnd;
|
||||||
nid.uVersion = NOTIFYICON_VERSION;
|
nid.uVersion = NOTIFYICON_VERSION_4;
|
||||||
nid.uCallbackMessage = WM_WCW;
|
nid.uCallbackMessage = WM_WCW;
|
||||||
nid.hIcon = hIconSmall;
|
nid.hIcon = hIconSmall;
|
||||||
nid.uID = IDI_TRAYICON;
|
nid.uID = IDI_TRAYICON;
|
||||||
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
|
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP | NIF_SHOWTIP;
|
||||||
StringCchCopyW(nid.szTip, _countof(nid.szTip), szTitle);
|
StringCchCopyW(nid.szTip, _countof(nid.szTip), szTitle);
|
||||||
|
|
||||||
uMsgRestore = RegisterWindowMessageW(L"TaskbarCreated");
|
uMsgRestore = RegisterWindowMessageW(L"TaskbarCreated");
|
||||||
@@ -339,27 +337,31 @@ LRESULT CALLBACK WndProc(HWND hMainWnd, UINT message, WPARAM wParam, LPARAM lPar
|
|||||||
|
|
||||||
case WM_WCW: // Popup menu handler
|
case WM_WCW: // Popup menu handler
|
||||||
{
|
{
|
||||||
if (IDI_TRAYICON == wParam && (WM_RBUTTONDOWN == lParam || WM_LBUTTONDOWN == lParam))
|
if (WM_CONTEXTMENU == LOWORD(lParam))
|
||||||
{
|
{
|
||||||
logger.Out(L"%s(%d): Entering the WM_WCW message handler", TEXT(__FUNCTION__), __LINE__);
|
logger.Out(L"%s(%d): Recived WM_CONTEXTMENU message", TEXT(__FUNCTION__), __LINE__);
|
||||||
|
|
||||||
POINT pt;
|
POINT pt{ GET_X_LPARAM(wParam), GET_Y_LPARAM(wParam) };
|
||||||
GetCursorPos(&pt);
|
ShowPopupMenu(hMainWnd, pt);
|
||||||
SetForegroundWindow(hMainWnd);
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
UINT uFlags = TPM_RETURNCMD | TPM_RIGHTBUTTON;
|
case WM_COMMAND:
|
||||||
GetSystemMetrics(SM_MENUDROPALIGNMENT) != 0 ? uFlags |= TPM_RIGHTALIGN : uFlags |= TPM_LEFTALIGN;
|
{
|
||||||
|
int wmId = LOWORD(wParam);
|
||||||
int idMenu = TrackPopupMenuEx(hPopup, uFlags, pt.x, pt.y, hMainWnd, NULL);
|
// Parse the menu selections:
|
||||||
PostMessageW(hMainWnd, WM_NULL, 0, 0);
|
switch (wmId)
|
||||||
if (ID_POPUPMENU_ICON == idMenu)
|
{
|
||||||
|
case ID_POPUPMENU_ICON:
|
||||||
{
|
{
|
||||||
logger.Out(L"%s(%d): Pressed the 'Hide icon' menuitem", TEXT(__FUNCTION__), __LINE__);
|
logger.Out(L"%s(%d): Pressed the 'Hide icon' menuitem", TEXT(__FUNCTION__), __LINE__);
|
||||||
|
|
||||||
fShowIcon = FALSE;
|
fShowIcon = FALSE;
|
||||||
HandlingTrayIcon();
|
HandlingTrayIcon();
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (ID_POPUPMENU_AREA == idMenu)
|
case ID_POPUPMENU_AREA:
|
||||||
{
|
{
|
||||||
logger.Out(L"%s(%d): Pressed the 'Use workarea' menuitem", TEXT(__FUNCTION__), __LINE__);
|
logger.Out(L"%s(%d): Pressed the 'Use workarea' menuitem", TEXT(__FUNCTION__), __LINE__);
|
||||||
|
|
||||||
@@ -367,8 +369,11 @@ LRESULT CALLBACK WndProc(HWND hMainWnd, UINT message, WPARAM wParam, LPARAM lPar
|
|||||||
bWorkArea ? mii.fState = MFS_CHECKED : mii.fState = MFS_UNCHECKED;
|
bWorkArea ? mii.fState = MFS_CHECKED : mii.fState = MFS_UNCHECKED;
|
||||||
SetMenuItemInfoW(hPopup, ID_POPUPMENU_AREA, FALSE, &mii);
|
SetMenuItemInfoW(hPopup, ID_POPUPMENU_AREA, FALSE, &mii);
|
||||||
logger.Out(L"%s(%d): Changed 'Use workarea' option to %s", TEXT(__FUNCTION__), __LINE__, bWorkArea ? L"True" : L"False");
|
logger.Out(L"%s(%d): Changed 'Use workarea' option to %s", TEXT(__FUNCTION__), __LINE__, bWorkArea ? L"True" : L"False");
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
if (ID_POPUPMENU_HELP == idMenu && !bKPressed)
|
case ID_POPUPMENU_HELP:
|
||||||
|
{
|
||||||
|
if (!bKPressed)
|
||||||
{
|
{
|
||||||
logger.Out(L"%s(%d): Pressed the 'Help' menuitem", TEXT(__FUNCTION__), __LINE__);
|
logger.Out(L"%s(%d): Pressed the 'Help' menuitem", TEXT(__FUNCTION__), __LINE__);
|
||||||
|
|
||||||
@@ -378,7 +383,11 @@ LRESULT CALLBACK WndProc(HWND hMainWnd, UINT message, WPARAM wParam, LPARAM lPar
|
|||||||
MessageBoxW(hMainWnd, szHelp, szTitle, MB_OK | MB_ICONINFORMATION);
|
MessageBoxW(hMainWnd, szHelp, szTitle, MB_OK | MB_ICONINFORMATION);
|
||||||
bKPressed = FALSE;
|
bKPressed = FALSE;
|
||||||
}
|
}
|
||||||
if (ID_POPUPMENU_ABOUT == idMenu && !bKPressed)
|
break;
|
||||||
|
}
|
||||||
|
case ID_POPUPMENU_ABOUT:
|
||||||
|
{
|
||||||
|
if (!bKPressed)
|
||||||
{
|
{
|
||||||
logger.Out(L"%s(%d): Pressed the 'About' menuitem", TEXT(__FUNCTION__), __LINE__);
|
logger.Out(L"%s(%d): Pressed the 'About' menuitem", TEXT(__FUNCTION__), __LINE__);
|
||||||
|
|
||||||
@@ -386,14 +395,15 @@ LRESULT CALLBACK WndProc(HWND hMainWnd, UINT message, WPARAM wParam, LPARAM lPar
|
|||||||
DialogBoxParamW(GetModuleHandleW(NULL), MAKEINTRESOURCEW(IDD_ABOUTBOX), hMainWnd, static_cast<DLGPROC>(About), 0L);
|
DialogBoxParamW(GetModuleHandleW(NULL), MAKEINTRESOURCEW(IDD_ABOUTBOX), hMainWnd, static_cast<DLGPROC>(About), 0L);
|
||||||
bKPressed = FALSE;
|
bKPressed = FALSE;
|
||||||
}
|
}
|
||||||
if (ID_POPUPMENU_EXIT == idMenu)
|
break;
|
||||||
|
}
|
||||||
|
case ID_POPUPMENU_EXIT:
|
||||||
{
|
{
|
||||||
logger.Out(L"%s(%d): Pressed the 'Exit' menuitem", TEXT(__FUNCTION__), __LINE__);
|
logger.Out(L"%s(%d): Pressed the 'Exit' menuitem", TEXT(__FUNCTION__), __LINE__);
|
||||||
|
|
||||||
DestroyWindow(hMainWnd);
|
DestroyWindow(hMainWnd);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
logger.Out(L"%s(%d): Exit from the WM_WCW message handler", TEXT(__FUNCTION__), __LINE__);
|
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -423,10 +433,11 @@ LRESULT CALLBACK WndProc(HWND hMainWnd, UINT message, WPARAM wParam, LPARAM lPar
|
|||||||
Shell_NotifyIconW(NIM_ADD, &nid);
|
Shell_NotifyIconW(NIM_ADD, &nid);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
return DefWindowProcW(hMainWnd, message, wParam, lParam);
|
return DefWindowProcW(hMainWnd, message, wParam, lParam);
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
|
LRESULT CALLBACK MouseHookProc(int nCode, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
@@ -659,6 +670,15 @@ VOID ShowError(UINT uID, LPCWSTR szAppTitle)
|
|||||||
MessageBoxW(NULL, szErrorText, szAppTitle, MB_OK | MB_ICONERROR | MB_TOPMOST);
|
MessageBoxW(NULL, szErrorText, szAppTitle, MB_OK | MB_ICONERROR | MB_TOPMOST);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID ShowPopupMenu(HWND hMainWnd, POINT pt)
|
||||||
|
{
|
||||||
|
SetForegroundWindow(hMainWnd);
|
||||||
|
UINT uFlags = TPM_RIGHTBUTTON;
|
||||||
|
GetSystemMetrics(SM_MENUDROPALIGNMENT) != 0 ? uFlags |= TPM_RIGHTALIGN : uFlags |= TPM_LEFTALIGN;
|
||||||
|
TrackPopupMenuEx(hPopup, uFlags, pt.x, pt.y, hMainWnd, NULL);
|
||||||
|
PostMessageW(hMainWnd, WM_NULL, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
INITCOMMONCONTROLSEX icex = { 0 };
|
INITCOMMONCONTROLSEX icex = { 0 };
|
||||||
|
|||||||
@@ -46,6 +46,7 @@
|
|||||||
#include <vector>
|
#include <vector>
|
||||||
#include <strsafe.h>
|
#include <strsafe.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include <windowsx.h>
|
||||||
#include <wininet.h>
|
#include <wininet.h>
|
||||||
#include <shellapi.h>
|
#include <shellapi.h>
|
||||||
#include <CommCtrl.h>
|
#include <CommCtrl.h>
|
||||||
|
|||||||
Reference in New Issue
Block a user