8 Commits
v1.4 ... v2.1

Author SHA1 Message Date
W0LF
bdb2ebd295 Delete wCenterWindow.h 2020-05-03 18:50:05 +03:00
W0LF
bd5d845ec1 Delete targetver.h 2020-05-03 18:49:07 +03:00
W0LF
a6c866d1dd Delete framework.h 2020-05-03 18:48:50 +03:00
W0LF
38a570310f Delete Resource.h 2020-05-03 18:48:32 +03:00
W0LF
4a96fef1c7 new version 2020-05-03 18:47:31 +03:00
W0LF
0f47ebae9e new version 2020-05-03 18:45:44 +03:00
f8b925d0f8 Update Readme.md 2020-01-24 15:06:19 +03:00
35f791d7a0 Added 'Hide Icon' option to menu. 2020-01-24 15:03:52 +03:00
12 changed files with 499 additions and 552 deletions

View File

@@ -1,6 +1,6 @@
# wCenterWindow # wCenterWindow
This program centers the current active window by a `LCTRL + LWIN + C` hotkey. This program centers the current active window by a 'LCTRL + LWIN + C' hotkey.
`LCTRL + LWIN + I` hotkey - hide tray icon. 'LCTRL + LWIN + I' hotkey - hide tray icon.
You can add `/hide` option to command line for hiding trayicon at startup. You can also use commandline option '/hide' for hide trayicon at startup.

View File

@@ -1,31 +1,31 @@
 
Microsoft Visual Studio Solution File, Format Version 12.00 Microsoft Visual Studio Solution File, Format Version 12.00
# Visual Studio 15 # Visual Studio 15
VisualStudioVersion = 15.0.28307.1000 VisualStudioVersion = 15.0.28307.1082
MinimumVisualStudioVersion = 10.0.40219.1 MinimumVisualStudioVersion = 10.0.40219.1
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wCenterWindow", "wCenterWindow\wCenterWindow.vcxproj", "{6A775901-6C34-4E96-B359-C11C76A520BB}" Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "wCenterWindow", "wCenterWindow\wCenterWindow.vcxproj", "{2494B3F2-585E-4A2E-A013-20A15AE25B9E}"
EndProject EndProject
Global Global
GlobalSection(SolutionConfigurationPlatforms) = preSolution GlobalSection(SolutionConfigurationPlatforms) = preSolution
Debug|x64 = Debug|x64 Debug|x64 = Debug|x64
Debug|x86 = Debug|x86 Debug|x86 = Debug|x86
Release|x64 = Release|x64 Release|x64 = Release|x64
Release|x86 = Release|x86 Release|x86 = Release|x86
EndGlobalSection EndGlobalSection
GlobalSection(ProjectConfigurationPlatforms) = postSolution GlobalSection(ProjectConfigurationPlatforms) = postSolution
{6A775901-6C34-4E96-B359-C11C76A520BB}.Debug|x64.ActiveCfg = Debug|x64 {2494B3F2-585E-4A2E-A013-20A15AE25B9E}.Debug|x64.ActiveCfg = Debug|x64
{6A775901-6C34-4E96-B359-C11C76A520BB}.Debug|x64.Build.0 = Debug|x64 {2494B3F2-585E-4A2E-A013-20A15AE25B9E}.Debug|x64.Build.0 = Debug|x64
{6A775901-6C34-4E96-B359-C11C76A520BB}.Debug|x86.ActiveCfg = Debug|Win32 {2494B3F2-585E-4A2E-A013-20A15AE25B9E}.Debug|x86.ActiveCfg = Debug|Win32
{6A775901-6C34-4E96-B359-C11C76A520BB}.Debug|x86.Build.0 = Debug|Win32 {2494B3F2-585E-4A2E-A013-20A15AE25B9E}.Debug|x86.Build.0 = Debug|Win32
{6A775901-6C34-4E96-B359-C11C76A520BB}.Release|x64.ActiveCfg = Release|x64 {2494B3F2-585E-4A2E-A013-20A15AE25B9E}.Release|x64.ActiveCfg = Release|x64
{6A775901-6C34-4E96-B359-C11C76A520BB}.Release|x64.Build.0 = Release|x64 {2494B3F2-585E-4A2E-A013-20A15AE25B9E}.Release|x64.Build.0 = Release|x64
{6A775901-6C34-4E96-B359-C11C76A520BB}.Release|x86.ActiveCfg = Release|Win32 {2494B3F2-585E-4A2E-A013-20A15AE25B9E}.Release|x86.ActiveCfg = Release|Win32
{6A775901-6C34-4E96-B359-C11C76A520BB}.Release|x86.Build.0 = Release|Win32 {2494B3F2-585E-4A2E-A013-20A15AE25B9E}.Release|x86.Build.0 = Release|Win32
EndGlobalSection EndGlobalSection
GlobalSection(SolutionProperties) = preSolution GlobalSection(SolutionProperties) = preSolution
HideSolutionNode = FALSE HideSolutionNode = FALSE
EndGlobalSection EndGlobalSection
GlobalSection(ExtensibilityGlobals) = postSolution GlobalSection(ExtensibilityGlobals) = postSolution
SolutionGuid = {CAD0B026-63B6-4645-9B26-22CD0E1049B7} SolutionGuid = {34E34C1F-8A53-40DA-BA24-78C20152D64C}
EndGlobalSection EndGlobalSection
EndGlobal EndGlobal

