mirror of
				https://github.com/chibicitiberiu/rainmeter-studio.git
				synced 2024-02-24 04:33:31 +00:00 
			
		
		
		
	Adding new PluginVirtualDesktops plugin from Patrick at Dexpot
Change to Build.py and Rainmeter.sln to support new plugin New Example.rmskin for Rainstaller
This commit is contained in:
		@@ -28,8 +28,8 @@ LANGUAGE LANG_FINNISH, SUBLANG_DEFAULT
 | 
				
			|||||||
//
 | 
					//
 | 
				
			||||||
 | 
					
 | 
				
			||||||
VS_VERSION_INFO VERSIONINFO
 | 
					VS_VERSION_INFO VERSIONINFO
 | 
				
			||||||
 FILEVERSION 1,3,0,451
 | 
					 FILEVERSION 1,3,0,454
 | 
				
			||||||
 PRODUCTVERSION 1,3,0,451
 | 
					 PRODUCTVERSION 1,3,0,454
 | 
				
			||||||
 FILEFLAGSMASK 0x17L
 | 
					 FILEFLAGSMASK 0x17L
 | 
				
			||||||
#ifdef _DEBUG
 | 
					#ifdef _DEBUG
 | 
				
			||||||
 FILEFLAGS 0x1L
 | 
					 FILEFLAGS 0x1L
 | 
				
			||||||
