diff options
| -rw-r--r-- | .gitignore | 1 | ||||
| -rwxr-xr-x | systray/systray/ReadMe.txt | 48 | ||||
| -rwxr-xr-x | systray/systray/dllmain.cpp | 19 | ||||
| -rwxr-xr-x | systray/systray/stdafx.cpp | 8 | ||||
| -rwxr-xr-x | systray/systray/stdafx.h | 17 | ||||
| -rwxr-xr-x | systray/systray/systray.cpp | 207 | ||||
| -rwxr-xr-x | systray/systray/systray.def | 9 | ||||
| -rwxr-xr-x | systray/systray/systray.h | 13 | ||||
| -rwxr-xr-x | systray/systray/systray.vcxproj | 176 | ||||
| -rwxr-xr-x | systray/systray/systray.vcxproj.filters | 45 | ||||
| -rwxr-xr-x | systray/systray/systray.vcxproj.user | 3 | ||||
| -rwxr-xr-x | systray/systray/targetver.h | 8 | 
12 files changed, 554 insertions, 0 deletions
| @@ -7,3 +7,4 @@ Debug  *.sdf  dll/systray_unsigned.dll  out.txt +.vs diff --git a/systray/systray/ReadMe.txt b/systray/systray/ReadMe.txt new file mode 100755 index 0000000..7e906df --- /dev/null +++ b/systray/systray/ReadMe.txt @@ -0,0 +1,48 @@ +========================================================================
 +    DYNAMIC LINK LIBRARY : systray Project Overview
 +========================================================================
 +
 +AppWizard has created this systray DLL for you.
 +
 +This file contains a summary of what you will find in each of the files that
 +make up your systray application.
 +
 +
 +systray.vcxproj
 +    This is the main project file for VC++ projects generated using an Application Wizard.
 +    It contains information about the version of Visual C++ that generated the file, and
 +    information about the platforms, configurations, and project features selected with the
 +    Application Wizard.
 +
 +systray.vcxproj.filters
 +    This is the filters file for VC++ projects generated using an Application Wizard. 
 +    It contains information about the association between the files in your project 
 +    and the filters. This association is used in the IDE to show grouping of files with
 +    similar extensions under a specific node (for e.g. ".cpp" files are associated with the
 +    "Source Files" filter).
 +
 +systray.cpp
 +    This is the main DLL source file.
 +
 +	When created, this DLL does not export any symbols. As a result, it
 +	will not produce a .lib file when it is built. If you wish this project
 +	to be a project dependency of some other project, you will either need to
 +	add code to export some symbols from the DLL so that an export library
 +	will be produced, or you can set the Ignore Input Library property to Yes
 +	on the General propert page of the Linker folder in the project's Property
 +	Pages dialog box.
 +
 +/////////////////////////////////////////////////////////////////////////////
 +Other standard files:
 +
 +StdAfx.h, StdAfx.cpp
 +    These files are used to build a precompiled header (PCH) file
 +    named systray.pch and a precompiled types file named StdAfx.obj.
 +
 +/////////////////////////////////////////////////////////////////////////////
 +Other notes:
 +
 +AppWizard uses "TODO:" comments to indicate parts of the source code you
 +should add to or customize.
 +
 +/////////////////////////////////////////////////////////////////////////////
 diff --git a/systray/systray/dllmain.cpp b/systray/systray/dllmain.cpp new file mode 100755 index 0000000..8a4edd3 --- /dev/null +++ b/systray/systray/dllmain.cpp @@ -0,0 +1,19 @@ +// dllmain.cpp : Defines the entry point for the DLL application.
 +#include "stdafx.h"
 +
 +BOOL APIENTRY DllMain( HMODULE hModule,
 +                       DWORD  ul_reason_for_call,
 +                       LPVOID lpReserved
 +					 )
 +{
 +	switch (ul_reason_for_call)
 +	{
 +	case DLL_PROCESS_ATTACH:
 +	case DLL_THREAD_ATTACH:
 +	case DLL_THREAD_DETACH:
 +	case DLL_PROCESS_DETACH:
 +		break;
 +	}
 +	return TRUE;
 +}
 +
 diff --git a/systray/systray/stdafx.cpp b/systray/systray/stdafx.cpp new file mode 100755 index 0000000..a71cba8 --- /dev/null +++ b/systray/systray/stdafx.cpp @@ -0,0 +1,8 @@ +// stdafx.cpp : source file that includes just the standard includes
 +// systray.pch will be the pre-compiled header
 +// stdafx.obj will contain the pre-compiled type information
 +
 +#include "stdafx.h"
 +
 +// TODO: reference any additional headers you need in STDAFX.H
 +// and not in this file
 diff --git a/systray/systray/stdafx.h b/systray/systray/stdafx.h new file mode 100755 index 0000000..7e739d9 --- /dev/null +++ b/systray/systray/stdafx.h @@ -0,0 +1,17 @@ +// stdafx.h : include file for standard system include files,
 +// or project specific include files that are used frequently, but
 +// are changed infrequently
 +//
 +
 +#pragma once
 +
 +#include "targetver.h"
 +
 +#define WIN32_LEAN_AND_MEAN             // Exclude rarely-used stuff from Windows headers
 +// Windows Header Files:
 +#include <windows.h>
 +// Additional required headers
 +#include <stdio.h>
 +#include <stdlib.h>
 +#include <windows.h>
 +#include <shellapi.h>
 diff --git a/systray/systray/systray.cpp b/systray/systray/systray.cpp new file mode 100755 index 0000000..079f816 --- /dev/null +++ b/systray/systray/systray.cpp @@ -0,0 +1,207 @@ +// systray.cpp : Defines the exported functions for the DLL application.
 +//
 +
 +// dllmain.cpp : Defines the entry point for the DLL application.
 +#include "stdafx.h"
 +#include "systray.h"
 +
 +// Message posted into message loop when Notification Icon is clicked
 +#define WM_SYSTRAY_MESSAGE (WM_USER + 1)
 +
 +static NOTIFYICONDATA nid;
 +static HWND hWnd;
 +static HMENU hTrayMenu;
 +
 +void (*systray_on_exit)(int ignored);
 +void (*systray_menu_item_selected)(int menu_id);
 +
 +void reportWindowsError(const char* action) {
 +	LPTSTR pErrMsg = NULL;
 +	DWORD errCode = GetLastError();
 +	DWORD result = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER|
 +			FORMAT_MESSAGE_FROM_SYSTEM|
 +			FORMAT_MESSAGE_ARGUMENT_ARRAY,
 +			NULL,
 +			errCode,
 +			LANG_NEUTRAL,
 +			pErrMsg,
 +			0,
 +			NULL);
 +	printf("Systray error %s: %d %ls\n", action, errCode, pErrMsg);
 +}
 +
 +void ShowMenu(HWND hWnd) {
 +	POINT p;
 +	if (0 == GetCursorPos(&p)) {
 +		reportWindowsError("get tray menu position");
 +		return;
 +	};
 +	SetForegroundWindow(hWnd); // Win32 bug work-around
 +	TrackPopupMenu(hTrayMenu, TPM_BOTTOMALIGN | TPM_LEFTALIGN, p.x, p.y, 0, hWnd, NULL);
 +
 +}
 +
 +LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
 +	switch (message) {
 +		case WM_COMMAND:
 +			{
 +				int menuId = LOWORD(wParam);
 +				if (menuId != -1) {
 +					systray_menu_item_selected(menuId);
 +				}
 +			}
 +			break;
 +		case WM_DESTROY:
 +			printf("Window destroyed\n");
 +			systray_on_exit(0/*ignored*/);
 +			Shell_NotifyIcon(NIM_DELETE, &nid);
 +			PostQuitMessage(0);
 +			break;
 +		case WM_ENDSESSION:
 +			printf("Session ending\n");
 +			// When the system shuts down (or logs off), we don't receive WM_DESTROY,
 +			// so we capture WM_ENDSESSION instead and call on_exit here too.
 +			systray_on_exit(0/*ignored*/);
 +			Shell_NotifyIcon(NIM_DELETE, &nid);
 +			break;
 +		case WM_SYSTRAY_MESSAGE:
 +			switch(lParam) {
 +				case WM_RBUTTONUP:
 +					ShowMenu(hWnd);
 +					break;
 +				case WM_LBUTTONUP:
 +					ShowMenu(hWnd);
 +					break;
 +				default:
 +					return DefWindowProc(hWnd, message, wParam, lParam);
 +			};
 +			break;
 +		default:
 +			return DefWindowProc(hWnd, message, wParam, lParam);
 +	}
 +	return 0;
 +}
 +
 +void MyRegisterClass(HINSTANCE hInstance, TCHAR* szWindowClass) {
 +	WNDCLASSEX wcex;
 +
 +	wcex.cbSize = sizeof(WNDCLASSEX);
 +	wcex.style          = CS_HREDRAW | CS_VREDRAW;
 +	wcex.lpfnWndProc    = WndProc;
 +	wcex.cbClsExtra     = 0;
 +	wcex.cbWndExtra     = 0;
 +	wcex.hInstance      = hInstance;
 +	wcex.hIcon          = LoadIcon(NULL, IDI_APPLICATION);
 +	wcex.hCursor        = LoadCursor(NULL, IDC_ARROW);
 +	wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
 +	wcex.lpszMenuName   = 0;
 +	wcex.lpszClassName  = szWindowClass;
 +	wcex.hIconSm        = LoadIcon(NULL, IDI_APPLICATION);
 +
 +	RegisterClassEx(&wcex);
 +}
 +
 +HWND InitInstance(HINSTANCE hInstance, int nCmdShow, TCHAR* szWindowClass) {
 +	HWND hWnd = CreateWindow(szWindowClass, TEXT(""), WS_OVERLAPPEDWINDOW,
 +			CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
 +	if (!hWnd) {
 +		return 0;
 +	}
 +
 +	ShowWindow(hWnd, nCmdShow);
 +	UpdateWindow(hWnd);
 +
 +	return hWnd;
 +}
 +
 +
 +BOOL createMenu() {
 +	hTrayMenu = CreatePopupMenu();
 +	MENUINFO menuInfo;
 +	menuInfo.cbSize = sizeof(MENUINFO);
 +	menuInfo.fMask = MIM_APPLYTOSUBMENUS | MIM_STYLE;
 +	return SetMenuInfo(hTrayMenu, &menuInfo);
 +}
 +
 +BOOL addNotifyIcon() {
 +	nid.cbSize = sizeof(NOTIFYICONDATA);
 +	nid.hWnd = hWnd;
 +	nid.uID = 100;
 +	nid.uCallbackMessage = WM_SYSTRAY_MESSAGE;
 +	nid.uFlags = NIF_MESSAGE;
 +	return Shell_NotifyIcon(NIM_ADD, &nid);
 +}
 +
 +int nativeLoop(void (*systray_ready)(int ignored),
 +	void (*_systray_on_exit)(int ignored),
 +    void (*_systray_menu_item_selected)(int menu_id)) {
 +	systray_on_exit = _systray_on_exit;
 +	systray_menu_item_selected = _systray_menu_item_selected;
 +
 +	HINSTANCE hInstance = GetModuleHandle(NULL);
 +	TCHAR* szWindowClass = TEXT("SystrayClass");
 +	MyRegisterClass(hInstance, szWindowClass);
 +	hWnd = InitInstance(hInstance, FALSE, szWindowClass); // Don't show window
 +	if (!hWnd) {
 +		return EXIT_FAILURE;
 +	}
 +	if (!createMenu() || !addNotifyIcon()) {
 +		return EXIT_FAILURE;
 +	}
 +	systray_ready(0);
 +
 +	MSG msg;
 +	while (GetMessage(&msg, NULL, 0, 0)) {
 +		TranslateMessage(&msg);
 +		DispatchMessage(&msg);
 +	}
 +	return EXIT_SUCCESS;
 +}
 +
 +
 +void setIcon(const wchar_t* iconFile) {
 +	HICON hIcon = (HICON) LoadImage(NULL, iconFile, IMAGE_ICON, 64, 64, LR_LOADFROMFILE);
 +	if (hIcon == NULL) {
 +		reportWindowsError("load icon image");
 +	} else {
 +		nid.hIcon = hIcon;
 +		nid.uFlags = NIF_ICON;
 +		Shell_NotifyIcon(NIM_MODIFY, &nid);
 +	}
 +}
 +
 +void setTooltip(const wchar_t* tooltip) {
 +	wcsncpy_s(nid.szTip, tooltip, sizeof(nid.szTip)/sizeof(wchar_t));
 +	nid.uFlags = NIF_TIP;
 +	Shell_NotifyIcon(NIM_MODIFY, &nid);
 +}
 +
 +void add_or_update_menu_item(int menuId, wchar_t* title, wchar_t* tooltip, short disabled, short checked) {
 +	MENUITEMINFO menuItemInfo;
 +	menuItemInfo.cbSize = sizeof(MENUITEMINFO);
 +	menuItemInfo.fMask = MIIM_FTYPE | MIIM_STRING | MIIM_ID | MIIM_STATE;
 +	menuItemInfo.fType = MFT_STRING;
 +	menuItemInfo.dwTypeData = title;
 +	menuItemInfo.cch = wcslen(title) + 1;
 +	menuItemInfo.wID = menuId;
 +	menuItemInfo.fState = 0;
 +	if (disabled == 1) {
 +		menuItemInfo.fState |= MFS_DISABLED;
 +	}
 +	if (checked == 1) {
 +		menuItemInfo.fState |= MFS_CHECKED;
 +	}
 +
 +	BOOL setOK = SetMenuItemInfo(hTrayMenu, menuId, FALSE, &menuItemInfo);
 +	if (!setOK) {
 +		InsertMenuItem(hTrayMenu, menuId, TRUE, &menuItemInfo);
 +	}
 +}
 +
 +void hide_menu_item(int menuId) {
 +	DeleteMenu(hTrayMenu, menuId, MF_BYCOMMAND);
 +}
 +
 +void quit() {
 +	PostMessage(hWnd, WM_CLOSE, 0, 0);
 +}
 diff --git a/systray/systray/systray.def b/systray/systray/systray.def new file mode 100755 index 0000000..7a1e239 --- /dev/null +++ b/systray/systray/systray.def @@ -0,0 +1,9 @@ +LIBRARY systray
 +DESCRIPTION "System Tray Support"
 +EXPORTS
 +	nativeLoop					@1
 +	setIcon						@2
 +	setTooltip					@3
 +	add_or_update_menu_item		@4
 +	hide_menu_item              @5
 +	quit						@6
\ No newline at end of file diff --git a/systray/systray/systray.h b/systray/systray/systray.h new file mode 100755 index 0000000..8344668 --- /dev/null +++ b/systray/systray/systray.h @@ -0,0 +1,13 @@ +#pragma once
 +
 +extern "C" {
 +	__declspec(dllexport) int __cdecl nativeLoop(void (*systray_ready)(int ignored),
 +		void (*_systray_on_exit)(int ignored),
 +		void (*_systray_menu_item_selected)(int menu_id));
 +
 +	__declspec(dllexport) void __cdecl setIcon(const wchar_t* iconFile);
 +	__declspec(dllexport) void __cdecl setTooltip(const wchar_t* tooltip);
 +	__declspec(dllexport) void __cdecl add_or_update_menu_item(int menuId, wchar_t* title, wchar_t* tooltip, short disabled, short checked);
 +	__declspec(dllexport) void __cdecl hide_menu_item(int menuId);
 +	__declspec(dllexport) void __cdecl quit();
 +}
\ No newline at end of file diff --git a/systray/systray/systray.vcxproj b/systray/systray/systray.vcxproj new file mode 100755 index 0000000..1fdff40 --- /dev/null +++ b/systray/systray/systray.vcxproj @@ -0,0 +1,176 @@ +<?xml version="1.0" encoding="utf-8"?>
 +<Project DefaultTargets="Build" ToolsVersion="14.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
 +  <ItemGroup Label="ProjectConfigurations">
 +    <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|Win32">
 +      <Configuration>Release</Configuration>
 +      <Platform>Win32</Platform>
 +    </ProjectConfiguration>
 +    <ProjectConfiguration Include="Release|x64">
 +      <Configuration>Release</Configuration>
 +      <Platform>x64</Platform>
 +    </ProjectConfiguration>
 +  </ItemGroup>
 +  <PropertyGroup Label="Globals">
 +    <ProjectGuid>{7DD84108-D77F-4F51-AC68-5DD13AC1E489}</ProjectGuid>
 +    <Keyword>Win32Proj</Keyword>
 +    <RootNamespace>systray</RootNamespace>
 +  </PropertyGroup>
 +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.Default.props" />
 +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'" Label="Configuration">
 +    <ConfigurationType>DynamicLibrary</ConfigurationType>
 +    <UseDebugLibraries>true</UseDebugLibraries>
 +    <CharacterSet>Unicode</CharacterSet>
 +    <PlatformToolset>v140</PlatformToolset>
 +  </PropertyGroup>
 +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'" Label="Configuration">
 +    <ConfigurationType>DynamicLibrary</ConfigurationType>
 +    <UseDebugLibraries>true</UseDebugLibraries>
 +    <CharacterSet>Unicode</CharacterSet>
 +    <PlatformToolset>v140</PlatformToolset>
 +  </PropertyGroup>
 +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'" Label="Configuration">
 +    <ConfigurationType>DynamicLibrary</ConfigurationType>
 +    <UseDebugLibraries>false</UseDebugLibraries>
 +    <WholeProgramOptimization>true</WholeProgramOptimization>
 +    <CharacterSet>Unicode</CharacterSet>
 +    <PlatformToolset>v140</PlatformToolset>
 +  </PropertyGroup>
 +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'" Label="Configuration">
 +    <ConfigurationType>DynamicLibrary</ConfigurationType>
 +    <UseDebugLibraries>false</UseDebugLibraries>
 +    <WholeProgramOptimization>true</WholeProgramOptimization>
 +    <CharacterSet>Unicode</CharacterSet>
 +    <PlatformToolset>v140</PlatformToolset>
 +  </PropertyGroup>
 +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.props" />
 +  <ImportGroup Label="ExtensionSettings">
 +  </ImportGroup>
 +  <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" />
 +  </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 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" />
 +  </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 Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 +    <LinkIncremental>true</LinkIncremental>
 +  </PropertyGroup>
 +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
 +    <LinkIncremental>true</LinkIncremental>
 +  </PropertyGroup>
 +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 +    <LinkIncremental>false</LinkIncremental>
 +  </PropertyGroup>
 +  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 +    <LinkIncremental>false</LinkIncremental>
 +  </PropertyGroup>
 +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 +    <ClCompile>
 +      <PrecompiledHeader>Use</PrecompiledHeader>
 +      <WarningLevel>Level3</WarningLevel>
 +      <Optimization>Disabled</Optimization>
 +      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SYSTRAY_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 +    </ClCompile>
 +    <Link>
 +      <SubSystem>Windows</SubSystem>
 +      <GenerateDebugInformation>true</GenerateDebugInformation>
 +    </Link>
 +  </ItemDefinitionGroup>
 +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
 +    <ClCompile>
 +      <PrecompiledHeader>Use</PrecompiledHeader>
 +      <WarningLevel>Level3</WarningLevel>
 +      <Optimization>Disabled</Optimization>
 +      <PreprocessorDefinitions>WIN32;_DEBUG;_WINDOWS;_USRDLL;SYSTRAY_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <RuntimeLibrary>MultiThreadedDebug</RuntimeLibrary>
 +    </ClCompile>
 +    <Link>
 +      <SubSystem>Windows</SubSystem>
 +      <GenerateDebugInformation>true</GenerateDebugInformation>
 +    </Link>
 +  </ItemDefinitionGroup>
 +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 +    <ClCompile>
 +      <WarningLevel>Level3</WarningLevel>
 +      <PrecompiledHeader>Use</PrecompiledHeader>
 +      <Optimization>MaxSpeed</Optimization>
 +      <FunctionLevelLinking>true</FunctionLevelLinking>
 +      <IntrinsicFunctions>true</IntrinsicFunctions>
 +      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SYSTRAY_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
 +    </ClCompile>
 +    <Link>
 +      <SubSystem>Windows</SubSystem>
 +      <GenerateDebugInformation>true</GenerateDebugInformation>
 +      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 +      <OptimizeReferences>true</OptimizeReferences>
 +    </Link>
 +  </ItemDefinitionGroup>
 +  <ItemDefinitionGroup Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 +    <ClCompile>
 +      <WarningLevel>Level3</WarningLevel>
 +      <PrecompiledHeader>Use</PrecompiledHeader>
 +      <Optimization>MaxSpeed</Optimization>
 +      <FunctionLevelLinking>true</FunctionLevelLinking>
 +      <IntrinsicFunctions>true</IntrinsicFunctions>
 +      <PreprocessorDefinitions>WIN32;NDEBUG;_WINDOWS;_USRDLL;SYSTRAY_EXPORTS;%(PreprocessorDefinitions)</PreprocessorDefinitions>
 +      <RuntimeLibrary>MultiThreaded</RuntimeLibrary>
 +    </ClCompile>
 +    <Link>
 +      <SubSystem>Windows</SubSystem>
 +      <GenerateDebugInformation>true</GenerateDebugInformation>
 +      <EnableCOMDATFolding>true</EnableCOMDATFolding>
 +      <OptimizeReferences>true</OptimizeReferences>
 +    </Link>
 +  </ItemDefinitionGroup>
 +  <ItemGroup>
 +    <None Include="ReadMe.txt" />
 +    <None Include="systray.def" />
 +  </ItemGroup>
 +  <ItemGroup>
 +    <ClInclude Include="stdafx.h" />
 +    <ClInclude Include="systray.h" />
 +    <ClInclude Include="targetver.h" />
 +  </ItemGroup>
 +  <ItemGroup>
 +    <ClCompile Include="dllmain.cpp">
 +      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">false</CompileAsManaged>
 +      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">false</CompileAsManaged>
 +      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">
 +      </PrecompiledHeader>
 +      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
 +      </PrecompiledHeader>
 +      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">false</CompileAsManaged>
 +      <CompileAsManaged Condition="'$(Configuration)|$(Platform)'=='Release|x64'">false</CompileAsManaged>
 +      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">
 +      </PrecompiledHeader>
 +      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">
 +      </PrecompiledHeader>
 +    </ClCompile>
 +    <ClCompile Include="stdafx.cpp">
 +      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|Win32'">Create</PrecompiledHeader>
 +      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">Create</PrecompiledHeader>
 +      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">Create</PrecompiledHeader>
 +      <PrecompiledHeader Condition="'$(Configuration)|$(Platform)'=='Release|x64'">Create</PrecompiledHeader>
 +    </ClCompile>
 +    <ClCompile Include="systray.cpp" />
 +  </ItemGroup>
 +  <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
 +  <ImportGroup Label="ExtensionTargets">
 +  </ImportGroup>
 +</Project>
\ No newline at end of file diff --git a/systray/systray/systray.vcxproj.filters b/systray/systray/systray.vcxproj.filters new file mode 100755 index 0000000..af0af76 --- /dev/null +++ b/systray/systray/systray.vcxproj.filters @@ -0,0 +1,45 @@ +<?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>{4FC737F1-C7A5-4376-A066-2A32D752A2FF}</UniqueIdentifier>
 +      <Extensions>cpp;c;cc;cxx;def;odl;idl;hpj;bat;asm;asmx</Extensions>
 +    </Filter>
 +    <Filter Include="Header Files">
 +      <UniqueIdentifier>{93995380-89BD-4b04-88EB-625FBE52EBFB}</UniqueIdentifier>
 +      <Extensions>h;hpp;hxx;hm;inl;inc;xsd</Extensions>
 +    </Filter>
 +    <Filter Include="Resource Files">
 +      <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>
 +    </Filter>
 +  </ItemGroup>
 +  <ItemGroup>
 +    <None Include="ReadMe.txt" />
 +    <None Include="systray.def">
 +      <Filter>Source Files</Filter>
 +    </None>
 +  </ItemGroup>
 +  <ItemGroup>
 +    <ClInclude Include="stdafx.h">
 +      <Filter>Header Files</Filter>
 +    </ClInclude>
 +    <ClInclude Include="targetver.h">
 +      <Filter>Header Files</Filter>
 +    </ClInclude>
 +    <ClInclude Include="systray.h">
 +      <Filter>Header Files</Filter>
 +    </ClInclude>
 +  </ItemGroup>
 +  <ItemGroup>
 +    <ClCompile Include="stdafx.cpp">
 +      <Filter>Source Files</Filter>
 +    </ClCompile>
 +    <ClCompile Include="systray.cpp">
 +      <Filter>Source Files</Filter>
 +    </ClCompile>
 +    <ClCompile Include="dllmain.cpp">
 +      <Filter>Source Files</Filter>
 +    </ClCompile>
 +  </ItemGroup>
 +</Project>
\ No newline at end of file diff --git a/systray/systray/systray.vcxproj.user b/systray/systray/systray.vcxproj.user new file mode 100755 index 0000000..695b5c7 --- /dev/null +++ b/systray/systray/systray.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/systray/systray/targetver.h b/systray/systray/targetver.h new file mode 100755 index 0000000..90e767b --- /dev/null +++ b/systray/systray/targetver.h @@ -0,0 +1,8 @@ +#pragma once
 +
 +// Including SDKDDKVer.h defines the highest available Windows platform.
 +
 +// If you wish to build your application for a previous Windows platform, include WinSDKVer.h and
 +// set the _WIN32_WINNT macro to the platform you wish to support before including SDKDDKVer.h.
 +
 +#include <SDKDDKVer.h>
 | 