View File

@@ -1,27 +0,0 @@
// resource.h
#define IDS_APP_TITLE 100
#define IDS_CLASSNAME 101
#define IDS_HELPTEXT 102
#define IDI_TRAYICON 103
#define IDR_MENU 104
#define ID_POPUPMENU_HELP 105
#define ID_POPUPMENU_EXIT 106
#define IDS_ERR_MAIN 107
#define IDS_ERR_WND 108
#define IDS_ERR_ICON 109
#define IDS_ERR_MENU 110
#define IDS_ERR_POPUP 111
#define IDS_ERR_HOOK 112
#define IDS_RUNNING 113
#define IDC_STATIC -1
// Next default values for new objects
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NO_MFC 1
#define _APS_NEXT_RESOURCE_VALUE 129
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1000
#define _APS_NEXT_SYMED_VALUE 110
#endif
#endif

View File

@@ -1,15 +0,0 @@
// header.h: включаемый файл для стандартных системных включаемых файлов
// или включаемые файлы для конкретного проекта
#pragma once
#include "targetver.h"
#define WIN32_LEAN_AND_MEAN // Исключите редко используемые компоненты из заголовков Windows
// Файлы заголовков Windows
#include <windows.h>
#include <strsafe.h>
#include <shellapi.h>
// Файлы заголовков среды выполнения C
#include <stdlib.h>
#include <malloc.h>
#include <memory.h>
#include <tchar.h>

19
wCenterWindow/resource.h Normal file
View File

@@ -0,0 +1,19 @@
#pragma once
#define IDS_APP_TITLE 100
#define IDS_CLASSNAME 101
#define IDS_ABOUT 102
#define IDI_TRAYICON 103
#define IDR_MENU 104
#define ID_POPUPMENU_ICON 105
#define ID_POPUPMENU_AREA 106
#define ID_POPUPMENU_ABOUT 107
#define ID_POPUPMENU_EXIT 108
#define IDS_ERR_MAIN 109
#define IDS_ERR_WND 110
#define IDS_ERR_ICON 111
#define IDS_ERR_MENU 112
#define IDS_ERR_POPUP 113
#define IDS_ERR_HOOK 114
#define IDS_RUNNING 115
#define IDC_STATIC -1

View File

@@ -1,2 +0,0 @@
#pragma once
#include <SDKDDKVer.h>

View File