@@ -45,12 +45,12 @@ BEGIN
 | 
				
			|||||||
        BLOCK "040b04b0"
 | 
					        BLOCK "040b04b0"
 | 
				
			||||||
        BEGIN
 | 
					        BEGIN
 | 
				
			||||||
            VALUE "FileDescription", "Rainmeter - A Customizable Resource Meter"
 | 
					            VALUE "FileDescription", "Rainmeter - A Customizable Resource Meter"
 | 
				
			||||||
            VALUE "FileVersion", "1, 3, 0, 451"
 | 
					            VALUE "FileVersion", "1, 3, 0, 454"
 | 
				
			||||||
            VALUE "InternalName", "Rainmeter"
 | 
					            VALUE "InternalName", "Rainmeter"
 | 
				
			||||||
            VALUE "LegalCopyright", "Copyright (C) 2010 - Rainy"
 | 
					            VALUE "LegalCopyright", "Copyright (C) 2010 - Rainy"
 | 
				
			||||||
            VALUE "OriginalFilename", "Rainmeter.exe"
 | 
					            VALUE "OriginalFilename", "Rainmeter.exe"
 | 
				
			||||||
            VALUE "ProductName", "Rainmeter"
 | 
					            VALUE "ProductName", "Rainmeter"
 | 
				
			||||||
            VALUE "ProductVersion", "1, 3, 0, 451"
 | 
					            VALUE "ProductVersion", "1, 3, 0, 454"
 | 
				
			||||||
        END
 | 
					        END
 | 
				
			||||||
    END
 | 
					    END
 | 
				
			||||||
    BLOCK "VarFileInfo"
 | 
					    BLOCK "VarFileInfo"
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										117
									
								
								Plugins/PluginVirtualDesktops/DexpotConstants.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										117
									
								
								Plugins/PluginVirtualDesktops/DexpotConstants.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,117 @@
 | 
				
			|||||||
 | 
					#ifndef _DEXPOT_CONSTANTS_H_
 | 
				
			||||||
 | 
					#define _DEXPOT_CONSTANTS_H_
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DEXPOTTITLE             _T("Dexpot - Main Menu")
 | 
				
			||||||
 | 
					#define DEXPOTCLASS             _T("ThunderRT6FormDC")
 | 
				
			||||||
 | 
					#define DEXPOTCLASS2            _T("ThunderFormDC")
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define WM_HOOXPOTRUFT				1802
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DEX_SWITCHDESKTOP			(WM_HOOXPOTRUFT + 1)
 | 
				
			||||||
 | 
					#define DEX_DEXPOTCOMMAND			(WM_HOOXPOTRUFT + 2)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DEX_MOVEICONS				(WM_HOOXPOTRUFT + 13)
 | 
				
			||||||
 | 
					#define DEX_COPYICONS				(WM_HOOXPOTRUFT + 14)
 | 
				
			||||||
 | 
					#define DEX_REMOVEICONS				(WM_HOOXPOTRUFT + 15)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DEX_REGISTERPLUGIN			(WM_HOOXPOTRUFT + 200)
 | 
				
			||||||
 | 
					#define DEX_UNREGISTERPLUGIN		(WM_HOOXPOTRUFT + 217)
 | 
				
			||||||
 | 
					#define DEX_SETFILEMAP				(WM_HOOXPOTRUFT + 218)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DEX_REGISTERHOTKEY			(WM_HOOXPOTRUFT + 211)
 | 
				
			||||||
 | 
					#define DEX_LOADSETTINGS			(WM_HOOXPOTRUFT + 212)
 | 
				
			||||||
 | 
					#define DEX_REGISTEROPTION			(WM_HOOXPOTRUFT + 213)
 | 
				
			||||||
 | 
					#define DEX_SETOPTIONVALUE			(WM_HOOXPOTRUFT + 214)
 | 
				
			||||||
 | 
					#define DEX_SETHOTKEYVALUE			(WM_HOOXPOTRUFT + 215)
 | 
				
			||||||
 | 
					#define DEX_SAVESETTINGS			(WM_HOOXPOTRUFT + 216)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DEX_GETSCREENSHOT			(WM_HOOXPOTRUFT + 201)
 | 
				
			||||||
 | 
					#define DEX_GETDESKTOPWIDTH			(WM_HOOXPOTRUFT + 202)
 | 
				
			||||||
 | 
					#define DEX_GETDESKTOPHEIGHT		(WM_HOOXPOTRUFT + 203)
 | 
				
			||||||
 | 
					#define DEX_GETCURRENTDESKTOP		(WM_HOOXPOTRUFT + 204)
 | 
				
			||||||
 | 
					#define DEX_GETDESKTOPCOUNT			(WM_HOOXPOTRUFT + 205)
 | 
				
			||||||
 | 
					#define DEX_SETSWITCHINGEXCEPTION	(WM_HOOXPOTRUFT + 206)
 | 
				
			||||||
 | 
					#define DEX_GETSWITCHINGEXCEPTION	(WM_HOOXPOTRUFT + 207)
 | 
				
			||||||
 | 
					#define DEX_SETMINANIMATION			(WM_HOOXPOTRUFT + 208)
 | 
				
			||||||
 | 
					#define DEX_DEBUGOUTPUT				(WM_HOOXPOTRUFT + 209)
 | 
				
			||||||
 | 
					#define DEX_GETDEBUGMODE			(WM_HOOXPOTRUFT + 210)
 | 
				
			||||||
 | 
					#define DEX_GETLANGUAGEFILE			(WM_HOOXPOTRUFT + 219)
 | 
				
			||||||
 | 
					#define DEX_INSERTMAINMENUITEM		(WM_HOOXPOTRUFT + 220)
 | 
				
			||||||
 | 
					#define DEX_GETDESKTOPTITLE			(WM_HOOXPOTRUFT + 221)
 | 
				
			||||||
 | 
					#define DEX_GETDESKTOPWALLPAPER		(WM_HOOXPOTRUFT + 222)
 | 
				
			||||||
 | 
					#define DEX_ISPORTABLE				(WM_HOOXPOTRUFT + 223)
 | 
				
			||||||
 | 
					#define DEX_GETDEXPOTHOME			(WM_HOOXPOTRUFT + 224)
 | 
				
			||||||
 | 
					#define DEX_GETAPPDATAPATH			(WM_HOOXPOTRUFT + 225)
 | 
				
			||||||
 | 
					#define DEX_GETTRAYICONMODE			(WM_HOOXPOTRUFT + 226)
 | 
				
			||||||
 | 
					#define DEX_SETTRAYICONMODE			(WM_HOOXPOTRUFT + 227)
 | 
				
			||||||
 | 
					#define DEX_GATHERWINDOWS			(WM_HOOXPOTRUFT + 228)
 | 
				
			||||||
 | 
					#define DEX_MOVEWINDOW				(WM_HOOXPOTRUFT + 229)
 | 
				
			||||||
 | 
					#define DEX_COPYWINDOW				(WM_HOOXPOTRUFT + 230)
 | 
				
			||||||
 | 
					#define DEX_SETFOREGROUNDWINDOW		(WM_HOOXPOTRUFT + 231)
 | 
				
			||||||
 | 
					#define DEX_ASSIGNWINDOW			(WM_HOOXPOTRUFT + 232)
 | 
				
			||||||
 | 
					#define DEX_SWITCHTOWINDOW			(WM_HOOXPOTRUFT + 233)
 | 
				
			||||||
 | 
					#define DEX_SHOWWINDOW				(WM_HOOXPOTRUFT + 234)
 | 
				
			||||||
 | 
					#define DEX_UPDATESCREENSHOT		(WM_HOOXPOTRUFT + 235)
 | 
				
			||||||
 | 
					#define DEX_REMOVEMAINMENUITEM		(WM_HOOXPOTRUFT + 236)
 | 
				
			||||||
 | 
					#define DEX_SUBSCRIBEHOOXPOT		(WM_HOOXPOTRUFT + 237)
 | 
				
			||||||
 | 
					#define DEX_UNSUBSCRIBEHOOXPOT		(WM_HOOXPOTRUFT + 238)
 | 
				
			||||||
 | 
					#define DEX_GETACTIVEWINDOW			(WM_HOOXPOTRUFT + 239)
 | 
				
			||||||
 | 
					#define DEX_GETWINDOWSONDESKTOP		(WM_HOOXPOTRUFT + 240)
 | 
				
			||||||
 | 
					#define DEX_OPENWINDOWMENU			(WM_HOOXPOTRUFT + 241)
 | 
				
			||||||
 | 
					#define DEX_OPENMAINMENU			(WM_HOOXPOTRUFT + 242)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DEX_SWITCHING					(WM_HOOXPOTRUFT + 100)
 | 
				
			||||||
 | 
					#define DEX_SWITCHED					(WM_HOOXPOTRUFT + 101)
 | 
				
			||||||
 | 
					#define DEX_SHUTDOWN					(WM_HOOXPOTRUFT + 102)
 | 
				
			||||||
 | 
					#define DEX_LOAD						(WM_HOOXPOTRUFT + 103)
 | 
				
			||||||
 | 
					#define DEX_HOTKEY						(WM_HOOXPOTRUFT + 104)
 | 
				
			||||||
 | 
					#define DEX_SETOPTION					(WM_HOOXPOTRUFT + 105)
 | 
				
			||||||
 | 
					#define DEX_CONFIGURE					(WM_HOOXPOTRUFT + 106)
 | 
				
			||||||
 | 
					#define DEX_MENUCOMMAND					(WM_HOOXPOTRUFT + 107)
 | 
				
			||||||
 | 
					#define DEX_SWITCHREQUEST				(WM_HOOXPOTRUFT + 108)
 | 
				
			||||||
 | 
					#define DEX_DESKTOPCOUNTCHANGED			(WM_HOOXPOTRUFT + 109)
 | 
				
			||||||
 | 
					#define DEX_DESKTOPCONTENTCHANGED		(WM_HOOXPOTRUFT + 111)
 | 
				
			||||||
 | 
					#define DEX_DESKTOPCONFIGURATIONCHANGED	(WM_HOOXPOTRUFT + 112)
 | 
				
			||||||
 | 
					#define DEX_DEXPOTSETTINGSCHANGED		(WM_HOOXPOTRUFT + 113)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DEX_SWITCH_NOSCREENSHOT		0x0001
 | 
				
			||||||
 | 
					#define DEX_SWITCH_DONTSWITCH		0x0002
 | 
				
			||||||
 | 
					#define DEX_SWITCH_NOANIMATION		0x0004
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DEX_OPTION_TYPE_INTEGER		1
 | 
				
			||||||
 | 
					#define DEX_OPTION_TYPE_STRING		2
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DEX_COMMAND_SETTINGS			1
 | 
				
			||||||
 | 
					#define DEX_COMMAND_DESKTOPWINDOWS		2
 | 
				
			||||||
 | 
					#define DEX_COMMAND_MANAGER				3
 | 
				
			||||||
 | 
					#define DEX_COMMAND_CONFIGUREDESKTOPS	4
 | 
				
			||||||
 | 
					#define DEX_COMMAND_PREVIEW				6
 | 
				
			||||||
 | 
					#define DEX_COMMAND_RULES				7
 | 
				
			||||||
 | 
					#define DEX_COMMAND_ABOUT				8
 | 
				
			||||||
 | 
					#define DEX_COMMAND_EXIT				9
 | 
				
			||||||
 | 
					#define DEX_COMMAND_QUICKEXIT			10
 | 
				
			||||||
 | 
					#define DEX_COMMAND_FULLSCREENPREVIEW	11
 | 
				
			||||||
 | 
					#define DEX_COMMAND_WINDOWCATALOG		12
 | 
				
			||||||
 | 
					#define DEX_COMMAND_APPLYRULES			13
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DEX_TRAYICON_NONE			0
 | 
				
			||||||
 | 
					#define DEX_TRAYICON_NORMAL			1
 | 
				
			||||||
 | 
					#define DEX_TRAYICON_CURRENTDESKTOP	2
 | 
				
			||||||
 | 
					#define DEX_TRAYICON_NEXTPREVIOUS	3
 | 
				
			||||||
 | 
					#define DEX_TRAYICON_ONEPERDESKTOP	4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DEX_EXCEPTION_UNKNOWN	0
 | 
				
			||||||
 | 
					#define DEX_EXCEPTION_NORMAL	1
 | 
				
			||||||
 | 
					#define DEX_EXCEPTION_MOVE		2
 | 
				
			||||||
 | 
					#define DEX_EXCEPTION_STICKY	3
 | 
				
			||||||
 | 
					#define DEX_EXCEPTION_CLOSE		6
 | 
				
			||||||
 | 
					#define DEX_EXCEPTION_IGNORE	4
 | 
				
			||||||
 | 
					#define DEX_EXCEPTION_HIDE		5
 | 
				
			||||||
 | 
					#define DEX_EXCEPTION_DONTMOVE	7
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define DEX_DEBUG_LOGFILE	0x0001
 | 
				
			||||||
 | 
					#define DEX_DEBUG_IMAGING	0x0002
 | 
				
			||||||
 | 
					#define DEX_DEBUG_TASKBAR	0x0004
 | 
				
			||||||
 | 
					#define DEX_DEBUG_RECOVERY	0x0008
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										620
									
								
								Plugins/PluginVirtualDesktops/DexpotMeasure.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										620
									
								
								Plugins/PluginVirtualDesktops/DexpotMeasure.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,620 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Copyright (C) 2010 Patrick Dubbert
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  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.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "DexpotMeasure.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <tchar.h>
 | 
				
			||||||
 | 
					#include <fstream>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "DexpotConstants.h"
 | 
				
			||||||
 | 
					#include "../../Library/Export.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					int DexpotMeasure::InstanceCount = 0;
 | 
				
			||||||
 | 
					HWND DexpotMeasure::hWndDexpot = NULL;
 | 
				
			||||||
 | 
					HWND DexpotMeasure::hWndMessageWindow = NULL;
 | 
				
			||||||
 | 
					std::set<DexpotMeasure*> DexpotMeasure::DexpotMeasures;
 | 
				
			||||||
 | 
					TCHAR DexpotMeasure::StringBuffer[STRINGBUFFER_SIZE];
 | 
				
			||||||
 | 
					UINT DexpotMeasure::WM_DEXPOTSTARTED = RegisterWindowMessage(_T("DexpotStarted"));
 | 
				
			||||||
 | 
					BOOL DexpotMeasure::PluginRegistered = FALSE;
 | 
				
			||||||
 | 
					HWND DexpotMeasure::hWndRainmeterControl = NULL;
 | 
				
			||||||
 | 
					int DexpotMeasure::CurrentDesktop = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					std::vector<std::wstring> DexpotDesktopNameMeasure::DesktopNames;
 | 
				
			||||||
 | 
					std::vector<std::wstring> DexpotDesktopWallpaperMeasure::DesktopWallpapers;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DexpotMeasure::DexpotMeasure(HMODULE instance, UINT _id) : VDMeasure(instance, _id)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					DexpotMeasure* DexpotMeasure::CreateMeasure(HMODULE instance, UINT id, LPCTSTR iniFile, LPCTSTR section)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						std::wstring TypeString(ReadConfigString(section, _T("VDMeasureType"), _T("")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(TypeString == _T("VDMActive")) return new DexpotVDMActiveMeasure(instance, id);
 | 
				
			||||||
 | 
						else if(TypeString == _T("DesktopCount")) return new DexpotDesktopCountMeasure(instance, id);
 | 
				
			||||||
 | 
						else if(TypeString == _T("CurrentDesktop")) return new DexpotCurrentDesktopMeasure(instance, id);
 | 
				
			||||||
 | 
						else if(TypeString == _T("SwitchDesktop")) return new DexpotSwitchDesktopMeasure(instance, id);
 | 
				
			||||||
 | 
						else if(TypeString == _T("Screenshot")) return new DexpotScreenshotMeasure(instance, id);
 | 
				
			||||||
 | 
						else if(TypeString == _T("DesktopName")) return new DexpotDesktopNameMeasure(instance, id);
 | 
				
			||||||
 | 
						else if(TypeString == _T("DesktopWallpaper")) return new DexpotDesktopWallpaperMeasure(instance, id);
 | 
				
			||||||
 | 
						else if(TypeString == _T("Command")) return new DexpotCommandMeasure(instance, id);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UINT DexpotMeasure::Initialize(LPCTSTR iniFile, LPCTSTR section)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(InstanceCount == 0)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							hWndRainmeterControl = FindWindow(_T("DummyRainWClass"), _T("Rainmeter control window"));
 | 
				
			||||||
 | 
							hWndMessageWindow = CreateMessageWindow();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						InstanceCount++;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(!PluginRegistered && FindDexpotWindow())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							SendNotifyMessage(hWndDexpot, DEX_REGISTERPLUGIN, 0, (LPARAM) hWndMessageWindow);
 | 
				
			||||||
 | 
							CurrentDesktop = (int) SendMessage(hWndDexpot, DEX_GETCURRENTDESKTOP, 0, 0);
 | 
				
			||||||
 | 
							PluginRegistered = TRUE;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						InitializeData();
 | 
				
			||||||
 | 
						DexpotMeasures.insert(this);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotMeasure::Finalize()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						InstanceCount--;
 | 
				
			||||||
 | 
						if(InstanceCount == 0)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if(PluginRegistered)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								SendNotifyMessage(hWndDexpot, DEX_UNREGISTERPLUGIN, 0, (LPARAM) hWndMessageWindow);
 | 
				
			||||||
 | 
								PluginRegistered = FALSE;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							DestroyWindow(hWndMessageWindow);
 | 
				
			||||||
 | 
							UnregisterClass(_T("DexpotPluginWindowClass"), hInstance);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						DexpotMeasures.erase(this);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UINT DexpotMeasure::Update()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LPCTSTR DexpotMeasure::GetString(UINT flags)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						_stprintf_s(StringBuffer, STRINGBUFFER_SIZE, _T("%i"), Update());
 | 
				
			||||||
 | 
						return StringBuffer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotMeasure::OnDexpotStarted()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						InitializeData();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BOOL DexpotMeasure::FindDexpotWindow()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(IsWindow(hWndDexpot)) return TRUE;
 | 
				
			||||||
 | 
						hWndDexpot = FindWindow(DEXPOTCLASS, DEXPOTTITLE);
 | 
				
			||||||
 | 
						return hWndDexpot != NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HWND DexpotMeasure::CreateMessageWindow()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						WNDCLASS wc;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						ZeroMemory(&wc, sizeof(wc));
 | 
				
			||||||
 | 
						wc.hInstance = hInstance;
 | 
				
			||||||
 | 
						wc.lpszClassName = _T("DexpotPluginWindowClass");
 | 
				
			||||||
 | 
						wc.lpfnWndProc = WindowProc;
 | 
				
			||||||
 | 
						RegisterClass(&wc);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						HWND hWnd = CreateWindowEx(0, _T("DexpotPluginWindowClass"), _T("Dexpot Rainmeter Plugin"), 0, 0, 0, 0, 0, NULL, NULL, hInstance, NULL);
 | 
				
			||||||
 | 
						SetWindowLong(hWnd, GWL_STYLE, 0);
 | 
				
			||||||
 | 
						SetWindowPos(hWnd, NULL, 0, 0, 0, 0, SWP_FRAMECHANGED | SWP_NOZORDER | SWP_NOACTIVATE | SWP_NOMOVE | SWP_NOSIZE);
 | 
				
			||||||
 | 
						MoveWindow(hWnd, 0, 0, 0, 0, FALSE);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return hWnd;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotMeasure::SendBang(std::wstring &Bang)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						COPYDATASTRUCT cds;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						cds.dwData = 1;
 | 
				
			||||||
 | 
						cds.cbData = (DWORD) (Bang.length() + 1) * sizeof(wchar_t);
 | 
				
			||||||
 | 
						cds.lpData = (PVOID) Bang.c_str();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						SendMessage(hWndRainmeterControl, WM_COPYDATA, (WPARAM) hWndMessageWindow, (LPARAM) &cds);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LRESULT CALLBACK DexpotMeasure::WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						switch(message)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						case DEX_SWITCHED:
 | 
				
			||||||
 | 
							CurrentDesktop = HIWORD(lParam);
 | 
				
			||||||
 | 
							for(std::set<DexpotMeasure*>::iterator i = DexpotMeasures.begin(); i != DexpotMeasures.end(); ++i)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								(*i)->OnSwitched(LOWORD(lParam), HIWORD(lParam), LOWORD(wParam), HIWORD(wParam));
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						case DEX_DESKTOPCOUNTCHANGED:
 | 
				
			||||||
 | 
							for(std::set<DexpotMeasure*>::iterator i = DexpotMeasures.begin(); i != DexpotMeasures.end(); ++i)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								(*i)->OnDesktopCountChanged((int)wParam);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						case DEX_SHUTDOWN:
 | 
				
			||||||
 | 
							PluginRegistered = FALSE;
 | 
				
			||||||
 | 
							for(std::set<DexpotMeasure*>::iterator i = DexpotMeasures.begin(); i != DexpotMeasures.end(); ++i)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								(*i)->OnShutdown();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						case DEX_DESKTOPCONFIGURATIONCHANGED:
 | 
				
			||||||
 | 
							for(std::set<DexpotMeasure*>::iterator i = DexpotMeasures.begin(); i != DexpotMeasures.end(); ++i)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								(*i)->OnDesktopConfigurationChanged();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						case WM_COPYDATA:
 | 
				
			||||||
 | 
							if((HWND) wParam == hWndDexpot)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								COPYDATASTRUCT *cds = (COPYDATASTRUCT*) lParam;
 | 
				
			||||||
 | 
								switch(LOWORD(cds->dwData))
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
								case DEX_GETDESKTOPTITLE:
 | 
				
			||||||
 | 
									DexpotDesktopNameMeasure::SetDesktopName(HIWORD(cds->dwData), std::wstring((LPTSTR) cds->lpData));
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								case DEX_GETDESKTOPWALLPAPER:
 | 
				
			||||||
 | 
									DexpotDesktopWallpaperMeasure::SetDesktopWallpaper(HIWORD(cds->dwData), std::wstring((LPTSTR) cds->lpData));
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							if(message == WM_DEXPOTSTARTED)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								hWndDexpot = (HWND) wParam;
 | 
				
			||||||
 | 
								if(!hWndDexpot) FindDexpotWindow();
 | 
				
			||||||
 | 
								if(hWndDexpot)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									SendMessage(hWndDexpot, DEX_REGISTERPLUGIN, 0, (LPARAM) hWndMessageWindow);
 | 
				
			||||||
 | 
									CurrentDesktop = (int) SendMessage(hWndDexpot, DEX_GETCURRENTDESKTOP, 0, 0);
 | 
				
			||||||
 | 
									PluginRegistered = TRUE;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								for(std::set<DexpotMeasure*>::iterator i = DexpotMeasures.begin(); i != DexpotMeasures.end(); ++i)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									(*i)->OnDexpotStarted();
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								return 0;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return DefWindowProc(hWnd, message, wParam, lParam);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * DexpotDesktopCountMeasure
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					DexpotDesktopCountMeasure::DexpotDesktopCountMeasure(HMODULE instance, UINT id) : DexpotMeasure(instance, id) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UINT DexpotDesktopCountMeasure::Initialize(LPCTSTR iniFile, LPCTSTR section)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						DesktopCount = 0;
 | 
				
			||||||
 | 
						OnChange = ReadConfigString(section, _T("VDOnChange"), _T(""));
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						CountType = Total;
 | 
				
			||||||
 | 
						LPCTSTR TypeString = ReadConfigString(section, _T("VDDesktopCount"), _T(""));
 | 
				
			||||||
 | 
						if(_tcsicmp(TypeString, _T("X")) == 0) CountType = Columns;
 | 
				
			||||||
 | 
						else if(_tcsicmp(TypeString, _T("Y")) == 0) CountType = Rows;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						DexpotMeasure::Initialize(iniFile, section);
 | 
				
			||||||
 | 
						return 20;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotDesktopCountMeasure::InitializeData()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(PluginRegistered) DesktopCount = (int) SendMessage(hWndDexpot, DEX_GETDESKTOPCOUNT, 0, 0);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UINT DexpotDesktopCountMeasure::Update()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(CountType == Rows) return 1;
 | 
				
			||||||
 | 
						else return DesktopCount;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotDesktopCountMeasure::OnDesktopCountChanged(int NewCount)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						DesktopCount = NewCount;
 | 
				
			||||||
 | 
						if(OnChange.length()) SendBang(OnChange);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * DexpotCurrentDesktopMeasure
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					DexpotCurrentDesktopMeasure::DexpotCurrentDesktopMeasure(HMODULE instance, UINT id) : DexpotMeasure(instance, id) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UINT DexpotCurrentDesktopMeasure::Initialize(LPCTSTR iniFile, LPCTSTR section)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						OnChange = ReadConfigString(section, _T("VDOnChange"), _T(""));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						DexpotMeasure::Initialize(iniFile, section);
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UINT DexpotCurrentDesktopMeasure::Update()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return CurrentDesktop;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotCurrentDesktopMeasure::OnSwitched(int FromDesktop, int ToDesktop, WORD Flags, WORD Trigger)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(OnChange.length()) SendBang(OnChange);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * DexpotVDMActiveMeasure
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					DexpotVDMActiveMeasure::DexpotVDMActiveMeasure(HMODULE instance, UINT id) : DexpotMeasure(instance, id) {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UINT DexpotVDMActiveMeasure::Update()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return PluginRegistered ? 1 : 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UINT DexpotVDMActiveMeasure::Initialize(LPCTSTR iniFile, LPCTSTR section)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						OnActivate = ReadConfigString(section, _T("VDOnActivate"), _T(""));
 | 
				
			||||||
 | 
						OnDeactivate = ReadConfigString(section, _T("VDOnDeactivate"), _T(""));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						DexpotMeasure::Initialize(iniFile, section);
 | 
				
			||||||
 | 
						return 1;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotVDMActiveMeasure::OnShutdown()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(OnDeactivate.length()) SendBang(OnDeactivate);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotVDMActiveMeasure::OnDexpotStarted()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(OnActivate.length()) SendBang(OnActivate);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * DexpotSwitchDesktopMeasure
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					DexpotSwitchDesktopMeasure::DexpotSwitchDesktopMeasure(HMODULE instance, UINT id) : DexpotMeasure(instance, id) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotSwitchDesktopMeasure::ExecuteBang(LPCTSTR args)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(PluginRegistered)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							DWORD Desktop;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if(_tcsicmp(args, _T("next")) == 0) Desktop = MAKELPARAM(0, 1);
 | 
				
			||||||
 | 
							else if(_tcsicmp(args, _T("prev")) == 0) Desktop = MAKELPARAM(0, 2);
 | 
				
			||||||
 | 
							else if(_tcsicmp(args, _T("back")) == 0) Desktop = MAKELPARAM(0, 3);
 | 
				
			||||||
 | 
							else Desktop = _ttoi(args);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							SendNotifyMessage(hWndDexpot, DEX_SWITCHDESKTOP, 0, Desktop);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * DexpotScreenshotMeasure
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					DexpotScreenshotMeasure::DexpotScreenshotMeasure(HMODULE instance, UINT id) : DexpotMeasure(instance, id) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UINT DexpotScreenshotMeasure::Initialize(LPCTSTR iniFile, LPCTSTR section)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						OutputFile = ReadConfigString(section, _T("VDOutputFile"), _T(""));
 | 
				
			||||||
 | 
						DesktopNumber = _ttoi(ReadConfigString(section, _T("VDDesktop"), _T("0")));
 | 
				
			||||||
 | 
						Width = _ttoi(ReadConfigString(section, _T("VDWidth"), _T("0")));
 | 
				
			||||||
 | 
						Height = _ttoi(ReadConfigString(section, _T("VDHeight"), _T("0")));
 | 
				
			||||||
 | 
						RefreshOnUpdate = _ttoi(ReadConfigString(section, _T("VDRefreshOnUpdate"), _T("0")));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						DexpotMeasure::Initialize(iniFile, section);
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UINT DexpotScreenshotMeasure::Update()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(RefreshOnUpdate && (DesktopNumber == 0 || DesktopNumber == CurrentDesktop))
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							UpdateScreenshot();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LPCTSTR DexpotScreenshotMeasure::GetString(UINT flags)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return OutputFile.c_str();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotScreenshotMeasure::InitializeData()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						UpdateScreenshot();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotScreenshotMeasure::OnSwitched(int FromDesktop, int ToDesktop, WORD Flags, WORD Trigger)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(DesktopNumber == FromDesktop || DesktopNumber == 0)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							UpdateScreenshot();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotScreenshotMeasure::UpdateScreenshot()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						int Desktop = DesktopNumber == 0 ? CurrentDesktop : DesktopNumber;
 | 
				
			||||||
 | 
						int nBytes = 0;
 | 
				
			||||||
 | 
					    BYTE *pBytes = NULL;
 | 
				
			||||||
 | 
						HANDLE fm;
 | 
				
			||||||
 | 
						HANDLE mutex;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(!IsWindow(hWndDexpot)) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						int DesktopWidth = (int) SendMessage(hWndDexpot, DEX_GETDESKTOPWIDTH, Desktop, 0);
 | 
				
			||||||
 | 
						int DesktopHeight = (int) SendMessage(hWndDexpot, DEX_GETDESKTOPHEIGHT, Desktop, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						mutex = OpenMutex(SYNCHRONIZE, FALSE, _T("DexpotScreenshotMutex"));
 | 
				
			||||||
 | 
						WaitForSingleObject(mutex, 2000);
 | 
				
			||||||
 | 
						fm = CreateFileMapping(INVALID_HANDLE_VALUE, 0, PAGE_READWRITE, 0, DesktopWidth * DesktopHeight * 4, L"Local\\DexpotScreenshotFilemap");
 | 
				
			||||||
 | 
						pBytes = (BYTE*) MapViewOfFile(fm, FILE_MAP_ALL_ACCESS, 0, 0, 0);
 | 
				
			||||||
 | 
						if(pBytes) nBytes = (int) SendMessage(hWndDexpot, DEX_GETSCREENSHOT, Desktop, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(nBytes > 0 && nBytes == DesktopWidth * DesktopHeight * 4)	
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							HDC ScreenDC;
 | 
				
			||||||
 | 
							HDC MemDC;
 | 
				
			||||||
 | 
							HDC MemDC2;
 | 
				
			||||||
 | 
							HBITMAP OriginalBitmap;
 | 
				
			||||||
 | 
							HBITMAP ScaledBitmap;
 | 
				
			||||||
 | 
							HGDIOBJ OldBitmap;
 | 
				
			||||||
 | 
							HGDIOBJ OldBitmap2;
 | 
				
			||||||
 | 
							BYTE *ScaledBytes;
 | 
				
			||||||
 | 
							BITMAPINFO bmi;
 | 
				
			||||||
 | 
							BITMAPFILEHEADER bmfh;
 | 
				
			||||||
 | 
							int ScaledHeight = Height;
 | 
				
			||||||
 | 
							int ScaledWidth = Width;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if(ScaledHeight == 0) ScaledHeight = (int) ((float) DesktopHeight * (ScaledWidth / (float) DesktopWidth) + .5f);
 | 
				
			||||||
 | 
							if(ScaledWidth == 0) ScaledWidth = (int) ((float) DesktopWidth * (ScaledHeight / (float) DesktopHeight) + .5f);
 | 
				
			||||||
 | 
							if(ScaledHeight == 0) ScaledHeight = DesktopHeight;
 | 
				
			||||||
 | 
							if(ScaledWidth == 0) ScaledWidth = DesktopWidth;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							ZeroMemory(&bmi.bmiHeader, sizeof(BITMAPINFOHEADER));
 | 
				
			||||||
 | 
							bmi.bmiHeader.biSize = sizeof(BITMAPINFOHEADER);
 | 
				
			||||||
 | 
							bmi.bmiHeader.biWidth = DesktopWidth;
 | 
				
			||||||
 | 
							bmi.bmiHeader.biHeight = DesktopHeight;
 | 
				
			||||||
 | 
							bmi.bmiHeader.biPlanes = 1;
 | 
				
			||||||
 | 
							bmi.bmiHeader.biBitCount = 32;
 | 
				
			||||||
 | 
							bmi.bmiHeader.biCompression = BI_RGB;
 | 
				
			||||||
 | 
							bmi.bmiHeader.biSizeImage = nBytes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							ScreenDC = GetDC(NULL);
 | 
				
			||||||
 | 
							MemDC = CreateCompatibleDC(ScreenDC);
 | 
				
			||||||
 | 
							MemDC2 = CreateCompatibleDC(ScreenDC);
 | 
				
			||||||
 | 
							OriginalBitmap = CreateCompatibleBitmap(ScreenDC, DesktopWidth, DesktopHeight);
 | 
				
			||||||
 | 
							SetDIBits(MemDC2, OriginalBitmap, 0, DesktopHeight, pBytes, &bmi, 0); 
 | 
				
			||||||
 | 
							OldBitmap2 = SelectObject(MemDC2, (HGDIOBJ) OriginalBitmap);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							nBytes = ScaledWidth * ScaledHeight * 4;
 | 
				
			||||||
 | 
							bmi.bmiHeader.biWidth = ScaledWidth;
 | 
				
			||||||
 | 
							bmi.bmiHeader.biHeight = ScaledHeight;
 | 
				
			||||||
 | 
							bmi.bmiHeader.biSizeImage = nBytes;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							ScaledBitmap = CreateDIBSection(MemDC, &bmi, 0, (void**) &ScaledBytes, NULL, 0);
 | 
				
			||||||
 | 
							OldBitmap = SelectObject(MemDC, (HGDIOBJ) ScaledBitmap);
 | 
				
			||||||
 | 
							SetStretchBltMode(MemDC, HALFTONE);
 | 
				
			||||||
 | 
							StretchBlt(MemDC, 0, 0, ScaledWidth, ScaledHeight, MemDC2, 0, 0, DesktopWidth, DesktopHeight, SRCCOPY);
 | 
				
			||||||
 | 
							GdiFlush();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							ZeroMemory(&bmfh, sizeof(BITMAPFILEHEADER));
 | 
				
			||||||
 | 
							bmfh.bfOffBits = sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);
 | 
				
			||||||
 | 
							bmfh.bfSize = bmfh.bfOffBits + nBytes;
 | 
				
			||||||
 | 
							bmfh.bfType = 0x4d42;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							std::ofstream ofs(OutputFile.c_str(), std::ios_base::binary);
 | 
				
			||||||
 | 
							if(ofs)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								ofs.write((char*) &bmfh, sizeof(BITMAPFILEHEADER));
 | 
				
			||||||
 | 
								ofs.write((char*) &bmi, sizeof(BITMAPINFOHEADER));
 | 
				
			||||||
 | 
								ofs.write((char*) ScaledBytes, nBytes);
 | 
				
			||||||
 | 
								ofs.close();
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							SelectObject(MemDC, OldBitmap);
 | 
				
			||||||
 | 
							SelectObject(MemDC2, OldBitmap2);
 | 
				
			||||||
 | 
							DeleteObject(ScaledBitmap);
 | 
				
			||||||
 | 
							DeleteObject(OriginalBitmap);
 | 
				
			||||||
 | 
							DeleteDC(MemDC);
 | 
				
			||||||
 | 
							DeleteDC(MemDC2);
 | 
				
			||||||
 | 
							ReleaseDC(NULL, ScreenDC);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						UnmapViewOfFile(pBytes);
 | 
				
			||||||
 | 
						CloseHandle(fm);
 | 
				
			||||||
 | 
						ReleaseMutex(mutex);
 | 
				
			||||||
 | 
						CloseHandle(mutex);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * DexpotDesktopNameMeasure
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					DexpotDesktopNameMeasure::DexpotDesktopNameMeasure(HMODULE instance, UINT id) : DexpotMeasure(instance, id) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UINT DexpotDesktopNameMeasure::Initialize(LPCTSTR iniFile, LPCTSTR section)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						DesktopNumber = _ttoi(ReadConfigString(section, _T("VDDesktop"), _T("0")));
 | 
				
			||||||
 | 
						return DexpotMeasure::Initialize(iniFile, section);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LPCTSTR DexpotDesktopNameMeasure::GetString(UINT flags)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						UINT Desktop = (DesktopNumber == 0 ? CurrentDesktop : DesktopNumber) - 1;
 | 
				
			||||||
 | 
						if(Desktop >= 0 && Desktop < DesktopNames.size())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return DesktopNames[Desktop].c_str();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							StringBuffer[0] = _T('\0');
 | 
				
			||||||
 | 
							return StringBuffer;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotDesktopNameMeasure::InitializeData()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(PluginRegistered)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							int DesktopCount = (int) SendMessage(hWndDexpot, DEX_GETDESKTOPCOUNT, 0, 0);
 | 
				
			||||||
 | 
							DesktopNames.resize(DesktopCount);
 | 
				
			||||||
 | 
							if(DesktopNumber == 0)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								for(int i = 1; i <= DesktopCount; i++)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									PostMessage(hWndDexpot, DEX_GETDESKTOPTITLE, i, (LPARAM) hWndMessageWindow);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else if(DesktopNumber > 0 && DesktopNumber <= DesktopCount)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								PostMessage(hWndDexpot, DEX_GETDESKTOPTITLE, DesktopNumber, (LPARAM) hWndMessageWindow);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotDesktopNameMeasure::OnDesktopConfigurationChanged()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						InitializeData();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotDesktopNameMeasure::SetDesktopName(UINT Desktop, std::wstring &Name)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(--Desktop >= DesktopNames.size()) DesktopNames.resize(Desktop + 1);
 | 
				
			||||||
 | 
						if(Desktop >= 0) DesktopNames[Desktop] = Name;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * DexpotDesktopWallpaperMeasure
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					DexpotDesktopWallpaperMeasure::DexpotDesktopWallpaperMeasure(HMODULE instance, UINT id) : DexpotMeasure(instance, id) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UINT DexpotDesktopWallpaperMeasure::Initialize(LPCTSTR iniFile, LPCTSTR section)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						DesktopNumber = _ttoi(ReadConfigString(section, _T("VDDesktop"), _T("0")));
 | 
				
			||||||
 | 
						return DexpotMeasure::Initialize(iniFile, section);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LPCTSTR DexpotDesktopWallpaperMeasure::GetString(UINT flags)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(DesktopNumber == 0)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							SystemParametersInfo(SPI_GETDESKWALLPAPER, STRINGBUFFER_SIZE, StringBuffer, 0);
 | 
				
			||||||
 | 
							return StringBuffer;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if(DesktopNumber > 0 && (UINT) DesktopNumber <= DesktopWallpapers.size())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return DesktopWallpapers[DesktopNumber - 1].c_str();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						StringBuffer[0] = _T('\0');
 | 
				
			||||||
 | 
						return StringBuffer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotDesktopWallpaperMeasure::InitializeData()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(PluginRegistered)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							int DesktopCount = (int) SendMessage(hWndDexpot, DEX_GETDESKTOPCOUNT, 0, 0);
 | 
				
			||||||
 | 
							DesktopWallpapers.resize(DesktopCount);
 | 
				
			||||||
 | 
							if(DesktopNumber == 0)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								for(int i = 1; i <= DesktopCount; i++)
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									PostMessage(hWndDexpot, DEX_GETDESKTOPWALLPAPER, i, (LPARAM) hWndMessageWindow);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							else if(DesktopNumber > 0 && DesktopNumber <= DesktopCount)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								PostMessage(hWndDexpot, DEX_GETDESKTOPWALLPAPER, DesktopNumber, (LPARAM) hWndMessageWindow);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					void DexpotDesktopWallpaperMeasure::OnSwitched(int FromDesktop, int ToDesktop, WORD Flags, WORD Trigger)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						PostMessage(hWndDexpot, DEX_GETDESKTOPWALLPAPER, FromDesktop, (LPARAM) hWndMessageWindow);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotDesktopWallpaperMeasure::OnDesktopConfigurationChanged()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						InitializeData();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotDesktopWallpaperMeasure::SetDesktopWallpaper(UINT Desktop, std::wstring &Wallpaper)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(--Desktop >= DesktopWallpapers.size()) DesktopWallpapers.resize(Desktop + 1);
 | 
				
			||||||
 | 
						if(Desktop >= 0) DesktopWallpapers[Desktop] = Wallpaper;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					 * DexpotCommandMeasure
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
 | 
					DexpotCommandMeasure::DexpotCommandMeasure(HMODULE instance, UINT id) : DexpotMeasure(instance, id) {}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void DexpotCommandMeasure::ExecuteBang(LPCTSTR args)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(PluginRegistered)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							COPYDATASTRUCT cds;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							cds.dwData = DEX_DEXPOTCOMMAND;
 | 
				
			||||||
 | 
							cds.lpData = (PVOID) args;
 | 
				
			||||||
 | 
							cds.cbData = (DWORD) (_tcslen(args) + 1) * sizeof(TCHAR);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							SendMessage(hWndDexpot, WM_COPYDATA, (WPARAM) hWndMessageWindow, (LPARAM) &cds);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										208
									
								
								Plugins/PluginVirtualDesktops/DexpotMeasure.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										208
									
								
								Plugins/PluginVirtualDesktops/DexpotMeasure.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,208 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Copyright (C) 2010 Patrick Dubbert
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  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.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					#include "VDMeasure.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <windows.h>
 | 
				
			||||||
 | 
					#include <map>
 | 
				
			||||||
 | 
					#include <set>
 | 
				
			||||||
 | 
					#include <vector>
 | 
				
			||||||
 | 
					#include <string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#define STRINGBUFFER_SIZE MAX_PATH
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DexpotMeasure : public VDMeasure
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						DexpotMeasure(HMODULE instance, UINT id);
 | 
				
			||||||
 | 
						virtual ~DexpotMeasure(void) {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual UINT Initialize(LPCTSTR iniFile, LPCTSTR section);
 | 
				
			||||||
 | 
						virtual void Finalize();
 | 
				
			||||||
 | 
						virtual UINT Update();
 | 
				
			||||||
 | 
						virtual LPCTSTR GetString(UINT flags);
 | 
				
			||||||
 | 
						virtual void ExecuteBang(LPCTSTR args) {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static DexpotMeasure* CreateMeasure(HMODULE instance, UINT id, LPCTSTR iniFile, LPCTSTR section);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
						virtual void InitializeData() {};
 | 
				
			||||||
 | 
						virtual void OnSwitched(int FromDesktop, int ToDesktop, WORD Flags, WORD Trigger) {};
 | 
				
			||||||
 | 
						virtual void OnDesktopCountChanged(int) {};
 | 
				
			||||||
 | 
						virtual void OnShutdown() {};
 | 
				
			||||||
 | 
						virtual void OnDexpotStarted();
 | 
				
			||||||
 | 
						virtual void OnDesktopConfigurationChanged() {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static void SendBang(std::wstring&);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static HWND hWndDexpot;
 | 
				
			||||||
 | 
						static HWND hWndMessageWindow;
 | 
				
			||||||
 | 
						static TCHAR StringBuffer[STRINGBUFFER_SIZE];
 | 
				
			||||||
 | 
						static BOOL PluginRegistered;
 | 
				
			||||||
 | 
						static int CurrentDesktop;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
						static BOOL FindDexpotWindow();
 | 
				
			||||||
 | 
						static HWND CreateMessageWindow();
 | 
				
			||||||
 | 
						static LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static int InstanceCount;
 | 
				
			||||||
 | 
						static HWND hWndRainmeterControl;
 | 
				
			||||||
 | 
						static std::set<DexpotMeasure*> DexpotMeasures;
 | 
				
			||||||
 | 
						static UINT WM_DEXPOTSTARTED;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DexpotDesktopCountMeasure : public DexpotMeasure
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						DexpotDesktopCountMeasure(HMODULE instance, UINT id);
 | 
				
			||||||
 | 
						virtual ~DexpotDesktopCountMeasure(void) {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual UINT Initialize(LPCTSTR iniFile, LPCTSTR section);
 | 
				
			||||||
 | 
						virtual UINT Update();
 | 
				
			||||||
 | 
						virtual void InitializeData();
 | 
				
			||||||
 | 
						virtual void OnDesktopCountChanged(int);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
						enum DesktopCountType
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Total,
 | 
				
			||||||
 | 
							Columns,
 | 
				
			||||||
 | 
							Rows,
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						int DesktopCount;
 | 
				
			||||||
 | 
						std::wstring OnChange;
 | 
				
			||||||
 | 
						DesktopCountType CountType;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DexpotCurrentDesktopMeasure : public DexpotMeasure
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						DexpotCurrentDesktopMeasure(HMODULE instance, UINT id);
 | 
				
			||||||
 | 
						virtual ~DexpotCurrentDesktopMeasure(void) {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual UINT Initialize(LPCTSTR iniFile, LPCTSTR section);
 | 
				
			||||||
 | 
						virtual UINT Update();
 | 
				
			||||||
 | 
						virtual void OnSwitched(int, int, WORD, WORD);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
						std::wstring OnChange;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DexpotVDMActiveMeasure : public DexpotMeasure
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						DexpotVDMActiveMeasure(HMODULE instance, UINT id);
 | 
				
			||||||
 | 
						virtual ~DexpotVDMActiveMeasure(void) {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual UINT Initialize(LPCTSTR iniFile, LPCTSTR section);
 | 
				
			||||||
 | 
						virtual UINT Update();
 | 
				
			||||||
 | 
						virtual void OnShutdown();
 | 
				
			||||||
 | 
						virtual void OnDexpotStarted();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
						std::wstring OnActivate;
 | 
				
			||||||
 | 
						std::wstring OnDeactivate;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DexpotSwitchDesktopMeasure : public DexpotMeasure
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						DexpotSwitchDesktopMeasure(HMODULE instance, UINT id);
 | 
				
			||||||
 | 
						virtual ~DexpotSwitchDesktopMeasure(void) {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual void ExecuteBang(LPCTSTR args);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DexpotScreenshotMeasure : public DexpotMeasure
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						DexpotScreenshotMeasure(HMODULE instance, UINT id);
 | 
				
			||||||
 | 
						virtual ~DexpotScreenshotMeasure(void) {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual UINT Initialize(LPCTSTR iniFile, LPCTSTR section);
 | 
				
			||||||
 | 
						virtual UINT Update();
 | 
				
			||||||
 | 
						virtual LPCTSTR GetString(UINT flags);
 | 
				
			||||||
 | 
						virtual void InitializeData();
 | 
				
			||||||
 | 
						virtual void OnSwitched(int, int, WORD, WORD);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
						void UpdateScreenshot();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						std::wstring OutputFile;
 | 
				
			||||||
 | 
						int DesktopNumber;
 | 
				
			||||||
 | 
						int Width;
 | 
				
			||||||
 | 
						int Height;
 | 
				
			||||||
 | 
						BOOL RefreshOnUpdate;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DexpotDesktopNameMeasure : public DexpotMeasure
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						DexpotDesktopNameMeasure(HMODULE instance, UINT id);
 | 
				
			||||||
 | 
						virtual ~DexpotDesktopNameMeasure(void) {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual UINT Initialize(LPCTSTR iniFile, LPCTSTR section);
 | 
				
			||||||
 | 
						virtual LPCTSTR GetString(UINT flags);
 | 
				
			||||||
 | 
						virtual void InitializeData();
 | 
				
			||||||
 | 
						virtual void OnDesktopConfigurationChanged();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static void SetDesktopName(UINT Desktop, std::wstring &Name);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
						int DesktopNumber;
 | 
				
			||||||
 | 
						static std::vector<std::wstring> DesktopNames;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DexpotDesktopWallpaperMeasure : public DexpotMeasure
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						DexpotDesktopWallpaperMeasure(HMODULE instance, UINT id);
 | 
				
			||||||
 | 
						virtual ~DexpotDesktopWallpaperMeasure(void) {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual UINT Initialize(LPCTSTR iniFile, LPCTSTR section);
 | 
				
			||||||
 | 
						virtual LPCTSTR GetString(UINT flags);
 | 
				
			||||||
 | 
						virtual void InitializeData();
 | 
				
			||||||
 | 
						virtual void OnSwitched(int FromDesktop, int ToDesktop, WORD Flags, WORD Trigger);
 | 
				
			||||||
 | 
						virtual void OnDesktopConfigurationChanged();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static void SetDesktopWallpaper(UINT Desktop, std::wstring &Wallpaper);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
						int DesktopNumber;
 | 
				
			||||||
 | 
						static std::vector<std::wstring> DesktopWallpapers;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class DexpotCommandMeasure : public DexpotMeasure
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						DexpotCommandMeasure(HMODULE instance, UINT id);
 | 
				
			||||||
 | 
						virtual ~DexpotCommandMeasure(void) {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual void ExecuteBang(LPCTSTR args);
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										610
									
								
								Plugins/PluginVirtualDesktops/PluginVirtualDesktops.vcproj
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										610
									
								
								Plugins/PluginVirtualDesktops/PluginVirtualDesktops.vcproj
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,610 @@
 | 
				
			|||||||
 | 
					<?xml version="1.0" encoding="Windows-1252"?>
 | 
				
			||||||
 | 
					<VisualStudioProject
 | 
				
			||||||
 | 
						ProjectType="Visual C++"
 | 
				
			||||||
 | 
						Version="9,00"
 | 
				
			||||||
 | 
						Name="PluginVirtualDesktops"
 | 
				
			||||||
 | 
						ProjectGUID="{4640AB3A-5A8B-2DA0-980C-A70BCAB3A7F1}"
 | 
				
			||||||
 | 
						TargetFrameworkVersion="0"
 | 
				
			||||||
 | 
						>
 | 
				
			||||||
 | 
						<Platforms>
 | 
				
			||||||
 | 
							<Platform
 | 
				
			||||||
 | 
								Name="Win32"
 | 
				
			||||||
 | 
							/>
 | 
				
			||||||
 | 
							<Platform
 | 
				
			||||||
 | 
								Name="x64"
 | 
				
			||||||
 | 
							/>
 | 
				
			||||||
 | 
						</Platforms>
 | 
				
			||||||
 | 
						<ToolFiles>
 | 
				
			||||||
 | 
						</ToolFiles>
 | 
				
			||||||
 | 
						<Configurations>
 | 
				
			||||||
 | 
							<Configuration
 | 
				
			||||||
 | 
								Name="Release|Win32"
 | 
				
			||||||
 | 
								OutputDirectory=".\x32/Release"
 | 
				
			||||||
 | 
								IntermediateDirectory=".\x32/Release"
 | 
				
			||||||
 | 
								ConfigurationType="2"
 | 
				
			||||||
 | 
								InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 | 
				
			||||||
 | 
								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=".\x32/Release/PluginVirtualDesktops.tlb"
 | 
				
			||||||
 | 
									HeaderFileName=""
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCCLCompilerTool"
 | 
				
			||||||
 | 
									Optimization="2"
 | 
				
			||||||
 | 
									InlineFunctionExpansion="1"
 | 
				
			||||||
 | 
									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;UNICODE;_USRDLL;PluginVirtualDesktops_EXPORTS"
 | 
				
			||||||
 | 
									StringPooling="true"
 | 
				
			||||||
 | 
									RuntimeLibrary="2"
 | 
				
			||||||
 | 
									EnableFunctionLevelLinking="true"
 | 
				
			||||||
 | 
									UsePrecompiledHeader="0"
 | 
				
			||||||
 | 
									PrecompiledHeaderFile=".\x32/Release/PluginVirtualDesktops.pch"
 | 
				
			||||||
 | 
									AssemblerListingLocation=".\x32/Release/"
 | 
				
			||||||
 | 
									ObjectFile=".\x32/Release/"
 | 
				
			||||||
 | 
									ProgramDataBaseFileName=".\x32/Release/"
 | 
				
			||||||
 | 
									WarningLevel="3"
 | 
				
			||||||
 | 
									SuppressStartupBanner="true"
 | 
				
			||||||
 | 
									DebugInformationFormat="3"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCManagedResourceCompilerTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCResourceCompilerTool"
 | 
				
			||||||
 | 
									PreprocessorDefinitions="NDEBUG"
 | 
				
			||||||
 | 
									Culture="1035"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCPreLinkEventTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCLinkerTool"
 | 
				
			||||||
 | 
									AdditionalDependencies="Rainmeter.lib"
 | 
				
			||||||
 | 
									OutputFile="../../TestBench/x32/Release/Plugins/VirtualDesktops.dll"
 | 
				
			||||||
 | 
									LinkIncremental="1"
 | 
				
			||||||
 | 
									SuppressStartupBanner="true"
 | 
				
			||||||
 | 
									AdditionalLibraryDirectories="..\..\Library\x32\Release"
 | 
				
			||||||
 | 
									GenerateDebugInformation="true"
 | 
				
			||||||
 | 
									ProgramDatabaseFile=".\x32/Release/VirtualDesktops.pdb"
 | 
				
			||||||
 | 
									ImportLibrary=".\x32/Release/VirtualDesktops.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="$(PlatformName)\$(ConfigurationName)"
 | 
				
			||||||
 | 
								IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
 | 
				
			||||||
 | 
								ConfigurationType="2"
 | 
				
			||||||
 | 
								InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 | 
				
			||||||
 | 
								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=".\x32/Release/PluginVirtualDesktops.tlb"
 | 
				
			||||||
 | 
									HeaderFileName=""
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCCLCompilerTool"
 | 
				
			||||||
 | 
									Optimization="2"
 | 
				
			||||||
 | 
									InlineFunctionExpansion="1"
 | 
				
			||||||
 | 
									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;UNICODE;_USRDLL;PluginVirtualDesktops_EXPORTS"
 | 
				
			||||||
 | 
									StringPooling="true"
 | 
				
			||||||
 | 
									RuntimeLibrary="2"
 | 
				
			||||||
 | 
									EnableFunctionLevelLinking="true"
 | 
				
			||||||
 | 
									UsePrecompiledHeader="0"
 | 
				
			||||||
 | 
									PrecompiledHeaderFile=".\x32/Release/PluginVirtualDesktops.pch"
 | 
				
			||||||
 | 
									AssemblerListingLocation=".\x32/Release/"
 | 
				
			||||||
 | 
									ObjectFile=".\x32/Release/"
 | 
				
			||||||
 | 
									ProgramDataBaseFileName=".\x32/Release/"
 | 
				
			||||||
 | 
									WarningLevel="3"
 | 
				
			||||||
 | 
									SuppressStartupBanner="true"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCManagedResourceCompilerTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCResourceCompilerTool"
 | 
				
			||||||
 | 
									PreprocessorDefinitions="NDEBUG"
 | 
				
			||||||
 | 
									Culture="1035"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCPreLinkEventTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCLinkerTool"
 | 
				
			||||||
 | 
									OutputFile="../../TestBench/x32/Release/Plugins/VirtualDesktops.dll"
 | 
				
			||||||
 | 
									LinkIncremental="1"
 | 
				
			||||||
 | 
									SuppressStartupBanner="true"
 | 
				
			||||||
 | 
									ProgramDatabaseFile=".\x32/Release/VirtualDesktops.pdb"
 | 
				
			||||||
 | 
									ImportLibrary=".\x32/Release/VirtualDesktops.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=".\x32/Debug"
 | 
				
			||||||
 | 
								IntermediateDirectory=".\x32/Debug"
 | 
				
			||||||
 | 
								ConfigurationType="2"
 | 
				
			||||||
 | 
								InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 | 
				
			||||||
 | 
								UseOfMFC="0"
 | 
				
			||||||
 | 
								ATLMinimizesCRunTimeLibraryUsage="false"
 | 
				
			||||||
 | 
								CharacterSet="1"
 | 
				
			||||||
 | 
								>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCPreBuildEventTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCCustomBuildTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCXMLDataGeneratorTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCWebServiceProxyGeneratorTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCMIDLTool"
 | 
				
			||||||
 | 
									PreprocessorDefinitions="_DEBUG"
 | 
				
			||||||
 | 
									MkTypLibCompatible="true"
 | 
				
			||||||
 | 
									SuppressStartupBanner="true"
 | 
				
			||||||
 | 
									TargetEnvironment="1"
 | 
				
			||||||
 | 
									TypeLibraryName=".\x32/Debug/PluginVirtualDesktops.tlb"
 | 
				
			||||||
 | 
									HeaderFileName=""
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCCLCompilerTool"
 | 
				
			||||||
 | 
									Optimization="0"
 | 
				
			||||||
 | 
									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;UNICODE;_USRDLL;PluginVirtualDesktops_EXPORTS"
 | 
				
			||||||
 | 
									BasicRuntimeChecks="3"
 | 
				
			||||||
 | 
									RuntimeLibrary="3"
 | 
				
			||||||
 | 
									UsePrecompiledHeader="0"
 | 
				
			||||||
 | 
									PrecompiledHeaderFile=".\x32/Debug/PluginVirtualDesktops.pch"
 | 
				
			||||||
 | 
									AssemblerListingLocation=".\x32/Debug/"
 | 
				
			||||||
 | 
									ObjectFile=".\x32/Debug/"
 | 
				
			||||||
 | 
									ProgramDataBaseFileName=".\x32/Debug/"
 | 
				
			||||||
 | 
									WarningLevel="3"
 | 
				
			||||||
 | 
									SuppressStartupBanner="true"
 | 
				
			||||||
 | 
									DebugInformationFormat="4"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCManagedResourceCompilerTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCResourceCompilerTool"
 | 
				
			||||||
 | 
									PreprocessorDefinitions="_DEBUG"
 | 
				
			||||||
 | 
									Culture="1035"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCPreLinkEventTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCLinkerTool"
 | 
				
			||||||
 | 
									OutputFile="../../TestBench/x32/Debug/Plugins/VirtualDesktops.dll"
 | 
				
			||||||
 | 
									LinkIncremental="1"
 | 
				
			||||||
 | 
									SuppressStartupBanner="true"
 | 
				
			||||||
 | 
									GenerateDebugInformation="true"
 | 
				
			||||||
 | 
									ProgramDatabaseFile=".\x32/Debug/VirtualDesktops.pdb"
 | 
				
			||||||
 | 
									ImportLibrary=".\x32/Debug/VirtualDesktops.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="$(PlatformName)\$(ConfigurationName)"
 | 
				
			||||||
 | 
								IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
 | 
				
			||||||
 | 
								ConfigurationType="2"
 | 
				
			||||||
 | 
								InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 | 
				
			||||||
 | 
								UseOfMFC="0"
 | 
				
			||||||
 | 
								ATLMinimizesCRunTimeLibraryUsage="false"
 | 
				
			||||||
 | 
								CharacterSet="1"
 | 
				
			||||||
 | 
								>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCPreBuildEventTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCCustomBuildTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCXMLDataGeneratorTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCWebServiceProxyGeneratorTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCMIDLTool"
 | 
				
			||||||
 | 
									PreprocessorDefinitions="_DEBUG"
 | 
				
			||||||
 | 
									MkTypLibCompatible="true"
 | 
				
			||||||
 | 
									SuppressStartupBanner="true"
 | 
				
			||||||
 | 
									TargetEnvironment="3"
 | 
				
			||||||
 | 
									TypeLibraryName=".\x32/Debug/PluginVirtualDesktops.tlb"
 | 
				
			||||||
 | 
									HeaderFileName=""
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCCLCompilerTool"
 | 
				
			||||||
 | 
									Optimization="0"
 | 
				
			||||||
 | 
									PreprocessorDefinitions="WIN32;_DEBUG;_WINDOWS;UNICODE;_USRDLL;PluginVirtualDesktops_EXPORTS"
 | 
				
			||||||
 | 
									BasicRuntimeChecks="3"
 | 
				
			||||||
 | 
									RuntimeLibrary="3"
 | 
				
			||||||
 | 
									UsePrecompiledHeader="0"
 | 
				
			||||||
 | 
									PrecompiledHeaderFile=".\x32/Debug/PluginVirtualDesktops.pch"
 | 
				
			||||||
 | 
									AssemblerListingLocation=".\x32/Debug/"
 | 
				
			||||||
 | 
									ObjectFile=".\x32/Debug/"
 | 
				
			||||||
 | 
									ProgramDataBaseFileName=".\x32/Debug/"
 | 
				
			||||||
 | 
									WarningLevel="3"
 | 
				
			||||||
 | 
									SuppressStartupBanner="true"
 | 
				
			||||||
 | 
									DebugInformationFormat="3"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCManagedResourceCompilerTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCResourceCompilerTool"
 | 
				
			||||||
 | 
									PreprocessorDefinitions="_DEBUG"
 | 
				
			||||||
 | 
									Culture="1035"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCPreLinkEventTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCLinkerTool"
 | 
				
			||||||
 | 
									OutputFile="../../TestBench/x32/Debug/Plugins/VirtualDesktops.dll"
 | 
				
			||||||
 | 
									LinkIncremental="1"
 | 
				
			||||||
 | 
									SuppressStartupBanner="true"
 | 
				
			||||||
 | 
									GenerateDebugInformation="true"
 | 
				
			||||||
 | 
									ProgramDatabaseFile=".\x32/Debug/VirtualDesktops.pdb"
 | 
				
			||||||
 | 
									ImportLibrary=".\x32/Debug/VirtualDesktops.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="Release64|Win32"
 | 
				
			||||||
 | 
								OutputDirectory=".\x64/Release"
 | 
				
			||||||
 | 
								IntermediateDirectory=".\x64/Release"
 | 
				
			||||||
 | 
								ConfigurationType="2"
 | 
				
			||||||
 | 
								InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 | 
				
			||||||
 | 
								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=".\x64/Release/PluginVirtualDesktops.tlb"
 | 
				
			||||||
 | 
									HeaderFileName=""
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCCLCompilerTool"
 | 
				
			||||||
 | 
									AdditionalOptions="/GL /EHsc /GA "
 | 
				
			||||||
 | 
									Optimization="2"
 | 
				
			||||||
 | 
									InlineFunctionExpansion="1"
 | 
				
			||||||
 | 
									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;UNICODE;_USRDLL;PluginVirtualDesktops_EXPORTS"
 | 
				
			||||||
 | 
									StringPooling="true"
 | 
				
			||||||
 | 
									RuntimeLibrary="2"
 | 
				
			||||||
 | 
									EnableFunctionLevelLinking="true"
 | 
				
			||||||
 | 
									PrecompiledHeaderFile=".\x64/Release/PluginVirtualDesktops.pch"
 | 
				
			||||||
 | 
									AssemblerListingLocation=".\x64/Release/"
 | 
				
			||||||
 | 
									ObjectFile=".\x64/Release/"
 | 
				
			||||||
 | 
									ProgramDataBaseFileName=".\x64/Release/"
 | 
				
			||||||
 | 
									WarningLevel="3"
 | 
				
			||||||
 | 
									SuppressStartupBanner="true"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCManagedResourceCompilerTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCResourceCompilerTool"
 | 
				
			||||||
 | 
									PreprocessorDefinitions="NDEBUG"
 | 
				
			||||||
 | 
									Culture="1035"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCPreLinkEventTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCLinkerTool"
 | 
				
			||||||
 | 
									AdditionalOptions="/machine:AMD64 /LTCG "
 | 
				
			||||||
 | 
									AdditionalDependencies="bufferoverflowU.lib odbc32.lib odbccp32.lib"
 | 
				
			||||||
 | 
									OutputFile="../../TestBench/x64/Release/Plugins/VirtualDesktops.dll"
 | 
				
			||||||
 | 
									LinkIncremental="1"
 | 
				
			||||||
 | 
									SuppressStartupBanner="true"
 | 
				
			||||||
 | 
									ProgramDatabaseFile=".\x64/Release/VirtualDesktops.pdb"
 | 
				
			||||||
 | 
									ImportLibrary=".\x64/Release/VirtualDesktops.lib"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCALinkTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCManifestTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCXDCMakeTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCBscMakeTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCFxCopTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCAppVerifierTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCPostBuildEventTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
							</Configuration>
 | 
				
			||||||
 | 
							<Configuration
 | 
				
			||||||
 | 
								Name="Release64|x64"
 | 
				
			||||||
 | 
								OutputDirectory="$(PlatformName)\$(ConfigurationName)"
 | 
				
			||||||
 | 
								IntermediateDirectory="$(PlatformName)\$(ConfigurationName)"
 | 
				
			||||||
 | 
								ConfigurationType="2"
 | 
				
			||||||
 | 
								InheritedPropertySheets="$(VCInstallDir)VCProjectDefaults\UpgradeFromVC71.vsprops"
 | 
				
			||||||
 | 
								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=".\x64/Release/PluginVirtualDesktops.tlb"
 | 
				
			||||||
 | 
									HeaderFileName=""
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCCLCompilerTool"
 | 
				
			||||||
 | 
									AdditionalOptions="/GL /EHsc /GA "
 | 
				
			||||||
 | 
									Optimization="2"
 | 
				
			||||||
 | 
									InlineFunctionExpansion="1"
 | 
				
			||||||
 | 
									PreprocessorDefinitions="WIN32;NDEBUG;_WINDOWS;UNICODE;_USRDLL;PluginVirtualDesktops_EXPORTS"
 | 
				
			||||||
 | 
									StringPooling="true"
 | 
				
			||||||
 | 
									RuntimeLibrary="2"
 | 
				
			||||||
 | 
									EnableFunctionLevelLinking="true"
 | 
				
			||||||
 | 
									PrecompiledHeaderFile=".\x64/Release/PluginVirtualDesktops.pch"
 | 
				
			||||||
 | 
									AssemblerListingLocation=".\x64/Release/"
 | 
				
			||||||
 | 
									ObjectFile=".\x64/Release/"
 | 
				
			||||||
 | 
									ProgramDataBaseFileName=".\x64/Release/"
 | 
				
			||||||
 | 
									WarningLevel="3"
 | 
				
			||||||
 | 
									SuppressStartupBanner="true"
 | 
				
			||||||
 | 
									DebugInformationFormat="3"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCManagedResourceCompilerTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCResourceCompilerTool"
 | 
				
			||||||
 | 
									PreprocessorDefinitions="NDEBUG"
 | 
				
			||||||
 | 
									Culture="1035"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCPreLinkEventTool"
 | 
				
			||||||
 | 
								/>
 | 
				
			||||||
 | 
								<Tool
 | 
				
			||||||
 | 
									Name="VCLinkerTool"
 | 
				
			||||||
 | 
									AdditionalOptions="/machine:AMD64 /LTCG "
 | 
				
			||||||
 | 
									AdditionalDependencies=" odbc32.lib odbccp32.lib Rainmeter.lib"
 | 
				
			||||||
 | 
									OutputFile="../../TestBench/x64/Release/Plugins/VirtualDesktops.dll"
 | 
				
			||||||
 | 
									LinkIncremental="1"
 | 
				
			||||||
 | 
									SuppressStartupBanner="true"
 | 
				
			||||||
 | 
									AdditionalLibraryDirectories="..\..\Library\x64\Release"
 | 
				
			||||||
 | 
									ProgramDatabaseFile=".\x64/Release/VirtualDesktops.pdb"
 | 
				
			||||||
 | 
									ImportLibrary=".\x64/Release/VirtualDesktops.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="Dexpot"
 | 
				
			||||||
 | 
								>
 | 
				
			||||||
 | 
								<File
 | 
				
			||||||
 | 
									RelativePath=".\DexpotConstants.h"
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
 | 
								</File>
 | 
				
			||||||
 | 
								<File
 | 
				
			||||||
 | 
									RelativePath=".\DexpotMeasure.cpp"
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
 | 
								</File>
 | 
				
			||||||
 | 
								<File
 | 
				
			||||||
 | 
									RelativePath=".\DexpotMeasure.h"
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
 | 
								</File>
 | 
				
			||||||
 | 
							</Filter>
 | 
				
			||||||
 | 
							<Filter
 | 
				
			||||||
 | 
								Name="VirtuaWin"
 | 
				
			||||||
 | 
								>
 | 
				
			||||||
 | 
								<File
 | 
				
			||||||
 | 
									RelativePath=".\VirtuaWinMeasure.cpp"
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
 | 
								</File>
 | 
				
			||||||
 | 
								<File
 | 
				
			||||||
 | 
									RelativePath=".\VirtuaWinMeasure.h"
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
 | 
								</File>
 | 
				
			||||||
 | 
								<File
 | 
				
			||||||
 | 
									RelativePath=".\VirtuaWinMessages.h"
 | 
				
			||||||
 | 
									>
 | 
				
			||||||
 | 
								</File>
 | 
				
			||||||
 | 
							</Filter>
 | 
				
			||||||
 | 
							<File
 | 
				
			||||||
 | 
								RelativePath=".\VDMeasure.h"
 | 
				
			||||||
 | 
								>
 | 
				
			||||||
 | 
							</File>
 | 
				
			||||||
 | 
							<File
 | 
				
			||||||
 | 
								RelativePath=".\VirtualDesktops.cpp"
 | 
				
			||||||
 | 
								>
 | 
				
			||||||
 | 
							</File>
 | 
				
			||||||
 | 
						</Files>
 | 
				
			||||||
 | 
						<Globals>
 | 
				
			||||||
 | 
						</Globals>
 | 
				
			||||||
 | 
					</VisualStudioProject>
 | 
				
			||||||
							
								
								
									
										65
									
								
								Plugins/PluginVirtualDesktops/VDMeasure.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								Plugins/PluginVirtualDesktops/VDMeasure.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,65 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Copyright (C) 2010 Patrick Dubbert
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  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.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <windows.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class VDMeasure
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						VDMeasure(HMODULE instance, UINT id) { hInstance = instance; ID = id; };
 | 
				
			||||||
 | 
						virtual ~VDMeasure(void) {};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					  This function is called when the measure is initialized.
 | 
				
			||||||
 | 
					  The function must return the maximum value that can be measured. 
 | 
				
			||||||
 | 
					  The return value can also be 0, which means that Rainmeter will
 | 
				
			||||||
 | 
					  track the maximum value automatically. The parameters for this
 | 
				
			||||||
 | 
					  function are:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  iniFile   The name of the ini-file (usually Rainmeter.ini)
 | 
				
			||||||
 | 
					  section   The name of the section in the ini-file for this measure
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
						virtual UINT Initialize(LPCTSTR iniFile, LPCTSTR section) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					  If the measure needs to free resources before quitting.
 | 
				
			||||||
 | 
					  The plugin can export Finalize function, which is called
 | 
				
			||||||
 | 
					  when Rainmeter quits (or refreshes).
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
						virtual void Finalize() = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					  This function is called when new value should be measured.
 | 
				
			||||||
 | 
					  The function returns the new value.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
						virtual UINT Update() = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					  This function is called when the value should be
 | 
				
			||||||
 | 
					  returned as a string.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
						virtual LPCTSTR GetString(UINT flags) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual void ExecuteBang(LPCTSTR args) = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					protected:
 | 
				
			||||||
 | 
						static HMODULE hInstance;
 | 
				
			||||||
 | 
						UINT ID;
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										148
									
								
								Plugins/PluginVirtualDesktops/VirtuaWinMeasure.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										148
									
								
								Plugins/PluginVirtualDesktops/VirtuaWinMeasure.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,148 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Copyright (C) 2010 Patrick Dubbert
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  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.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "VirtuaWinMeasure.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <tchar.h>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "VirtuaWinMessages.h"
 | 
				
			||||||
 | 
					#include "../../Library/Export.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					HWND VirtuaWinMeasure::vwHandle = NULL;
 | 
				
			||||||
 | 
					std::map<std::wstring, VirtuaWinMeasure::MeasureType> VirtuaWinMeasure::StringToType;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					VirtuaWinMeasure::VirtuaWinMeasure(HMODULE instance, UINT id) : VDMeasure(instance, id)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(StringToType.size() == 0)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							StringToType.insert(std::make_pair(std::wstring(L"VDMActive"), VDMActive));
 | 
				
			||||||
 | 
							StringToType.insert(std::make_pair(std::wstring(L"DesktopCount"), DesktopCountTotal));
 | 
				
			||||||
 | 
							StringToType.insert(std::make_pair(std::wstring(L"CurrentDesktop"), CurrentDesktop));
 | 
				
			||||||
 | 
							StringToType.insert(std::make_pair(std::wstring(L"SwitchDesktop"), SwitchDesktop));
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					VirtuaWinMeasure::~VirtuaWinMeasure(void)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UINT VirtuaWinMeasure::Initialize(LPCTSTR iniFile, LPCTSTR section)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						std::wstring TypeString(ReadConfigString(section, _T("VDMeasureType"), _T("")));
 | 
				
			||||||
 | 
						std::map<std::wstring, MeasureType>::iterator i = StringToType.find(TypeString);
 | 
				
			||||||
 | 
						if(i != StringToType.end())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Type = i->second;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Type = Unknown;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						switch(Type)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						case VDMActive:
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						case DesktopCountTotal:
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								LPCTSTR CountType = ReadConfigString(section, _T("VDDesktopCount"), _T(""));
 | 
				
			||||||
 | 
								if(_tcsicmp(CountType, _T("X")) == 0) Type = DesktopCountColumns;
 | 
				
			||||||
 | 
								else if(_tcsicmp(CountType, _T("Y")) == 0) Type = DesktopCountRows;
 | 
				
			||||||
 | 
								if(FindVirtuaWinWindow())
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									return (UINT) SendMessage(vwHandle, VW_DESKTOP_SIZE, 0, 0);
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
								break;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void VirtuaWinMeasure::Finalize()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UINT VirtuaWinMeasure::Update()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(!FindVirtuaWinWindow())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return 0;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						switch(Type)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						case VDMActive:
 | 
				
			||||||
 | 
							return 1;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						case DesktopCountColumns:
 | 
				
			||||||
 | 
							return (UINT) SendMessage(vwHandle, VW_DESKX, 0, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						case DesktopCountRows:
 | 
				
			||||||
 | 
							return (UINT) SendMessage(vwHandle, VW_DESKY, 0, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						case DesktopCountTotal:
 | 
				
			||||||
 | 
							return (UINT) SendMessage(vwHandle, VW_DESKX, 0, 0) * (UINT) SendMessage(vwHandle, VW_DESKY, 0, 0);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						case CurrentDesktop:
 | 
				
			||||||
 | 
							return (UINT) SendMessage(vwHandle, VW_CURDESK, 0, 0);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LPCTSTR VirtuaWinMeasure::GetString(UINT flags)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						static TCHAR Buffer[MAX_PATH];
 | 
				
			||||||
 | 
						Buffer[0] = _T('\0');
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						switch(Type)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						case VDMActive:
 | 
				
			||||||
 | 
						case DesktopCountColumns:
 | 
				
			||||||
 | 
						case DesktopCountRows:
 | 
				
			||||||
 | 
						case DesktopCountTotal:
 | 
				
			||||||
 | 
						case CurrentDesktop:
 | 
				
			||||||
 | 
							swprintf_s(Buffer, MAX_PATH, L"%i", Update());
 | 
				
			||||||
 | 
							break;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return Buffer;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void VirtuaWinMeasure::ExecuteBang(LPCTSTR args)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						INT32 Desktop;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(!FindVirtuaWinWindow()) return;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						switch(Type)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
						case SwitchDesktop:
 | 
				
			||||||
 | 
							Desktop = _wtoi(args);
 | 
				
			||||||
 | 
							SendNotifyMessage(vwHandle, VW_CHANGEDESK, Desktop, 0);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					BOOL VirtuaWinMeasure::FindVirtuaWinWindow()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						if(IsWindow(vwHandle)) return TRUE;
 | 
				
			||||||
 | 
						vwHandle = FindWindow(_T("VirtuaWinMainClass"), _T("VirtuaWinMainClass"));
 | 
				
			||||||
 | 
						return vwHandle != NULL;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										57
									
								
								Plugins/PluginVirtualDesktops/VirtuaWinMeasure.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										57
									
								
								Plugins/PluginVirtualDesktops/VirtuaWinMeasure.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,57 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Copyright (C) 2010 Patrick Dubbert
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  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.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#pragma once
 | 
				
			||||||
 | 
					#include "VDMeasure.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <windows.h>
 | 
				
			||||||
 | 
					#include <map>
 | 
				
			||||||
 | 
					#include <string>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					class VirtuaWinMeasure :
 | 
				
			||||||
 | 
						public VDMeasure
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
					public:
 | 
				
			||||||
 | 
						VirtuaWinMeasure(HMODULE, UINT id);
 | 
				
			||||||
 | 
						virtual ~VirtuaWinMeasure(void);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						virtual UINT Initialize(LPCTSTR iniFile, LPCTSTR section);
 | 
				
			||||||
 | 
						virtual void Finalize();
 | 
				
			||||||
 | 
						virtual UINT Update();
 | 
				
			||||||
 | 
						virtual LPCTSTR GetString(UINT flags);
 | 
				
			||||||
 | 
						virtual void ExecuteBang(LPCTSTR args);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					private:
 | 
				
			||||||
 | 
						enum MeasureType
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Unknown,
 | 
				
			||||||
 | 
							VDMActive,
 | 
				
			||||||
 | 
							DesktopCountRows,
 | 
				
			||||||
 | 
							DesktopCountColumns,
 | 
				
			||||||
 | 
							DesktopCountTotal,
 | 
				
			||||||
 | 
							CurrentDesktop,
 | 
				
			||||||
 | 
							SwitchDesktop,
 | 
				
			||||||
 | 
						};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						static BOOL FindVirtuaWinWindow();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						MeasureType Type;
 | 
				
			||||||
 | 
						static std::map<std::wstring, MeasureType> StringToType;
 | 
				
			||||||
 | 
						static HWND vwHandle;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
							
								
								
									
										172
									
								
								Plugins/PluginVirtualDesktops/VirtuaWinMessages.h
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										172
									
								
								Plugins/PluginVirtualDesktops/VirtuaWinMessages.h
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,172 @@
 | 
				
			|||||||
 | 
					#ifndef _MESSAGES_H_
 | 
				
			||||||
 | 
					#define _MESSAGES_H_
 | 
				
			||||||
 | 
					/*************************************************************************
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 *  VirtuaWin - Virtual Desktop Manager (virtuawin.sourceforge.net)
 | 
				
			||||||
 | 
					 *  ConfigParameters.h - Dfinition of all module messages
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 *  Copyright (c) 1999-2005 Johan Piculell
 | 
				
			||||||
 | 
					 *  Copyright (c) 2006-2010 VirtuaWin (VirtuaWin@home.se)
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 *  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.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 *************************************************************************
 | 
				
			||||||
 | 
					 * This is a definition of all possible messages to send to VirtuaWin 
 | 
				
			||||||
 | 
					 * and the messages that VirtuaWin uses for module communication
 | 
				
			||||||
 | 
					 *
 | 
				
			||||||
 | 
					 * All messages starting with VW_ is for controlling VirtuaWin 
 | 
				
			||||||
 | 
					 * and messages starting with MOD_ is messages sent by VirtuaWin 
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * For example if you want to step one desktop to the left:
 | 
				
			||||||
 | 
					 * PostMessage(VirtuaWin HWND, VW_CHANGEDESK, VW_STEPLEFT, 0);
 | 
				
			||||||
 | 
					 * For messages where you expect a return value, use the SendMessage
 | 
				
			||||||
 | 
					 * function instead, see some win32 documentation for more info.
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 * Note: the message numbers is not all in sequence!
 | 
				
			||||||
 | 
					 * 
 | 
				
			||||||
 | 
					 *************************************************************************/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Message, switch to a specified desktop, sent with following wParam or 1..vwDESKTOP_MAX */
 | 
				
			||||||
 | 
					#define VW_CHANGEDESK   (WM_USER + 10) 
 | 
				
			||||||
 | 
					#define VW_STEPPREV     (WM_USER +  1)
 | 
				
			||||||
 | 
					#define VW_STEPNEXT     (WM_USER +  2)
 | 
				
			||||||
 | 
					#define VW_STEPLEFT     (WM_USER + 11)
 | 
				
			||||||
 | 
					#define VW_STEPRIGHT    (WM_USER + 12)
 | 
				
			||||||
 | 
					#define VW_STEPUP       (WM_USER + 13)
 | 
				
			||||||
 | 
					#define VW_STEPDOWN     (WM_USER + 14)
 | 
				
			||||||
 | 
					/* Message, close VirtuaWin */
 | 
				
			||||||
 | 
					#define VW_CLOSE        (WM_USER + 15) 
 | 
				
			||||||
 | 
					/* Message, display setup dialog */
 | 
				
			||||||
 | 
					#define VW_SETUP        (WM_USER + 16) 
 | 
				
			||||||
 | 
					/* Message, remove the systray icon */
 | 
				
			||||||
 | 
					#define VW_DELICON      (WM_USER + 17) 
 | 
				
			||||||
 | 
					/* Message, displays the systray icon */
 | 
				
			||||||
 | 
					#define VW_SHOWICON     (WM_USER + 18) 
 | 
				
			||||||
 | 
					/* Message, bring up the help */ 
 | 
				
			||||||
 | 
					#define VW_HELP         (WM_USER + 19) 
 | 
				
			||||||
 | 
					/* Message, gather all windows */
 | 
				
			||||||
 | 
					#define VW_GATHER       (WM_USER + 20) 
 | 
				
			||||||
 | 
					/* Message, retuns desktop width */
 | 
				
			||||||
 | 
					#define VW_DESKX        (WM_USER + 21)
 | 
				
			||||||
 | 
					/* Message, retuns desktop height */
 | 
				
			||||||
 | 
					#define VW_DESKY        (WM_USER + 22)
 | 
				
			||||||
 | 
					/* Message, request the window list from VirtuaWin - RETIRED.
 | 
				
			||||||
 | 
					 * This message was too dependent on the Window data structure, creating modules which
 | 
				
			||||||
 | 
					 * are very version dependent. As to v4.0 support for this message has been removed,
 | 
				
			||||||
 | 
					 * Module writers are encouraged to use the VW_WINGETINFO message instead see SF bug
 | 
				
			||||||
 | 
					 * 1915723 for more information */
 | 
				
			||||||
 | 
					#define VW_WINLIST      (WM_USER + 23)
 | 
				
			||||||
 | 
					/* Message, returns the current desktop number */
 | 
				
			||||||
 | 
					#define VW_CURDESK      (WM_USER + 24)
 | 
				
			||||||
 | 
					/* Message, assign a window to the specified desktop wParam is the window
 | 
				
			||||||
 | 
					 * handle (HWND, 0 for foreground window) and lParam is either VW_STEP* (see
 | 
				
			||||||
 | 
					 * 6 defines above) or the desktop number. If desk is -ve window is assigned
 | 
				
			||||||
 | 
					 * to desk (-lParam) and VW changes to the desk. Returns 0 if window was not
 | 
				
			||||||
 | 
					 * found (i.e. not managed by VW), non-zero otherwise */
 | 
				
			||||||
 | 
					#define VW_ASSIGNWIN    (WM_USER + 25)
 | 
				
			||||||
 | 
					/* Message, set the sticky state of a window. wParam is the window handle
 | 
				
			||||||
 | 
					 * (HWND, 0 for foreground window) and lParam should be -1 for toggle, 0 for
 | 
				
			||||||
 | 
					 * unset and 1 for set sticky state. */
 | 
				
			||||||
 | 
					#define VW_SETSTICKY    (WM_USER + 26)
 | 
				
			||||||
 | 
					/* Message, make a window the foreground, only if visible 
 | 
				
			||||||
 | 
					   wParam is the window handle (HWND) */
 | 
				
			||||||
 | 
					#define VW_FOREGDWIN    (WM_USER + 27)
 | 
				
			||||||
 | 
					/* Message, return VirtuaWin's installation path. The path will be returned via a WM_COPYDATA
 | 
				
			||||||
 | 
					 * message, set wParam to the HWND which is to receive the WM_COPYDATA message */
 | 
				
			||||||
 | 
					#define VW_INSTALLPATH  (WM_USER + 28)
 | 
				
			||||||
 | 
					/* Message, return VirtuaWin's user application data path. The path will be returned via a 
 | 
				
			||||||
 | 
					 * WM_COPYDATA message, set wParam to the HWND which is to receive the WM_COPYDATA message */
 | 
				
			||||||
 | 
					#define VW_USERAPPPATH  (WM_USER + 29)
 | 
				
			||||||
 | 
					/* Message, access a window, wParam is the window handle (HWND) and lParam is the method:
 | 
				
			||||||
 | 
					            0 - Use user's 'On hidden window activation' preference (ignore -> move)
 | 
				
			||||||
 | 
					            1 - Move window to this desk
 | 
				
			||||||
 | 
					            2 - Show window to this disk
 | 
				
			||||||
 | 
					            3 - Change to window's desk
 | 
				
			||||||
 | 
					           -1 - Use window's 'On hidden window activation' setting (if set to ignore nothing will happen)
 | 
				
			||||||
 | 
					   Returns 0 if window was not found (i.e. not managed by VW), non-zero otherwise */
 | 
				
			||||||
 | 
					#define VW_ACCESSWIN    (WM_USER + 39)
 | 
				
			||||||
 | 
					/* Message, return the information VW has on the window given via wParam. 0 is returned if the
 | 
				
			||||||
 | 
					 * window is not found, otherwise use the 2 macros to extract the window flags (see vwWINFLAGS_*
 | 
				
			||||||
 | 
					 * defines in Defines.h, the hide method flags are not given) and the windows desk. To check
 | 
				
			||||||
 | 
					 * if a window is hung do:
 | 
				
			||||||
 | 
					 *    if(((vwGetWindowInfoFlags(ii) & vwWINFLAGS_SHOWN) == 0) ^ ((vwGetWindowInfoFlags(ii) & vwWINFLAGS_SHOW) == 0))
 | 
				
			||||||
 | 
					 */ 
 | 
				
			||||||
 | 
					#define VW_WINGETINFO   (WM_USER + 40)
 | 
				
			||||||
 | 
					#define vwWindowGetInfoFlags(ii)  ((ii) & 0x00ffffff)
 | 
				
			||||||
 | 
					#define vwWindowGetInfoDesk(ii)   (((ii) >> 24) & 0x00ff)
 | 
				
			||||||
 | 
					/* Message, Desk image generation message, the action of the message depends on the
 | 
				
			||||||
 | 
					 * value of wParam:
 | 
				
			||||||
 | 
					 *   0 - Returns the current status of image generation
 | 
				
			||||||
 | 
					 *   1 - Enables image generation, lParam specifies the required image height
 | 
				
			||||||
 | 
					 *       (aspect ratio is maintained). Returns 1 if generation is enabled.
 | 
				
			||||||
 | 
					 *   2 - Disables image generation. Note: as multiple modules may enable image
 | 
				
			||||||
 | 
					 *       generation an 'enable' counter is kept, each 'enable' message increments
 | 
				
			||||||
 | 
					 *       and each disable decrements this counter. Image generation only stops 
 | 
				
			||||||
 | 
					 *       when the counter returns to zero. Returns 1 if counter was decremented,
 | 
				
			||||||
 | 
					 *       0 if counter is already 0.
 | 
				
			||||||
 | 
					 *   3 - Updates the current desk's image if image generation is enabled, returns
 | 
				
			||||||
 | 
					 *       1 if successfully updated, 0 otherwise.
 | 
				
			||||||
 | 
					 *   4 - Returns the desk image height if enabled, 0 otherwise 
 | 
				
			||||||
 | 
					 *   5 - Returns the desk image width if enabled, 0 otherwise */ 
 | 
				
			||||||
 | 
					#define VW_DESKIMAGE    (WM_USER + 41)
 | 
				
			||||||
 | 
					/* Message, set the main VirtuaWin enable/disable state. If wParam is 0
 | 
				
			||||||
 | 
					   the current state is not changed, 1 for toggle, 2 for disable
 | 
				
			||||||
 | 
					   and 3 for enable. Returns the previous state, 1 for enable & 0 for disabled. */
 | 
				
			||||||
 | 
					#define VW_ENABLE_STATE (WM_USER + 42)
 | 
				
			||||||
 | 
					/* Message, return the name of the desk specified by the lParam, if lParam is set
 | 
				
			||||||
 | 
					 * to 0 the current desktop name is returned. The name will be returned via a WM_COPYDATA
 | 
				
			||||||
 | 
					 * message, set wParam to the HWND which is to receive the WM_COPYDATA message */
 | 
				
			||||||
 | 
					#define VW_DESKNAME     (WM_USER + 43)
 | 
				
			||||||
 | 
					/* Message, returns the value of vwDESKTOP_SIZE in Defines.h, this can be used to
 | 
				
			||||||
 | 
					 * quickly obtain the maximum size of any desk based array, i.e. guaranteed to be greater
 | 
				
			||||||
 | 
					 * than the current desktop. Note the this is not true of (DESKX * DESKY) due to hidden desktops. */
 | 
				
			||||||
 | 
					#define VW_DESKTOP_SIZE (WM_USER + 44)
 | 
				
			||||||
 | 
					/* Message, set whether a window is managed by VW. wParam is the window handle
 | 
				
			||||||
 | 
					 * (HWND, 0 for foreground window) and lParam should be 0 for not managed  and 1 for managed. */
 | 
				
			||||||
 | 
					#define VW_WINMANAGE    (WM_USER + 45)
 | 
				
			||||||
 | 
					/* Message, executes a hotkey command as if the user pressed the hotkey, where wParam is the
 | 
				
			||||||
 | 
					 * command id (see second column in vwCommands.def), LOWORD(lParam) is the desk (if required) and
 | 
				
			||||||
 | 
					 * HIWORD(lParam) is the modifier, only bit vwHOTKEY_WIN_MOUSE is used (and only set if really
 | 
				
			||||||
 | 
					 * needed as the command will fail if there is no window under the mouse). The return is dependent
 | 
				
			||||||
 | 
					 * on the command being executed. */
 | 
				
			||||||
 | 
					#define VW_HOTKEY       (WM_USER + 46)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Message & WM_COPYDATA ID, inserts or removes items from the control menu. */
 | 
				
			||||||
 | 
					#define VW_CMENUITEM    (WM_USER + 47)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Message, sent by VirtuaWin after a switch. lParam will contain current desktop number 
 | 
				
			||||||
 | 
					   if wParam isn't one of the following, then wParam will also contain current desktop.
 | 
				
			||||||
 | 
					   If desktop cycling is enabled, there will be two MOD_CHANGEDESK sent when going 
 | 
				
			||||||
 | 
					   "over the edge". The first one will have a MOD_STEP* parameter, and the second
 | 
				
			||||||
 | 
					   will have current desktop in both parameters.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					#define MOD_CHANGEDESK  (WM_USER + 30) 
 | 
				
			||||||
 | 
					#define MOD_STEPLEFT    (WM_USER + 31)
 | 
				
			||||||
 | 
					#define MOD_STEPRIGHT   (WM_USER + 32)
 | 
				
			||||||
 | 
					#define MOD_STEPUP      (WM_USER + 33)
 | 
				
			||||||
 | 
					#define MOD_STEPDOWN    (WM_USER + 34)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/* Message, sent just after the module is started. wParam will contain VirtuaWin hWnd */ 
 | 
				
			||||||
 | 
					#define MOD_INIT        (WM_USER + 35)
 | 
				
			||||||
 | 
					/* Message, sent when VirtuaWin quits or reloads its modules */
 | 
				
			||||||
 | 
					#define MOD_QUIT        (WM_USER + 36)
 | 
				
			||||||
 | 
					/* Message, sent by VirtuaWin when setup button is pressed in "module tab",
 | 
				
			||||||
 | 
					 * wParam set to the HWND of the 'parent' window or 0 */
 | 
				
			||||||
 | 
					#define MOD_SETUP       (WM_USER + 37)
 | 
				
			||||||
 | 
					/* Message, sent by VirtuaWin when the configuration has been updated */
 | 
				
			||||||
 | 
					#define MOD_CFGCHANGE   (WM_USER + 38)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#endif
 | 
				
			||||||
							
								
								
									
										162
									
								
								Plugins/PluginVirtualDesktops/VirtualDesktops.cpp
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										162
									
								
								Plugins/PluginVirtualDesktops/VirtualDesktops.cpp
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,162 @@
 | 
				
			|||||||
 | 
					/*
 | 
				
			||||||
 | 
					  Copyright (C) 2010 Patrick Dubbert
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  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.
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/*
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  VirtualDesktops Plugin
 | 
				
			||||||
 | 
					  ----------------------
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  This plugin aims to give Rainmeter skins access to various virtual desktop
 | 
				
			||||||
 | 
					  managers through a common interface. The following VDMs are supported:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * Dexpot
 | 
				
			||||||
 | 
					    * VirtuaWin
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  To add support for another virtual desktop manager,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    1) implement a new class derived from VDMeasure
 | 
				
			||||||
 | 
					    2) include its header file below
 | 
				
			||||||
 | 
					    3) add a new case for the "VDManager" config string in the Initialize
 | 
				
			||||||
 | 
					       funtion below
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  Different types of measures are identified using the "VDMeasureType" config
 | 
				
			||||||
 | 
					  string, i.e.
 | 
				
			||||||
 | 
					   
 | 
				
			||||||
 | 
					    [VirtualDesktopsMeasure]
 | 
				
			||||||
 | 
					    Measure=Plugin
 | 
				
			||||||
 | 
					    Plugin=VirtualDesktops.dll
 | 
				
			||||||
 | 
					    VDManager=SomeVDM
 | 
				
			||||||
 | 
					    VDMeasureType=...
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  The following basic measure types have to be implemented:
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * VDMActive: returns 1 when the VDM is running, 0 otherwise
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * DesktopCount: returns the number of virtual desktops available; when
 | 
				
			||||||
 | 
					                    "VDDesktopCount=X" or "VDDesktopCount=Y" is given, returns
 | 
				
			||||||
 | 
					                    the number of columns or rows, respectively, in a grid of
 | 
				
			||||||
 | 
					                    desktops
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * CurrentDesktop: returns the number of the currently active desktop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    * SwitchDesktop: when sent a desktop number as a bang, switches to the
 | 
				
			||||||
 | 
					                     corresponding desktop
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  You're welcome to add any other measure types that suit the feature set of
 | 
				
			||||||
 | 
					  the virtual desktop manager in question. Examples can be found in the
 | 
				
			||||||
 | 
					  existing implementations.
 | 
				
			||||||
 | 
					  
 | 
				
			||||||
 | 
					*/
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "DexpotMeasure.h"
 | 
				
			||||||
 | 
					#include "VirtuaWinMeasure.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include <windows.h>
 | 
				
			||||||
 | 
					#include <tchar.h>
 | 
				
			||||||
 | 
					#include <map>
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#include "../../Library/Export.h"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					extern "C"
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						__declspec(dllexport) UINT Initialize(HMODULE instance, LPCTSTR iniFile, LPCTSTR section, UINT id);
 | 
				
			||||||
 | 
						__declspec(dllexport) void Finalize(HMODULE instance, UINT id);
 | 
				
			||||||
 | 
						__declspec(dllexport) UINT Update(UINT id);
 | 
				
			||||||
 | 
						__declspec(dllexport) LPCTSTR GetString(UINT id, UINT flags);
 | 
				
			||||||
 | 
						__declspec(dllexport) void ExecuteBang(LPCTSTR args, UINT id);
 | 
				
			||||||
 | 
						__declspec(dllexport) UINT GetPluginVersion();
 | 
				
			||||||
 | 
						__declspec(dllexport) LPCTSTR GetPluginAuthor();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					std::map<UINT, VDMeasure*> Measures;
 | 
				
			||||||
 | 
					HMODULE VDMeasure::hInstance;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UINT Initialize(HMODULE instance, LPCTSTR iniFile, LPCTSTR section, UINT id)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						VDMeasure *Measure = NULL;
 | 
				
			||||||
 | 
						LPCTSTR VDManager = ReadConfigString(section, _T("VDManager"), _T(""));
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						if(_tcsicmp(VDManager, _T("Dexpot")) == 0)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Measure = DexpotMeasure::CreateMeasure(instance, id, iniFile, section);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if(_tcsicmp(VDManager, _T("VirtuaWin")) == 0)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Measure = new VirtuaWinMeasure(instance, id);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(Measure)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							Measures.insert(std::make_pair(id, Measure));
 | 
				
			||||||
 | 
							return Measure->Initialize(iniFile, section);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UINT Update(UINT id)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						std::map<UINT, VDMeasure*>::iterator i = Measures.find(id);
 | 
				
			||||||
 | 
						if(i != Measures.end())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return i->second->Update();
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return 0;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LPCTSTR GetString(UINT id, UINT flags)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						std::map<UINT, VDMeasure*>::iterator i = Measures.find(id);
 | 
				
			||||||
 | 
						if(i != Measures.end())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							return i->second->GetString(flags);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return _T("");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void ExecuteBang(LPCTSTR args, UINT id)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						std::map<UINT, VDMeasure*>::iterator i = Measures.find(id);
 | 
				
			||||||
 | 
						if(i != Measures.end())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							i->second->ExecuteBang(args);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void Finalize(HMODULE instance, UINT id)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						std::map<UINT, VDMeasure*>::iterator i = Measures.find(id);
 | 
				
			||||||
 | 
						if(i != Measures.end())
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							i->second->Finalize();
 | 
				
			||||||
 | 
							delete i->second;
 | 
				
			||||||
 | 
							Measures.erase(i);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					UINT GetPluginVersion()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return 1000;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					LPCTSTR GetPluginAuthor()
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return _T("Dexpot GbR (info@dexpot.de)");
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
@@ -92,6 +92,11 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PluginWin7Audio", "Plugins\
 | 
				
			|||||||
		{BE9D2400-7F1C-49D6-8498-5CE495491AD6} = {BE9D2400-7F1C-49D6-8498-5CE495491AD6}
 | 
							{BE9D2400-7F1C-49D6-8498-5CE495491AD6} = {BE9D2400-7F1C-49D6-8498-5CE495491AD6}
 | 
				
			||||||
	EndProjectSection
 | 
						EndProjectSection
 | 
				
			||||||
EndProject
 | 
					EndProject
 | 
				
			||||||
 | 
					Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "PluginVirtualDesktops", "Plugins\PluginVirtualDesktops\PluginVirtualDesktops.vcproj", "{4640AB3A-5A8B-2DA0-980C-A70BCAB3A7F1}"
 | 
				
			||||||
 | 
						ProjectSection(ProjectDependencies) = postProject
 | 
				
			||||||
 | 
							{BE9D2400-7F1C-49D6-8498-5CE495491AD6} = {BE9D2400-7F1C-49D6-8498-5CE495491AD6}
 | 
				
			||||||
 | 
						EndProjectSection
 | 
				
			||||||
 | 
					EndProject
 | 
				
			||||||
Global
 | 
					Global
 | 
				
			||||||
	GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
						GlobalSection(SolutionConfigurationPlatforms) = preSolution
 | 
				
			||||||
		Debug|Win32 = Debug|Win32
 | 
							Debug|Win32 = Debug|Win32
 | 
				
			||||||
@@ -296,6 +301,18 @@ Global
 | 
				
			|||||||
		{6D032D6B-7656-4743-B454-3388E2921EB0}.Release64|Win32.Build.0 = Release64|Win32
 | 
							{6D032D6B-7656-4743-B454-3388E2921EB0}.Release64|Win32.Build.0 = Release64|Win32
 | 
				
			||||||
		{6D032D6B-7656-4743-B454-3388E2921EB0}.Release64|x64.ActiveCfg = Release64|x64
 | 
							{6D032D6B-7656-4743-B454-3388E2921EB0}.Release64|x64.ActiveCfg = Release64|x64
 | 
				
			||||||
		{6D032D6B-7656-4743-B454-3388E2921EB0}.Release64|x64.Build.0 = Release64|x64
 | 
							{6D032D6B-7656-4743-B454-3388E2921EB0}.Release64|x64.Build.0 = Release64|x64
 | 
				
			||||||
 | 
							{4640AB3A-5A8B-2DA0-980C-A70BCAB3A7F1}.Debug|Win32.ActiveCfg = Debug|Win32
 | 
				
			||||||
 | 
							{4640AB3A-5A8B-2DA0-980C-A70BCAB3A7F1}.Debug|Win32.Build.0 = Debug|Win32
 | 
				
			||||||
 | 
							{4640AB3A-5A8B-2DA0-980C-A70BCAB3A7F1}.Debug|x64.ActiveCfg = Debug|x64
 | 
				
			||||||
 | 
							{4640AB3A-5A8B-2DA0-980C-A70BCAB3A7F1}.Debug|x64.Build.0 = Debug|x64
 | 
				
			||||||
 | 
							{4640AB3A-5A8B-2DA0-980C-A70BCAB3A7F1}.Release|Win32.ActiveCfg = Release|Win32
 | 
				
			||||||
 | 
							{4640AB3A-5A8B-2DA0-980C-A70BCAB3A7F1}.Release|Win32.Build.0 = Release|Win32
 | 
				
			||||||
 | 
							{4640AB3A-5A8B-2DA0-980C-A70BCAB3A7F1}.Release|x64.ActiveCfg = Release|x64
 | 
				
			||||||
 | 
							{4640AB3A-5A8B-2DA0-980C-A70BCAB3A7F1}.Release|x64.Build.0 = Release|x64
 | 
				
			||||||
 | 
							{4640AB3A-5A8B-2DA0-980C-A70BCAB3A7F1}.Release64|Win32.ActiveCfg = Release64|Win32
 | 
				
			||||||
 | 
							{4640AB3A-5A8B-2DA0-980C-A70BCAB3A7F1}.Release64|Win32.Build.0 = Release64|Win32
 | 
				
			||||||
 | 
							{4640AB3A-5A8B-2DA0-980C-A70BCAB3A7F1}.Release64|x64.ActiveCfg = Release64|x64
 | 
				
			||||||
 | 
							{4640AB3A-5A8B-2DA0-980C-A70BCAB3A7F1}.Release64|x64.Build.0 = Release64|x64
 | 
				
			||||||
	EndGlobalSection
 | 
						EndGlobalSection
 | 
				
			||||||
	GlobalSection(SolutionProperties) = preSolution
 | 
						GlobalSection(SolutionProperties) = preSolution
 | 
				
			||||||
		HideSolutionNode = FALSE
 | 
							HideSolutionNode = FALSE
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -1,2 +1,2 @@
 | 
				
			|||||||
#pragma once
 | 
					#pragma once
 | 
				
			||||||
const int revision_number = 451;
 | 
					const int revision_number = 454;
 | 
				
			||||||
		Reference in New Issue
	
	Block a user