aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorOx Cart2017-09-11 22:08:57 -0500
committerOx Cart2017-09-11 22:12:16 -0500
commit85503b092f6516ad0fcf24018b6ff4d67a457146 (patch)
treed1e2ea12ea2a8906170c466b449aad1ffa9e0faa
parent0cddebf2c112de4b2e583e2b1e3a1fd672bfacb7 (diff)
downloadsystray-85503b092f6516ad0fcf24018b6ff4d67a457146.tar.bz2
Added back VisualStudio files
-rw-r--r--.gitignore1
-rwxr-xr-xsystray/systray/ReadMe.txt48
-rwxr-xr-xsystray/systray/dllmain.cpp19
-rwxr-xr-xsystray/systray/stdafx.cpp8
-rwxr-xr-xsystray/systray/stdafx.h17
-rwxr-xr-xsystray/systray/systray.cpp207
-rwxr-xr-xsystray/systray/systray.def9
-rwxr-xr-xsystray/systray/systray.h13
-rwxr-xr-xsystray/systray/systray.vcxproj176
-rwxr-xr-xsystray/systray/systray.vcxproj.filters45
-rwxr-xr-xsystray/systray/systray.vcxproj.user3
-rwxr-xr-xsystray/systray/targetver.h8
12 files changed, 554 insertions, 0 deletions
diff --git a/.gitignore b/.gitignore
index a668c37..81f16eb 100644
--- a/.gitignore
+++ b/.gitignore
@@ -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>