@@ -1,255 +1,263 @@
// wCenterWindow.cpp : Определяет точку входа для приложения. // wCenterWindow, v2.1
#include "framework.h" #include <windows.h>
#include "wCenterWindow.h" #include <strsafe.h>
#include "resource.h"
#define MAX_LOADSTRING 80 #include "S:\MyFunctions\MoveWindowToMonitorCenter.h"
#define WM_WCW WM_USER + 0x7F00
#define MAX_LOADSTRING 32
// Глобальные переменные: #define WM_WCW 0x8F00
HINSTANCE hInst; // Текущий экземпляр
WCHAR szTitle[MAX_LOADSTRING]; // Текст строки заголовка // Global variables:
WCHAR szClass[MAX_LOADSTRING]; // Имя класса главного окна HINSTANCE hInst; // Instance
WCHAR szHelp[MAX_LOADSTRING]; // Текст описания CHAR szTitle[MAX_LOADSTRING]; // Window's title
HHOOK KeyboardHook; CHAR szClass[MAX_LOADSTRING]; // Window's class
HICON hIcon; CHAR szAbout[MAX_LOADSTRING * 14]; // Description text
HMENU hMenu, hPopup; HHOOK KeyboardHook;
HWND hWnd; HICON hIcon;
NOTIFYICONDATA nid = { 0 }; HMENU hMenu, hPopup;
KBDLLHOOKSTRUCT *pkhs; HWND hWnd, hTaskBar, hDesktop, hProgman;
BOOL pressed = FALSE, showIcon = TRUE; BOOL bPressed = FALSE, bShowIcon = TRUE, bWorkArea = TRUE;
BOOL bLCTRL = FALSE, bLWIN = FALSE, bKEYI = FALSE, bKEYC = FALSE; BOOL bLCTRL = FALSE, bLWIN = FALSE, bKEYI = FALSE, bKEYC = FALSE;
int dtCenterX, dtCenterY;
NOTIFYICONDATA nid = { 0 };
// Прототипы функций LPKBDLLHOOKSTRUCT pkhs;
ATOM MyRegisterClass(HINSTANCE); MENUITEMINFO mii;
VOID ShowError(HINSTANCE, UINT); POINT ptMousePos;
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK KeyboardHookProc(int, WPARAM, LPARAM); // Function's prototypes
BOOL CreateTrayIcon(); ATOM MyRegisterClass(HINSTANCE);
VOID HandlingTrayIcon();
VOID parseCmdLine() VOID ShowError(UINT);
{ LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
int nArgs = 0; LRESULT CALLBACK KeyboardHookProc(int, WPARAM, LPARAM);
LPWSTR *szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
(nArgs >= 2 && 0 == lstrcmpiW(szArglist[1], L"/hide")) ? showIcon = FALSE : showIcon = TRUE; int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
LocalFree(szArglist); {
} UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);
// Точка входа
int APIENTRY wWinMain(_In_ HINSTANCE hInstance, hInst = hInstance;
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR lpCmdLine, LoadString(hInstance, IDS_APP_TITLE, szTitle, _countof(szTitle));
_In_ int nCmdShow) LoadString(hInstance, IDS_CLASSNAME, szClass, _countof(szClass));
{
UNREFERENCED_PARAMETER(hPrevInstance); if (FindWindow(szClass, NULL))
UNREFERENCED_PARAMETER(lpCmdLine); {
ShowError(IDS_RUNNING);
LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING); return FALSE;
LoadStringW(hInstance, IDS_CLASSNAME, szClass, MAX_LOADSTRING); }
if (FindWindow(szClass, NULL))
{ MyRegisterClass(hInstance);
ShowError(hInstance, IDS_RUNNING); hWnd = CreateWindowEx(0, szClass, szTitle, 0, 0, 0, 0, 0, NULL, NULL, hInstance, NULL);
return FALSE; if (!hWnd)
} {
MyRegisterClass(hInstance); ShowError(IDS_ERR_WND);
return FALSE;
hWnd = CreateWindowExW(0, szClass, szTitle, 0, 0, 0, 0, 0, NULL, NULL, hInstance, NULL); }
if (!hWnd)
{ int nArgs = 0;
ShowError(hInstance, IDS_ERR_WND); LPWSTR *szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
return FALSE; (nArgs >= 2 && 0 == lstrcmpiW(szArglist[1], L"/hide")) ? bShowIcon = FALSE : bShowIcon = TRUE;
} LocalFree(szArglist);
HandlingTrayIcon();
parseCmdLine();
if (showIcon) hTaskBar = FindWindow("Shell_TrayWnd", NULL);
{ hProgman = FindWindow("Progman", NULL);
if (!CreateTrayIcon()) hDesktop = GetDesktopWindow();
{
ShowError(hInstance, IDS_ERR_ICON); MSG msg;
SendMessage(hWnd, WM_CLOSE, NULL, NULL); BOOL bRet;
}
} while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0)
{
hMenu = LoadMenu(hInstance, MAKEINTRESOURCE(IDR_MENU)); if (bRet == -1)
if (!hMenu) {
{ ShowError(IDS_ERR_MAIN);
ShowError(hInstance, IDS_ERR_MENU); return -1;
SendMessage(hWnd, WM_CLOSE, NULL, NULL); }
} else
{
hPopup = GetSubMenu(hMenu, 0); TranslateMessage(&msg);
if (!hPopup) DispatchMessage(&msg);
{ }
ShowError(hInstance, IDS_ERR_POPUP); }
SendMessage(hWnd, WM_CLOSE, NULL, NULL); return (int)msg.wParam;
} }
KeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProc, hInstance, NULL); ATOM MyRegisterClass(HINSTANCE hInstance)
if (!KeyboardHook) {
{ WNDCLASSEX wcex = { 0 };
ShowError(hInstance, IDS_ERR_HOOK); wcex.cbSize = sizeof(WNDCLASSEX);
SendMessage(hWnd, WM_CLOSE, NULL, NULL); wcex.lpfnWndProc = WndProc;
} wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TRAYICON));
LoadStringW(hInstance, IDS_HELPTEXT, szHelp, MAX_LOADSTRING); wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
RECT dtrc = { 0 }; wcex.lpszClassName = szClass;
SystemParametersInfo(SPI_GETWORKAREA, NULL, &dtrc, FALSE); wcex.hIconSm = wcex.hIcon;
dtCenterX = dtrc.right / 2, dtCenterY = dtrc.bottom / 2; hIcon = wcex.hIcon;
return RegisterClassEx(&wcex);
MSG msg; }
BOOL bRet;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
while ((bRet = GetMessage(&msg, NULL, 0, 0)) != 0) {
{ switch (message)
if (bRet == -1) {
{ case WM_CREATE:
ShowError(hInstance, IDS_ERR_MAIN); {
return -1; hMenu = LoadMenu(hInst, MAKEINTRESOURCE(IDR_MENU));
} if (!hMenu)
else {
{ ShowError(IDS_ERR_MENU);
TranslateMessage(&msg); SendMessage(hWnd, WM_CLOSE, NULL, NULL);
DispatchMessage(&msg); }
}
} hPopup = GetSubMenu(hMenu, 0);
return (int)msg.wParam; if (!hPopup)
} {
ShowError(IDS_ERR_POPUP);
ATOM MyRegisterClass(HINSTANCE hInstance) SendMessage(hWnd, WM_CLOSE, NULL, NULL);
{ }
WNDCLASSEX wcex = { 0 };
wcex.cbSize = sizeof(WNDCLASSEX); mii.cbSize = sizeof(MENUITEMINFO);
wcex.lpfnWndProc = WndProc; mii.fMask = MIIM_STATE;
wcex.hInstance = hInstance; bWorkArea ? mii.fState = MFS_CHECKED : mii.fState = MFS_UNCHECKED;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_TRAYICON)); SetMenuItemInfo(hPopup, ID_POPUPMENU_AREA, FALSE, &mii);
wcex.hCursor = LoadCursor(nullptr, IDC_ARROW);
wcex.lpszClassName = szClass; nid.cbSize = sizeof(NOTIFYICONDATA);
wcex.hIconSm = wcex.hIcon; nid.hWnd = hWnd;
hIcon = wcex.hIcon; nid.uVersion = NOTIFYICON_VERSION;
return RegisterClassEx(&wcex); nid.uCallbackMessage = WM_WCW;
} nid.hIcon = hIcon;
nid.uID = IDI_TRAYICON;
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP;
{ nid.dwInfoFlags = NIIF_INFO;
switch (message) StringCchCopy(nid.szTip, _countof(nid.szTip), szTitle);
{
case WM_WCW: KeyboardHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardHookProc, hInst, NULL);
if (lParam == WM_RBUTTONDOWN && wParam == IDI_TRAYICON) if (!KeyboardHook)
{ {
SetForegroundWindow(hWnd); ShowError(IDS_ERR_HOOK);
POINT pt; SendMessage(hWnd, WM_CLOSE, NULL, NULL);
GetCursorPos(&pt); }
int idMenu = TrackPopupMenu(hPopup, TPM_RETURNCMD, pt.x, pt.y, 0, hWnd, NULL);
if (idMenu == ID_POPUPMENU_HELP && !pressed) LoadString(hInst, IDS_ABOUT, szAbout, _countof(szAbout));
{ }
pressed = TRUE; break;
if (MessageBox(hWnd, szHelp, szTitle, MB_OK | MB_TOPMOST) == IDOK) pressed = FALSE;
} case WM_WCW:
if (idMenu == ID_POPUPMENU_EXIT) SendMessage(hWnd, WM_CLOSE, NULL, NULL); {
} if (lParam == WM_RBUTTONDOWN && wParam == IDI_TRAYICON)
break; {
SetForegroundWindow(hWnd);
case WM_DESTROY: POINT pt;
if (KeyboardHook) UnhookWindowsHookEx(KeyboardHook); GetCursorPos(&pt);
if (hMenu) DestroyMenu(hMenu); int idMenu = TrackPopupMenu(hPopup, TPM_RETURNCMD, pt.x, pt.y, 0, hWnd, NULL);
Shell_NotifyIcon(NIM_DELETE, &nid); if (idMenu == ID_POPUPMENU_ICON)
PostQuitMessage(0); {
break; bShowIcon = FALSE;
HandlingTrayIcon();
default: }
return DefWindowProc(hWnd, message, wParam, lParam); if (idMenu == ID_POPUPMENU_AREA)
} {
return 0; bWorkArea = !bWorkArea;
} bWorkArea ? mii.fState = MFS_CHECKED : mii.fState = MFS_UNCHECKED;
SetMenuItemInfo(hPopup, ID_POPUPMENU_AREA, FALSE, &mii);
LRESULT CALLBACK KeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam) }
{ if (idMenu == ID_POPUPMENU_ABOUT && !bPressed)
pkhs = (KBDLLHOOKSTRUCT*)lParam; {
bPressed = TRUE;
if (wParam == WM_KEYUP) if (MessageBox(hWnd, szAbout, szTitle, MB_OK | MB_TOPMOST | MB_ICONINFORMATION) == IDOK) bPressed = FALSE;
{ }
if (pkhs->vkCode == VK_LCONTROL) bLCTRL = FALSE; if (idMenu == ID_POPUPMENU_EXIT) SendMessage(hWnd, WM_CLOSE, NULL, NULL);
if (pkhs->vkCode == VK_LWIN) bLWIN = FALSE; }
pressed = FALSE; }
} break;
if (wParam == WM_KEYDOWN) case WM_DESTROY:
{ {
if (pkhs->vkCode == VK_LCONTROL) bLCTRL = TRUE; if (KeyboardHook) UnhookWindowsHookEx(KeyboardHook);
if (pkhs->vkCode == VK_LWIN) bLWIN = TRUE; if (hMenu) DestroyMenu(hMenu);
Shell_NotifyIcon(NIM_DELETE, &nid);
if (bLCTRL && bLWIN && pkhs->vkCode == 0x49 && !pressed) // 'I' key PostQuitMessage(0);
{ }
pressed = TRUE; break;
showIcon = !showIcon;
if (showIcon) default:
{ return DefWindowProc(hWnd, message, wParam, lParam);
if (!CreateTrayIcon()) }
{ return 0;
ShowError(GetModuleHandle(NULL), IDS_ERR_ICON); }
showIcon = FALSE;
}
} LRESULT CALLBACK KeyboardHookProc(int nCode, WPARAM wParam, LPARAM lParam)
else {
{ pkhs = (KBDLLHOOKSTRUCT*)lParam;
Shell_NotifyIcon(NIM_DELETE, &nid);
} if (wParam == WM_KEYUP)
} {
if (pkhs->vkCode == VK_LCONTROL) bLCTRL = FALSE;
if (bLCTRL && bLWIN && pkhs->vkCode == 0x43 && !pressed) // 'C' key if (pkhs->vkCode == VK_LWIN) bLWIN = FALSE;
{ bPressed = FALSE;
pressed = TRUE; }
HWND fgWindow = GetForegroundWindow();
if (fgWindow) if (wParam == WM_KEYDOWN)
{ {
HWND parentWindow = fgWindow; if (pkhs->vkCode == VK_LCONTROL) bLCTRL = TRUE;
while (TRUE) if (pkhs->vkCode == VK_LWIN) bLWIN = TRUE;
{
parentWindow = GetParent(fgWindow); if (bLCTRL && bLWIN && pkhs->vkCode == 0x49 && !bPressed) // 'I' key
if (parentWindow) fgWindow = parentWindow; {
else break; bPressed = TRUE;
} bShowIcon = !bShowIcon;
WINDOWPLACEMENT wp = { 0 }; HandlingTrayIcon();
wp.length = sizeof(WINDOWPLACEMENT); return TRUE;
GetWindowPlacement(fgWindow, &wp); }
if (wp.showCmd == SW_SHOWNORMAL)
{ if (bLCTRL && bLWIN && pkhs->vkCode == 0x43 && !bPressed) // 'C' key
int fgW = wp.rcNormalPosition.right - wp.rcNormalPosition.left; {
int fgH = wp.rcNormalPosition.bottom - wp.rcNormalPosition.top; bPressed = TRUE;
int fgX = dtCenterX - (fgW / 2); HWND hFgWnd = GetForegroundWindow();
int fgY = dtCenterY - (fgH / 2);
wp.rcNormalPosition.left = fgX; if (hFgWnd)
wp.rcNormalPosition.top = fgY; {
wp.rcNormalPosition.right = fgX + fgW; if (hFgWnd != hDesktop && hFgWnd != hTaskBar && hFgWnd != hProgman)
wp.rcNormalPosition.bottom = fgY + fgH; {
SendMessage(fgWindow, WM_ENTERSIZEMOVE, NULL, NULL); if (!IsIconic(hFgWnd) && !IsZoomed(hFgWnd))
SetWindowPlacement(fgWindow, &wp); {
SendMessage(fgWindow, WM_EXITSIZEMOVE, NULL, NULL); RECT fgwrc;
} GetWindowRect(hFgWnd, &fgwrc);
} LONG fgWidth = fgwrc.right - fgwrc.left;
} LONG fgHeight = fgwrc.bottom - fgwrc.top;
} MoveWindowToMonitorCenter(hFgWnd, fgWidth, fgHeight, bWorkArea, FALSE);
return CallNextHookEx(NULL, nCode, wParam, lParam); }
} }
}
BOOL CreateTrayIcon() return TRUE;
{ }
nid.cbSize = sizeof(NOTIFYICONDATA); }
nid.hWnd = hWnd; return CallNextHookEx(NULL, nCode, wParam, lParam);
nid.uVersion = NOTIFYICON_VERSION; }
nid.uCallbackMessage = WM_WCW;
nid.hIcon = hIcon; VOID HandlingTrayIcon()
nid.uID = IDI_TRAYICON; {
nid.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; if (bShowIcon)
nid.dwInfoFlags = NIIF_INFO; {
StringCchCopy(nid.szTip, sizeof(nid.szTip), szTitle); if (!Shell_NotifyIcon(NIM_ADD, &nid))
return Shell_NotifyIcon(NIM_ADD, &nid); {
} ShowError(IDS_ERR_ICON);
bShowIcon = FALSE;
VOID ShowError(HINSTANCE hInstance, UINT uID) }
{ }
WCHAR szErrorText[MAX_LOADSTRING]; // Текст ошибки else
LoadStringW(hInstance, uID, szErrorText, MAX_LOADSTRING); {
MessageBox(hWnd, szErrorText, szTitle, MB_OK | MB_ICONERROR); Shell_NotifyIcon(NIM_DELETE, &nid);
} }
}
VOID ShowError(UINT uID)
{
CHAR szErrorText[MAX_LOADSTRING]; // Error's text
LoadString(hInst, uID, szErrorText, _countof(szErrorText));
MessageBox(hWnd, szErrorText, szTitle, MB_OK | MB_ICONERROR);
}

View File

@@ -1,2 +0,0 @@
#pragma once
#include "resource.h"

Binary file not shown.

View File

@@ -1,173 +1,143 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project DefaultTargets="Build" ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup Label="ProjectConfigurations"> <ItemGroup Label="ProjectConfigurations">
<ProjectConfiguration Include="Debug|Win32"> <ProjectConfiguration Include="Debug|Win32">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|Win32"> <ProjectConfiguration Include="Release|Win32">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>Win32</Platform> <Platform>Win32</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Debug|x64"> <ProjectConfiguration Include="Debug|x64">
<Configuration>Debug</Configuration> <Configuration>Debug</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
<ProjectConfiguration Include="Release|x64"> <ProjectConfiguration Include="Release|x64">
<Configuration>Release</Configuration> <Configuration>Release</Configuration>
<Platform>x64</Platform> <Platform>x64</Platform>
</ProjectConfiguration> </ProjectConfiguration>
</ItemGroup> </ItemGroup>
<PropertyGroup Label="Globals"> <PropertyGroup Label="Globals">
<VCProjectVersion>15.0</VCProjectVersion> <VCProjectVersion>15.0</VCProjectVersion>
<ProjectGuid>{6A775901-6C34-4E96-B359-C11C76A520BB}</ProjectGuid> <ProjectGuid>{2494B3F2-585E-4A2E-A013-20A15AE25B9E}</ProjectGuid>
<Keyword>Win32Proj</Keyword> <RootNamespace>wCenterWindow</RootNamespace>
<RootNamespace>wCenterWindow</RootNamespace> <WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion>
<WindowsTargetPlatformVersion>10.0.17763.0</WindowsTargetPlatformVersion> </PropertyGroup>
</PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" /> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType>
<ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries>
<UseDebugLibraries>true</UseDebugLibraries> <PlatformToolset>v141</PlatformToolset>
<PlatformToolset>v141</PlatformToolset> <CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet> </PropertyGroup>
</PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType>
<ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries>
<UseDebugLibraries>false</UseDebugLibraries> <PlatformToolset>v141</PlatformToolset>
<PlatformToolset>v141</PlatformToolset> <WholeProgramOptimization>true</WholeProgramOptimization>
<WholeProgramOptimization>true</WholeProgramOptimization> <CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet> </PropertyGroup>
</PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType>
<ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>true</UseDebugLibraries>
<UseDebugLibraries>true</UseDebugLibraries> <PlatformToolset>v141</PlatformToolset>
<PlatformToolset>v141</PlatformToolset> <CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet> </PropertyGroup>
</PropertyGroup> <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration"> <ConfigurationType>Application</ConfigurationType>
<ConfigurationType>Application</ConfigurationType> <UseDebugLibraries>false</UseDebugLibraries>
<UseDebugLibraries>false</UseDebugLibraries> <PlatformToolset>v141</PlatformToolset>
<PlatformToolset>v141</PlatformToolset> <WholeProgramOptimization>true</WholeProgramOptimization>
<WholeProgramOptimization>true</WholeProgramOptimization> <CharacterSet>MultiByte</CharacterSet>
<CharacterSet>Unicode</CharacterSet> </PropertyGroup>
</PropertyGroup> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" /> <ImportGroup Label="ExtensionSettings">
<ImportGroup Label="ExtensionSettings"> </ImportGroup>
</ImportGroup> <ImportGroup Label="Shared">
<ImportGroup Label="Shared"> </ImportGroup>
</ImportGroup> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> </ImportGroup>
</ImportGroup> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> </ImportGroup>
</ImportGroup> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> </ImportGroup>
</ImportGroup> <ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ImportGroup Label="PropertySheets" Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" />
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> </ImportGroup>
</ImportGroup> <PropertyGroup Label="UserMacros" />
<PropertyGroup Label="UserMacros" /> <PropertyGroup />
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
<LinkIncremental>true</LinkIncremental> <ClCompile>
</PropertyGroup> <WarningLevel>Level3</WarningLevel>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <Optimization>Disabled</Optimization>
<LinkIncremental>true</LinkIncremental> <SDLCheck>true</SDLCheck>
</PropertyGroup> <ConformanceMode>true</ConformanceMode>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> </ClCompile>
<LinkIncremental>false</LinkIncremental> <Link>
</PropertyGroup> <SubSystem>Windows</SubSystem>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> <RandomizedBaseAddress>false</RandomizedBaseAddress>
<LinkIncremental>false</LinkIncremental> </Link>
</PropertyGroup> </ItemDefinitionGroup>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'"> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
<ClCompile> <ClCompile>
<PrecompiledHeader> <WarningLevel>Level3</WarningLevel>
</PrecompiledHeader> <Optimization>Disabled</Optimization>
<WarningLevel>Level3</WarningLevel> <SDLCheck>true</SDLCheck>
<Optimization>Disabled</Optimization> <ConformanceMode>true</ConformanceMode>
<SDLCheck>true</SDLCheck> </ClCompile>
<PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <Link>
<ConformanceMode>true</ConformanceMode> <SubSystem>Console</SubSystem>
</ClCompile> </Link>
<Link> </ItemDefinitionGroup>
<SubSystem>Windows</SubSystem> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
<GenerateDebugInformation>true</GenerateDebugInformation> <ClCompile>
</Link> <WarningLevel>Level3</WarningLevel>
</ItemDefinitionGroup> <Optimization>MaxSpeed</Optimization>
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'"> <FunctionLevelLinking>true</FunctionLevelLinking>
<ClCompile> <IntrinsicFunctions>true</IntrinsicFunctions>
<PrecompiledHeader> <SDLCheck>true</SDLCheck>
</PrecompiledHeader> <ConformanceMode>true</ConformanceMode>
<WarningLevel>Level3</WarningLevel> <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
<Optimization>Disabled</Optimization> </ClCompile>
<SDLCheck>true</SDLCheck> <Link>
<PreprocessorDefinitions>_DEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SubSystem>Windows</SubSystem>
<ConformanceMode>true</ConformanceMode> <EnableCOMDATFolding>true</EnableCOMDATFolding>
</ClCompile> <OptimizeReferences>true</OptimizeReferences>
<Link> <UACExecutionLevel>HighestAvailable</UACExecutionLevel>
<SubSystem>Windows</SubSystem> <GenerateDebugInformation>false</GenerateDebugInformation>
<GenerateDebugInformation>true</GenerateDebugInformation> </Link>
</Link> </ItemDefinitionGroup>
</ItemDefinitionGroup> <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'"> <ClCompile>
<ClCompile> <WarningLevel>Level3</WarningLevel>
<PrecompiledHeader> <Optimization>MaxSpeed</Optimization>
</PrecompiledHeader> <FunctionLevelLinking>true</FunctionLevelLinking>
<WarningLevel>Level3</WarningLevel> <IntrinsicFunctions>true</IntrinsicFunctions>
<Optimization>MaxSpeed</Optimization> <SDLCheck>true</SDLCheck>
<FunctionLevelLinking>true</FunctionLevelLinking> <ConformanceMode>true</ConformanceMode>
<IntrinsicFunctions>true</IntrinsicFunctions> </ClCompile>
<SDLCheck>true</SDLCheck> <Link>
<PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions> <SubSystem>Console</SubSystem>
<ConformanceMode>true</ConformanceMode> <EnableCOMDATFolding>true</EnableCOMDATFolding>
<DebugInformationFormat>None</DebugInformationFormat> <OptimizeReferences>true</OptimizeReferences>
</ClCompile> </Link>
<Link> </ItemDefinitionGroup>
<SubSystem>Windows</SubSystem> <ItemGroup>
<EnableCOMDATFolding>true</EnableCOMDATFolding> <ClCompile Include="..\..\..\MyFunctions\MoveWindowToMonitorCenter.cpp" />
<OptimizeReferences>true</OptimizeReferences> <ClCompile Include="wCenterWindow.cpp" />
<GenerateDebugInformation>false</GenerateDebugInformation> </ItemGroup>
<AssemblyDebug>false</AssemblyDebug> <ItemGroup>
</Link> <ClInclude Include="..\..\..\MyFunctions\MoveWindowToMonitorCenter.h" />
</ItemDefinitionGroup> <ClInclude Include="resource.h" />
<ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'"> </ItemGroup>
<ClCompile> <ItemGroup>
<PrecompiledHeader> <ResourceCompile Include="wCenterWindow.rc" />
</PrecompiledHeader> </ItemGroup>
<WarningLevel>Level3</WarningLevel> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<Optimization>MaxSpeed</Optimization> <ImportGroup Label="ExtensionTargets">
<FunctionLevelLinking>true</FunctionLevelLinking> </ImportGroup>
<IntrinsicFunctions>true</IntrinsicFunctions>
<SDLCheck>true</SDLCheck>
<PreprocessorDefinitions>NDEBUG;_WINDOWS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
<ConformanceMode>true</ConformanceMode>
</ClCompile>
<Link>
<SubSystem>Windows</SubSystem>
<EnableCOMDATFolding>true</EnableCOMDATFolding>
<OptimizeReferences>true</OptimizeReferences>
<GenerateDebugInformation>true</GenerateDebugInformation>
</Link>
</ItemDefinitionGroup>
<ItemGroup>
<ClInclude Include="framework.h" />
<ClInclude Include="resource.h" />
<ClInclude Include="targetver.h" />
<ClInclude Include="wCenterWindow.h" />
</ItemGroup>
<ItemGroup>
<ClCompile Include="wCenterWindow.cpp" />
</ItemGroup>
<ItemGroup>
<ResourceCompile Include="wCenterWindow.rc" />
</ItemGroup>
<ItemGroup>
<Image Include="wCenterWindow.ico" />
</ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets">
</ImportGroup>
</Project> </Project>

View File

@@ -1,46 +1,38 @@
<?xml version="1.0" encoding="utf-8"?> <?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<ItemGroup> <ItemGroup>
<Filter Include="Исходные файлы"> <Filter Include="Source Files">
<UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier> <UniqueIdentifier>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
<Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions> <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
</Filter> </Filter>
<Filter Include="Файлы заголовков"> <Filter Include="Header Files">
<UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier> <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
<Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions> <Extensions>h;hh;hpp;hxx;hm;inl;inc;ipp;xsd</Extensions>
</Filter> </Filter>
<Filter Include="Файлы ресурсов"> <Filter Include="Resource Files">
<UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier> <UniqueIdentifier>{67DA6AB6-F800-4c08-8B7A-83BB121AAD01}</UniqueIdentifier>
<Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions> <Extensions>rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe;resx;tiff;tif;png;wav;mfcribbon-ms</Extensions>
</Filter> </Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="framework.h"> <ClCompile Include="wCenterWindow.cpp">
<Filter>Файлы заголовков</Filter> <Filter>Source Files</Filter>
</ClInclude> </ClCompile>
<ClInclude Include="targetver.h"> <ClCompile Include="..\..\..\MyFunctions\MoveWindowToMonitorCenter.cpp">
<Filter>Файлы заголовков</Filter> <Filter>Source Files</Filter>
</ClInclude> </ClCompile>
<ClInclude Include="wCenterWindow.h"> </ItemGroup>
<Filter>Файлы заголовков</Filter> <ItemGroup>
</ClInclude> <ClInclude Include="resource.h">
<ClInclude Include="resource.h"> <Filter>Header Files</Filter>
<Filter>Файлы заголовков</Filter> </ClInclude>
</ClInclude> <ClInclude Include="..\..\..\MyFunctions\MoveWindowToMonitorCenter.h">
</ItemGroup> <Filter>Header Files</Filter>
<ItemGroup> </ClInclude>
<ClCompile Include="wCenterWindow.cpp"> </ItemGroup>
<Filter>Исходные файлы</Filter> <ItemGroup>
</ClCompile> <ResourceCompile Include="wCenterWindow.rc">
</ItemGroup> <Filter>Resource Files</Filter>
<ItemGroup> </ResourceCompile>
<ResourceCompile Include="wCenterWindow.rc"> </ItemGroup>
<Filter>Файлы ресурсов</Filter>
</ResourceCompile>
</ItemGroup>
<ItemGroup>
<Image Include="wCenterWindow.ico">
<Filter>Файлы ресурсов</Filter>
</Image>
</ItemGroup>
</Project> </Project>

View File

@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="15.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup />
</Project>