mirror of
				https://github.com/Mibew/java.git
				synced 2025-10-31 18:41:09 +03:00 
			
		
		
		
	update about -> 1.0.3, add useractivity class
git-svn-id: https://webim.svn.sourceforge.net/svnroot/webim/trunk@47 c66351dc-e62f-0410-b875-e3a5c0b9693f
This commit is contained in:
		
							parent
							
								
									52749fc846
								
							
						
					
					
						commit
						24f73e4f7d
					
				
							
								
								
									
										785
									
								
								src/webimtray/WebIMTray/UserActivityHook.cs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										785
									
								
								src/webimtray/WebIMTray/UserActivityHook.cs
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,785 @@ | ||||
| using System; | ||||
| using System.Runtime.InteropServices; | ||||
| using System.Reflection; | ||||
| using System.Threading; | ||||
| using System.Windows.Forms; | ||||
| using System.ComponentModel; | ||||
| 
 | ||||
| namespace gma.System.Windows | ||||
| { | ||||
|     /// <summary> | ||||
|     /// see: http://www.codeproject.com/KB/cs/globalhook.aspx | ||||
|     /// This class allows you to tap keyboard and mouse and / or to detect their activity even when an  | ||||
|     /// application runes in background or does not have any user interface at all. This class raises  | ||||
|     /// common .NET events with KeyEventArgs and MouseEventArgs so you can easily retrive any information you need. | ||||
|     /// </summary> | ||||
|     public class UserActivityHook | ||||
|     { | ||||
|         #region Windows structure definitions | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// The POINT structure defines the x- and y- coordinates of a point.  | ||||
|         /// </summary> | ||||
|         /// <remarks> | ||||
|         /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/gdi/rectangl_0tiq.asp | ||||
|         /// </remarks> | ||||
|         [StructLayout(LayoutKind.Sequential)] | ||||
|         private class POINT | ||||
|         { | ||||
|             /// <summary> | ||||
|             /// Specifies the x-coordinate of the point.  | ||||
|             /// </summary> | ||||
|             public int x; | ||||
|             /// <summary> | ||||
|             /// Specifies the y-coordinate of the point.  | ||||
|             /// </summary> | ||||
|             public int y; | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// The MOUSEHOOKSTRUCT structure contains information about a mouse event passed to a WH_MOUSE hook procedure, MouseProc.  | ||||
|         /// </summary> | ||||
|         /// <remarks> | ||||
|         /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookstructures/cwpstruct.asp | ||||
|         /// </remarks> | ||||
|         [StructLayout(LayoutKind.Sequential)] | ||||
|         private class MouseHookStruct | ||||
|         { | ||||
|             /// <summary> | ||||
|             /// Specifies a POINT structure that contains the x- and y-coordinates of the cursor, in screen coordinates.  | ||||
|             /// </summary> | ||||
|             public POINT pt; | ||||
|             /// <summary> | ||||
|             /// Handle to the window that will receive the mouse message corresponding to the mouse event.  | ||||
|             /// </summary> | ||||
|             public int hwnd; | ||||
|             /// <summary> | ||||
|             /// Specifies the hit-test value. For a list of hit-test values, see the description of the WM_NCHITTEST message.  | ||||
|             /// </summary> | ||||
|             public int wHitTestCode; | ||||
|             /// <summary> | ||||
|             /// Specifies extra information associated with the message.  | ||||
|             /// </summary> | ||||
|             public int dwExtraInfo; | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// The MSLLHOOKSTRUCT structure contains information about a low-level keyboard input event.  | ||||
|         /// </summary> | ||||
|         [StructLayout(LayoutKind.Sequential)] | ||||
|         private class MouseLLHookStruct | ||||
|         { | ||||
|             /// <summary> | ||||
|             /// Specifies a POINT structure that contains the x- and y-coordinates of the cursor, in screen coordinates.  | ||||
|             /// </summary> | ||||
|             public POINT pt; | ||||
|             /// <summary> | ||||
|             /// If the message is WM_MOUSEWHEEL, the high-order word of this member is the wheel delta.  | ||||
|             /// The low-order word is reserved. A positive value indicates that the wheel was rotated forward,  | ||||
|             /// away from the user; a negative value indicates that the wheel was rotated backward, toward the user.  | ||||
|             /// One wheel click is defined as WHEEL_DELTA, which is 120.  | ||||
|             ///If the message is WM_XBUTTONDOWN, WM_XBUTTONUP, WM_XBUTTONDBLCLK, WM_NCXBUTTONDOWN, WM_NCXBUTTONUP, | ||||
|             /// or WM_NCXBUTTONDBLCLK, the high-order word specifies which X button was pressed or released,  | ||||
|             /// and the low-order word is reserved. This value can be one or more of the following values. Otherwise, mouseData is not used.  | ||||
|             ///XBUTTON1 | ||||
|             ///The first X button was pressed or released. | ||||
|             ///XBUTTON2 | ||||
|             ///The second X button was pressed or released. | ||||
|             /// </summary> | ||||
|             public int mouseData; | ||||
|             /// <summary> | ||||
|             /// Specifies the event-injected flag. An application can use the following value to test the mouse flags. Value Purpose  | ||||
|             ///LLMHF_INJECTED Test the event-injected flag.   | ||||
|             ///0 | ||||
|             ///Specifies whether the event was injected. The value is 1 if the event was injected; otherwise, it is 0. | ||||
|             ///1-15 | ||||
|             ///Reserved. | ||||
|             /// </summary> | ||||
|             public int flags; | ||||
|             /// <summary> | ||||
|             /// Specifies the time stamp for this message. | ||||
|             /// </summary> | ||||
|             public int time; | ||||
|             /// <summary> | ||||
|             /// Specifies extra information associated with the message.  | ||||
|             /// </summary> | ||||
|             public int dwExtraInfo; | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// The KBDLLHOOKSTRUCT structure contains information about a low-level keyboard input event.  | ||||
|         /// </summary> | ||||
|         /// <remarks> | ||||
|         /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookstructures/cwpstruct.asp | ||||
|         /// </remarks> | ||||
|         [StructLayout(LayoutKind.Sequential)] | ||||
|         private class KeyboardHookStruct | ||||
|         { | ||||
|             /// <summary> | ||||
|             /// Specifies a virtual-key code. The code must be a value in the range 1 to 254.  | ||||
|             /// </summary> | ||||
|             public int vkCode; | ||||
|             /// <summary> | ||||
|             /// Specifies a hardware scan code for the key.  | ||||
|             /// </summary> | ||||
|             public int scanCode; | ||||
|             /// <summary> | ||||
|             /// Specifies the extended-key flag, event-injected flag, context code, and transition-state flag. | ||||
|             /// </summary> | ||||
|             public int flags; | ||||
|             /// <summary> | ||||
|             /// Specifies the time stamp for this message. | ||||
|             /// </summary> | ||||
|             public int time; | ||||
|             /// <summary> | ||||
|             /// Specifies extra information associated with the message.  | ||||
|             /// </summary> | ||||
|             public int dwExtraInfo; | ||||
|         } | ||||
|         #endregion | ||||
| 
 | ||||
|         #region Windows function imports | ||||
|         /// <summary> | ||||
|         /// The SetWindowsHookEx function installs an application-defined hook procedure into a hook chain.  | ||||
|         /// You would install a hook procedure to monitor the system for certain types of events. These events  | ||||
|         /// are associated either with a specific thread or with all threads in the same desktop as the calling thread.  | ||||
|         /// </summary> | ||||
|         /// <param name="idHook"> | ||||
|         /// [in] Specifies the type of hook procedure to be installed. This parameter can be one of the following values. | ||||
|         /// </param> | ||||
|         /// <param name="lpfn"> | ||||
|         /// [in] Pointer to the hook procedure. If the dwThreadId parameter is zero or specifies the identifier of a  | ||||
|         /// thread created by a different process, the lpfn parameter must point to a hook procedure in a dynamic-link  | ||||
|         /// library (DLL). Otherwise, lpfn can point to a hook procedure in the code associated with the current process. | ||||
|         /// </param> | ||||
|         /// <param name="hMod"> | ||||
|         /// [in] Handle to the DLL containing the hook procedure pointed to by the lpfn parameter.  | ||||
|         /// The hMod parameter must be set to NULL if the dwThreadId parameter specifies a thread created by  | ||||
|         /// the current process and if the hook procedure is within the code associated with the current process.  | ||||
|         /// </param> | ||||
|         /// <param name="dwThreadId"> | ||||
|         /// [in] Specifies the identifier of the thread with which the hook procedure is to be associated.  | ||||
|         /// If this parameter is zero, the hook procedure is associated with all existing threads running in the  | ||||
|         /// same desktop as the calling thread.  | ||||
|         /// </param> | ||||
|         /// <returns> | ||||
|         /// If the function succeeds, the return value is the handle to the hook procedure. | ||||
|         /// If the function fails, the return value is NULL. To get extended error information, call GetLastError. | ||||
|         /// </returns> | ||||
|         /// <remarks> | ||||
|         /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/setwindowshookex.asp | ||||
|         /// </remarks> | ||||
|         [DllImport("user32.dll", CharSet = CharSet.Auto, | ||||
|            CallingConvention = CallingConvention.StdCall, SetLastError = true)] | ||||
|         private static extern int SetWindowsHookEx( | ||||
|             int idHook, | ||||
|             HookProc lpfn, | ||||
|             IntPtr hMod, | ||||
|             int dwThreadId); | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// The UnhookWindowsHookEx function removes a hook procedure installed in a hook chain by the SetWindowsHookEx function.  | ||||
|         /// </summary> | ||||
|         /// <param name="idHook"> | ||||
|         /// [in] Handle to the hook to be removed. This parameter is a hook handle obtained by a previous call to SetWindowsHookEx.  | ||||
|         /// </param> | ||||
|         /// <returns> | ||||
|         /// If the function succeeds, the return value is nonzero. | ||||
|         /// If the function fails, the return value is zero. To get extended error information, call GetLastError. | ||||
|         /// </returns> | ||||
|         /// <remarks> | ||||
|         /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/setwindowshookex.asp | ||||
|         /// </remarks> | ||||
|         [DllImport("user32.dll", CharSet = CharSet.Auto, | ||||
|             CallingConvention = CallingConvention.StdCall, SetLastError = true)] | ||||
|         private static extern int UnhookWindowsHookEx(int idHook); | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// The CallNextHookEx function passes the hook information to the next hook procedure in the current hook chain.  | ||||
|         /// A hook procedure can call this function either before or after processing the hook information.  | ||||
|         /// </summary> | ||||
|         /// <param name="idHook">Ignored.</param> | ||||
|         /// <param name="nCode"> | ||||
|         /// [in] Specifies the hook code passed to the current hook procedure.  | ||||
|         /// The next hook procedure uses this code to determine how to process the hook information. | ||||
|         /// </param> | ||||
|         /// <param name="wParam"> | ||||
|         /// [in] Specifies the wParam value passed to the current hook procedure.  | ||||
|         /// The meaning of this parameter depends on the type of hook associated with the current hook chain.  | ||||
|         /// </param> | ||||
|         /// <param name="lParam"> | ||||
|         /// [in] Specifies the lParam value passed to the current hook procedure.  | ||||
|         /// The meaning of this parameter depends on the type of hook associated with the current hook chain.  | ||||
|         /// </param> | ||||
|         /// <returns> | ||||
|         /// This value is returned by the next hook procedure in the chain.  | ||||
|         /// The current hook procedure must also return this value. The meaning of the return value depends on the hook type.  | ||||
|         /// For more information, see the descriptions of the individual hook procedures. | ||||
|         /// </returns> | ||||
|         /// <remarks> | ||||
|         /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/setwindowshookex.asp | ||||
|         /// </remarks> | ||||
|         [DllImport("user32.dll", CharSet = CharSet.Auto, | ||||
|              CallingConvention = CallingConvention.StdCall)] | ||||
|         private static extern int CallNextHookEx( | ||||
|             int idHook, | ||||
|             int nCode, | ||||
|             int wParam, | ||||
|             IntPtr lParam); | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// The CallWndProc hook procedure is an application-defined or library-defined callback  | ||||
|         /// function used with the SetWindowsHookEx function. The HOOKPROC type defines a pointer  | ||||
|         /// to this callback function. CallWndProc is a placeholder for the application-defined  | ||||
|         /// or library-defined function name. | ||||
|         /// </summary> | ||||
|         /// <param name="nCode"> | ||||
|         /// [in] Specifies whether the hook procedure must process the message.  | ||||
|         /// If nCode is HC_ACTION, the hook procedure must process the message.  | ||||
|         /// If nCode is less than zero, the hook procedure must pass the message to the  | ||||
|         /// CallNextHookEx function without further processing and must return the  | ||||
|         /// value returned by CallNextHookEx. | ||||
|         /// </param> | ||||
|         /// <param name="wParam"> | ||||
|         /// [in] Specifies whether the message was sent by the current thread.  | ||||
|         /// If the message was sent by the current thread, it is nonzero; otherwise, it is zero.  | ||||
|         /// </param> | ||||
|         /// <param name="lParam"> | ||||
|         /// [in] Pointer to a CWPSTRUCT structure that contains details about the message.  | ||||
|         /// </param> | ||||
|         /// <returns> | ||||
|         /// If nCode is less than zero, the hook procedure must return the value returned by CallNextHookEx.  | ||||
|         /// If nCode is greater than or equal to zero, it is highly recommended that you call CallNextHookEx  | ||||
|         /// and return the value it returns; otherwise, other applications that have installed WH_CALLWNDPROC  | ||||
|         /// hooks will not receive hook notifications and may behave incorrectly as a result. If the hook  | ||||
|         /// procedure does not call CallNextHookEx, the return value should be zero.  | ||||
|         /// </returns> | ||||
|         /// <remarks> | ||||
|         /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/hooks/hookreference/hookfunctions/callwndproc.asp | ||||
|         /// </remarks> | ||||
|         private delegate int HookProc(int nCode, int wParam, IntPtr lParam); | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// The ToAscii function translates the specified virtual-key code and keyboard  | ||||
|         /// state to the corresponding character or characters. The function translates the code  | ||||
|         /// using the input language and physical keyboard layout identified by the keyboard layout handle. | ||||
|         /// </summary> | ||||
|         /// <param name="uVirtKey"> | ||||
|         /// [in] Specifies the virtual-key code to be translated.  | ||||
|         /// </param> | ||||
|         /// <param name="uScanCode"> | ||||
|         /// [in] Specifies the hardware scan code of the key to be translated.  | ||||
|         /// The high-order bit of this value is set if the key is up (not pressed).  | ||||
|         /// </param> | ||||
|         /// <param name="lpbKeyState"> | ||||
|         /// [in] Pointer to a 256-byte array that contains the current keyboard state.  | ||||
|         /// Each element (byte) in the array contains the state of one key.  | ||||
|         /// If the high-order bit of a byte is set, the key is down (pressed).  | ||||
|         /// The low bit, if set, indicates that the key is toggled on. In this function,  | ||||
|         /// only the toggle bit of the CAPS LOCK key is relevant. The toggle state  | ||||
|         /// of the NUM LOCK and SCROLL LOCK keys is ignored. | ||||
|         /// </param> | ||||
|         /// <param name="lpwTransKey"> | ||||
|         /// [out] Pointer to the buffer that receives the translated character or characters.  | ||||
|         /// </param> | ||||
|         /// <param name="fuState"> | ||||
|         /// [in] Specifies whether a menu is active. This parameter must be 1 if a menu is active, or 0 otherwise.  | ||||
|         /// </param> | ||||
|         /// <returns> | ||||
|         /// If the specified key is a dead key, the return value is negative. Otherwise, it is one of the following values.  | ||||
|         /// Value Meaning  | ||||
|         /// 0 The specified virtual key has no translation for the current state of the keyboard.  | ||||
|         /// 1 One character was copied to the buffer.  | ||||
|         /// 2 Two characters were copied to the buffer. This usually happens when a dead-key character  | ||||
|         /// (accent or diacritic) stored in the keyboard layout cannot be composed with the specified  | ||||
|         /// virtual key to form a single character.  | ||||
|         /// </returns> | ||||
|         /// <remarks> | ||||
|         /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputfunctions/toascii.asp | ||||
|         /// </remarks> | ||||
|         [DllImport("user32")] | ||||
|         private static extern int ToAscii( | ||||
|             int uVirtKey, | ||||
|             int uScanCode, | ||||
|             byte[] lpbKeyState, | ||||
|             byte[] lpwTransKey, | ||||
|             int fuState); | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// The GetKeyboardState function copies the status of the 256 virtual keys to the  | ||||
|         /// specified buffer.  | ||||
|         /// </summary> | ||||
|         /// <param name="pbKeyState"> | ||||
|         /// [in] Pointer to a 256-byte array that contains keyboard key states.  | ||||
|         /// </param> | ||||
|         /// <returns> | ||||
|         /// If the function succeeds, the return value is nonzero. | ||||
|         /// If the function fails, the return value is zero. To get extended error information, call GetLastError.  | ||||
|         /// </returns> | ||||
|         /// <remarks> | ||||
|         /// http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputfunctions/toascii.asp | ||||
|         /// </remarks> | ||||
|         [DllImport("user32")] | ||||
|         private static extern int GetKeyboardState(byte[] pbKeyState); | ||||
| 
 | ||||
|         [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)] | ||||
|         private static extern short GetKeyState(int vKey); | ||||
| 
 | ||||
|         #endregion | ||||
| 
 | ||||
|         #region Windows constants | ||||
| 
 | ||||
|         //values from Winuser.h in Microsoft SDK. | ||||
|         /// <summary> | ||||
|         /// Windows NT/2000/XP: Installs a hook procedure that monitors low-level mouse input events. | ||||
|         /// </summary> | ||||
|         private const int WH_MOUSE_LL       = 14; | ||||
|         /// <summary> | ||||
|         /// Windows NT/2000/XP: Installs a hook procedure that monitors low-level keyboard  input events. | ||||
|         /// </summary> | ||||
|         private const int WH_KEYBOARD_LL    = 13; | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Installs a hook procedure that monitors mouse messages. For more information, see the MouseProc hook procedure.  | ||||
|         /// </summary> | ||||
|         private const int WH_MOUSE          = 7; | ||||
|         /// <summary> | ||||
|         /// Installs a hook procedure that monitors keystroke messages. For more information, see the KeyboardProc hook procedure.  | ||||
|         /// </summary> | ||||
|         private const int WH_KEYBOARD       = 2; | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// The WM_MOUSEMOVE message is posted to a window when the cursor moves.  | ||||
|         /// </summary> | ||||
|         private const int WM_MOUSEMOVE      = 0x200; | ||||
|         /// <summary> | ||||
|         /// The WM_LBUTTONDOWN message is posted when the user presses the left mouse button  | ||||
|         /// </summary> | ||||
|         private const int WM_LBUTTONDOWN    = 0x201; | ||||
|         /// <summary> | ||||
|         /// The WM_RBUTTONDOWN message is posted when the user presses the right mouse button | ||||
|         /// </summary> | ||||
|         private const int WM_RBUTTONDOWN    = 0x204; | ||||
|         /// <summary> | ||||
|         /// The WM_MBUTTONDOWN message is posted when the user presses the middle mouse button  | ||||
|         /// </summary> | ||||
|         private const int WM_MBUTTONDOWN    = 0x207; | ||||
|         /// <summary> | ||||
|         /// The WM_LBUTTONUP message is posted when the user releases the left mouse button  | ||||
|         /// </summary> | ||||
|         private const int WM_LBUTTONUP      = 0x202; | ||||
|         /// <summary> | ||||
|         /// The WM_RBUTTONUP message is posted when the user releases the right mouse button  | ||||
|         /// </summary> | ||||
|         private const int WM_RBUTTONUP      = 0x205; | ||||
|         /// <summary> | ||||
|         /// The WM_MBUTTONUP message is posted when the user releases the middle mouse button  | ||||
|         /// </summary> | ||||
|         private const int WM_MBUTTONUP      = 0x208; | ||||
|         /// <summary> | ||||
|         /// The WM_LBUTTONDBLCLK message is posted when the user double-clicks the left mouse button  | ||||
|         /// </summary> | ||||
|         private const int WM_LBUTTONDBLCLK  = 0x203; | ||||
|         /// <summary> | ||||
|         /// The WM_RBUTTONDBLCLK message is posted when the user double-clicks the right mouse button  | ||||
|         /// </summary> | ||||
|         private const int WM_RBUTTONDBLCLK  = 0x206; | ||||
|         /// <summary> | ||||
|         /// The WM_RBUTTONDOWN message is posted when the user presses the right mouse button  | ||||
|         /// </summary> | ||||
|         private const int WM_MBUTTONDBLCLK  = 0x209; | ||||
|         /// <summary> | ||||
|         /// The WM_MOUSEWHEEL message is posted when the user presses the mouse wheel.  | ||||
|         /// </summary> | ||||
|         private const int WM_MOUSEWHEEL     = 0x020A; | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// The WM_KEYDOWN message is posted to the window with the keyboard focus when a nonsystem  | ||||
|         /// key is pressed. A nonsystem key is a key that is pressed when the ALT key is not pressed. | ||||
|         /// </summary> | ||||
|         private const int WM_KEYDOWN = 0x100; | ||||
|         /// <summary> | ||||
|         /// The WM_KEYUP message is posted to the window with the keyboard focus when a nonsystem  | ||||
|         /// key is released. A nonsystem key is a key that is pressed when the ALT key is not pressed,  | ||||
|         /// or a keyboard key that is pressed when a window has the keyboard focus. | ||||
|         /// </summary> | ||||
|         private const int WM_KEYUP = 0x101; | ||||
|         /// <summary> | ||||
|         /// The WM_SYSKEYDOWN message is posted to the window with the keyboard focus when the user  | ||||
|         /// presses the F10 key (which activates the menu bar) or holds down the ALT key and then  | ||||
|         /// presses another key. It also occurs when no window currently has the keyboard focus;  | ||||
|         /// in this case, the WM_SYSKEYDOWN message is sent to the active window. The window that  | ||||
|         /// receives the message can distinguish between these two contexts by checking the context  | ||||
|         /// code in the lParam parameter.  | ||||
|         /// </summary> | ||||
|         private const int WM_SYSKEYDOWN = 0x104; | ||||
|         /// <summary> | ||||
|         /// The WM_SYSKEYUP message is posted to the window with the keyboard focus when the user  | ||||
|         /// releases a key that was pressed while the ALT key was held down. It also occurs when no  | ||||
|         /// window currently has the keyboard focus; in this case, the WM_SYSKEYUP message is sent  | ||||
|         /// to the active window. The window that receives the message can distinguish between  | ||||
|         /// these two contexts by checking the context code in the lParam parameter.  | ||||
|         /// </summary> | ||||
|         private const int WM_SYSKEYUP = 0x105; | ||||
| 
 | ||||
|         private const byte VK_SHIFT     = 0x10; | ||||
|         private const byte VK_CAPITAL   = 0x14; | ||||
|         private const byte VK_NUMLOCK   = 0x90; | ||||
| 
 | ||||
|         #endregion | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Creates an instance of UserActivityHook object and sets mouse and keyboard hooks. | ||||
|         /// </summary> | ||||
|         /// <exception cref="Win32Exception">Any windows problem.</exception> | ||||
|         public UserActivityHook() | ||||
|         { | ||||
|             Start(); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Creates an instance of UserActivityHook object and installs both or one of mouse and/or keyboard hooks and starts rasing events | ||||
|         /// </summary> | ||||
|         /// <param name="InstallMouseHook"><b>true</b> if mouse events must be monitored</param> | ||||
|         /// <param name="InstallKeyboardHook"><b>true</b> if keyboard events must be monitored</param> | ||||
|         /// <exception cref="Win32Exception">Any windows problem.</exception> | ||||
|         /// <remarks> | ||||
|         /// To create an instance without installing hooks call new UserActivityHook(false, false) | ||||
|         /// </remarks> | ||||
|         public UserActivityHook(bool InstallMouseHook, bool InstallKeyboardHook) | ||||
|         { | ||||
|             Start(InstallMouseHook, InstallKeyboardHook); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Destruction. | ||||
|         /// </summary> | ||||
|         ~UserActivityHook() | ||||
|         { | ||||
|             //uninstall hooks and do not throw exceptions | ||||
|             Stop(true, true, false); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Occurs when the user moves the mouse, presses any mouse button or scrolls the wheel | ||||
|         /// </summary> | ||||
|         public event MouseEventHandler OnMouseActivity; | ||||
|         /// <summary> | ||||
|         /// Occurs when the user presses a key | ||||
|         /// </summary> | ||||
|         public event KeyEventHandler KeyDown; | ||||
|         /// <summary> | ||||
|         /// Occurs when the user presses and releases  | ||||
|         /// </summary> | ||||
|         public event KeyPressEventHandler KeyPress; | ||||
|         /// <summary> | ||||
|         /// Occurs when the user releases a key | ||||
|         /// </summary> | ||||
|         public event KeyEventHandler KeyUp; | ||||
| 
 | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Stores the handle to the mouse hook procedure. | ||||
|         /// </summary> | ||||
|         private int hMouseHook = 0; | ||||
|         /// <summary> | ||||
|         /// Stores the handle to the keyboard hook procedure. | ||||
|         /// </summary> | ||||
|         private int hKeyboardHook = 0; | ||||
| 
 | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Declare MouseHookProcedure as HookProc type. | ||||
|         /// </summary> | ||||
|         private static HookProc MouseHookProcedure; | ||||
|         /// <summary> | ||||
|         /// Declare KeyboardHookProcedure as HookProc type. | ||||
|         /// </summary> | ||||
|         private static HookProc KeyboardHookProcedure; | ||||
| 
 | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Installs both mouse and keyboard hooks and starts rasing events | ||||
|         /// </summary> | ||||
|         /// <exception cref="Win32Exception">Any windows problem.</exception> | ||||
|         public void Start() | ||||
|         { | ||||
|             this.Start(true, true); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Installs both or one of mouse and/or keyboard hooks and starts rasing events | ||||
|         /// </summary> | ||||
|         /// <param name="InstallMouseHook"><b>true</b> if mouse events must be monitored</param> | ||||
|         /// <param name="InstallKeyboardHook"><b>true</b> if keyboard events must be monitored</param> | ||||
|         /// <exception cref="Win32Exception">Any windows problem.</exception> | ||||
|         public void Start(bool InstallMouseHook, bool InstallKeyboardHook) | ||||
|         { | ||||
|             // install Mouse hook only if it is not installed and must be installed | ||||
|             if (hMouseHook == 0 && InstallMouseHook) | ||||
|             { | ||||
|                 // Create an instance of HookProc. | ||||
|                 MouseHookProcedure = new HookProc(MouseHookProc); | ||||
|                 //install hook | ||||
|                 hMouseHook = SetWindowsHookEx( | ||||
|                     WH_MOUSE_LL, | ||||
|                     MouseHookProcedure, | ||||
|                     Marshal.GetHINSTANCE( | ||||
|                         Assembly.GetExecutingAssembly().GetModules()[0]), | ||||
|                     0); | ||||
|                 //If SetWindowsHookEx fails. | ||||
|                 if (hMouseHook == 0) | ||||
|                 { | ||||
|                     //Returns the error code returned by the last unmanaged function called using platform invoke that has the DllImportAttribute.SetLastError flag set.  | ||||
|                     int errorCode = Marshal.GetLastWin32Error(); | ||||
|                     //do cleanup | ||||
|                     Stop(true, false, false); | ||||
|                     //Initializes and throws a new instance of the Win32Exception class with the specified error.  | ||||
|                     throw new Win32Exception(errorCode); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             // install Keyboard hook only if it is not installed and must be installed | ||||
|             if (hKeyboardHook == 0 && InstallKeyboardHook) | ||||
|             { | ||||
|                 // Create an instance of HookProc. | ||||
|                 KeyboardHookProcedure = new HookProc(KeyboardHookProc); | ||||
|                 //install hook | ||||
|                 hKeyboardHook = SetWindowsHookEx( | ||||
|                     WH_KEYBOARD_LL, | ||||
|                     KeyboardHookProcedure, | ||||
|                     Marshal.GetHINSTANCE( | ||||
|                     Assembly.GetExecutingAssembly().GetModules()[0]), | ||||
|                     0); | ||||
|                 //If SetWindowsHookEx fails. | ||||
|                 if (hKeyboardHook == 0) | ||||
|                 { | ||||
|                     //Returns the error code returned by the last unmanaged function called using platform invoke that has the DllImportAttribute.SetLastError flag set.  | ||||
|                     int errorCode = Marshal.GetLastWin32Error(); | ||||
|                     //do cleanup | ||||
|                     Stop(false, true, false); | ||||
|                     //Initializes and throws a new instance of the Win32Exception class with the specified error.  | ||||
|                     throw new Win32Exception(errorCode); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Stops monitoring both mouse and keyboard events and rasing events. | ||||
|         /// </summary> | ||||
|         /// <exception cref="Win32Exception">Any windows problem.</exception> | ||||
|         public void Stop() | ||||
|         { | ||||
|             this.Stop(true, true, true); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// Stops monitoring both or one of mouse and/or keyboard events and rasing events. | ||||
|         /// </summary> | ||||
|         /// <param name="UninstallMouseHook"><b>true</b> if mouse hook must be uninstalled</param> | ||||
|         /// <param name="UninstallKeyboardHook"><b>true</b> if keyboard hook must be uninstalled</param> | ||||
|         /// <param name="ThrowExceptions"><b>true</b> if exceptions which occured during uninstalling must be thrown</param> | ||||
|         /// <exception cref="Win32Exception">Any windows problem.</exception> | ||||
|         public void Stop(bool UninstallMouseHook, bool UninstallKeyboardHook, bool ThrowExceptions) | ||||
|         { | ||||
|             //if mouse hook set and must be uninstalled | ||||
|             if (hMouseHook != 0 && UninstallMouseHook) | ||||
|             { | ||||
|                 //uninstall hook | ||||
|                 int retMouse = UnhookWindowsHookEx(hMouseHook); | ||||
|                 //reset invalid handle | ||||
|                 hMouseHook = 0; | ||||
|                 //if failed and exception must be thrown | ||||
|                 if (retMouse == 0 && ThrowExceptions) | ||||
|                 { | ||||
|                     //Returns the error code returned by the last unmanaged function called using platform invoke that has the DllImportAttribute.SetLastError flag set.  | ||||
|                     int errorCode = Marshal.GetLastWin32Error(); | ||||
|                     //Initializes and throws a new instance of the Win32Exception class with the specified error.  | ||||
|                     throw new Win32Exception(errorCode); | ||||
|                 } | ||||
|             } | ||||
| 
 | ||||
|             //if keyboard hook set and must be uninstalled | ||||
|             if (hKeyboardHook != 0 && UninstallKeyboardHook) | ||||
|             { | ||||
|                 //uninstall hook | ||||
|                 int retKeyboard = UnhookWindowsHookEx(hKeyboardHook); | ||||
|                 //reset invalid handle | ||||
|                 hKeyboardHook = 0; | ||||
|                 //if failed and exception must be thrown | ||||
|                 if (retKeyboard == 0 && ThrowExceptions) | ||||
|                 { | ||||
|                     //Returns the error code returned by the last unmanaged function called using platform invoke that has the DllImportAttribute.SetLastError flag set.  | ||||
|                     int errorCode = Marshal.GetLastWin32Error(); | ||||
|                     //Initializes and throws a new instance of the Win32Exception class with the specified error.  | ||||
|                     throw new Win32Exception(errorCode); | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
| 
 | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// A callback function which will be called every time a mouse activity detected. | ||||
|         /// </summary> | ||||
|         /// <param name="nCode"> | ||||
|         /// [in] Specifies whether the hook procedure must process the message.  | ||||
|         /// If nCode is HC_ACTION, the hook procedure must process the message.  | ||||
|         /// If nCode is less than zero, the hook procedure must pass the message to the  | ||||
|         /// CallNextHookEx function without further processing and must return the  | ||||
|         /// value returned by CallNextHookEx. | ||||
|         /// </param> | ||||
|         /// <param name="wParam"> | ||||
|         /// [in] Specifies whether the message was sent by the current thread.  | ||||
|         /// If the message was sent by the current thread, it is nonzero; otherwise, it is zero.  | ||||
|         /// </param> | ||||
|         /// <param name="lParam"> | ||||
|         /// [in] Pointer to a CWPSTRUCT structure that contains details about the message.  | ||||
|         /// </param> | ||||
|         /// <returns> | ||||
|         /// If nCode is less than zero, the hook procedure must return the value returned by CallNextHookEx.  | ||||
|         /// If nCode is greater than or equal to zero, it is highly recommended that you call CallNextHookEx  | ||||
|         /// and return the value it returns; otherwise, other applications that have installed WH_CALLWNDPROC  | ||||
|         /// hooks will not receive hook notifications and may behave incorrectly as a result. If the hook  | ||||
|         /// procedure does not call CallNextHookEx, the return value should be zero.  | ||||
|         /// </returns> | ||||
|         private int MouseHookProc(int nCode, int wParam, IntPtr lParam) | ||||
|         { | ||||
|             // if ok and someone listens to our events | ||||
|             if ((nCode >= 0) && (OnMouseActivity != null)) | ||||
|             { | ||||
|                 //Marshall the data from callback. | ||||
|                 MouseLLHookStruct mouseHookStruct = (MouseLLHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseLLHookStruct)); | ||||
| 
 | ||||
|                 //detect button clicked | ||||
|                 MouseButtons button = MouseButtons.None; | ||||
|                 short mouseDelta = 0; | ||||
|                 switch (wParam) | ||||
|                 { | ||||
|                     case WM_LBUTTONDOWN: | ||||
|                         //case WM_LBUTTONUP:  | ||||
|                         //case WM_LBUTTONDBLCLK:  | ||||
|                         button = MouseButtons.Left; | ||||
|                         break; | ||||
|                     case WM_RBUTTONDOWN: | ||||
|                         //case WM_RBUTTONUP:  | ||||
|                         //case WM_RBUTTONDBLCLK:  | ||||
|                         button = MouseButtons.Right; | ||||
|                         break; | ||||
|                     case WM_MOUSEWHEEL: | ||||
|                         //If the message is WM_MOUSEWHEEL, the high-order word of mouseData member is the wheel delta.  | ||||
|                         //One wheel click is defined as WHEEL_DELTA, which is 120.  | ||||
|                         //(value >> 16) & 0xffff; retrieves the high-order word from the given 32-bit value | ||||
|                         mouseDelta = (short)((mouseHookStruct.mouseData >> 16) & 0xffff); | ||||
|                         //TODO: X BUTTONS (I havent them so was unable to test) | ||||
|                         //If the message is WM_XBUTTONDOWN, WM_XBUTTONUP, WM_XBUTTONDBLCLK, WM_NCXBUTTONDOWN, WM_NCXBUTTONUP,  | ||||
|                         //or WM_NCXBUTTONDBLCLK, the high-order word specifies which X button was pressed or released,  | ||||
|                         //and the low-order word is reserved. This value can be one or more of the following values.  | ||||
|                         //Otherwise, mouseData is not used.  | ||||
|                         break; | ||||
|                 } | ||||
| 
 | ||||
|                 //double clicks | ||||
|                 int clickCount = 0; | ||||
|                 if (button != MouseButtons.None) | ||||
|                     if (wParam == WM_LBUTTONDBLCLK || wParam == WM_RBUTTONDBLCLK) clickCount = 2; | ||||
|                     else clickCount = 1; | ||||
| 
 | ||||
|                 //generate event  | ||||
|                  MouseEventArgs e = new MouseEventArgs( | ||||
|                                                     button, | ||||
|                                                     clickCount, | ||||
|                                                     mouseHookStruct.pt.x, | ||||
|                                                     mouseHookStruct.pt.y, | ||||
|                                                     mouseDelta); | ||||
|                 //raise it | ||||
|                 OnMouseActivity(this, e); | ||||
|             } | ||||
|             //call next hook | ||||
|             return CallNextHookEx(hMouseHook, nCode, wParam, lParam); | ||||
|         } | ||||
| 
 | ||||
|         /// <summary> | ||||
|         /// A callback function which will be called every time a keyboard activity detected. | ||||
|         /// </summary> | ||||
|         /// <param name="nCode"> | ||||
|         /// [in] Specifies whether the hook procedure must process the message.  | ||||
|         /// If nCode is HC_ACTION, the hook procedure must process the message.  | ||||
|         /// If nCode is less than zero, the hook procedure must pass the message to the  | ||||
|         /// CallNextHookEx function without further processing and must return the  | ||||
|         /// value returned by CallNextHookEx. | ||||
|         /// </param> | ||||
|         /// <param name="wParam"> | ||||
|         /// [in] Specifies whether the message was sent by the current thread.  | ||||
|         /// If the message was sent by the current thread, it is nonzero; otherwise, it is zero.  | ||||
|         /// </param> | ||||
|         /// <param name="lParam"> | ||||
|         /// [in] Pointer to a CWPSTRUCT structure that contains details about the message.  | ||||
|         /// </param> | ||||
|         /// <returns> | ||||
|         /// If nCode is less than zero, the hook procedure must return the value returned by CallNextHookEx.  | ||||
|         /// If nCode is greater than or equal to zero, it is highly recommended that you call CallNextHookEx  | ||||
|         /// and return the value it returns; otherwise, other applications that have installed WH_CALLWNDPROC  | ||||
|         /// hooks will not receive hook notifications and may behave incorrectly as a result. If the hook  | ||||
|         /// procedure does not call CallNextHookEx, the return value should be zero.  | ||||
|         /// </returns> | ||||
|         private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) | ||||
|         { | ||||
|             //indicates if any of underlaing events set e.Handled flag | ||||
|             bool handled = false; | ||||
|             //it was ok and someone listens to events | ||||
|             if ((nCode >= 0) && (KeyDown != null || KeyUp != null || KeyPress != null)) | ||||
|             { | ||||
|                 //read structure KeyboardHookStruct at lParam | ||||
|                 KeyboardHookStruct MyKeyboardHookStruct = (KeyboardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyboardHookStruct)); | ||||
|                 //raise KeyDown | ||||
|                 if (KeyDown != null && (wParam == WM_KEYDOWN || wParam == WM_SYSKEYDOWN)) | ||||
|                 { | ||||
|                     Keys keyData = (Keys)MyKeyboardHookStruct.vkCode; | ||||
|                     KeyEventArgs e = new KeyEventArgs(keyData); | ||||
|                     KeyDown(this, e); | ||||
|                     handled = handled || e.Handled; | ||||
|                 } | ||||
| 
 | ||||
|                 // raise KeyPress | ||||
|                 if (KeyPress != null && wParam == WM_KEYDOWN) | ||||
|                 { | ||||
|                     bool isDownShift = ((GetKeyState(VK_SHIFT) & 0x80) == 0x80 ? true : false); | ||||
|                     bool isDownCapslock = (GetKeyState(VK_CAPITAL) != 0 ? true : false); | ||||
| 
 | ||||
|                     byte[] keyState = new byte[256]; | ||||
|                     GetKeyboardState(keyState); | ||||
|                     byte[] inBuffer = new byte[2]; | ||||
|                     if (ToAscii(MyKeyboardHookStruct.vkCode, | ||||
|                               MyKeyboardHookStruct.scanCode, | ||||
|                               keyState, | ||||
|                               inBuffer, | ||||
|                               MyKeyboardHookStruct.flags) == 1) | ||||
|                     { | ||||
|                         char key = (char)inBuffer[0]; | ||||
|                         if ((isDownCapslock ^ isDownShift) && Char.IsLetter(key)) key = Char.ToUpper(key); | ||||
|                         KeyPressEventArgs e = new KeyPressEventArgs(key); | ||||
|                         KeyPress(this, e); | ||||
|                         handled = handled || e.Handled; | ||||
|                     } | ||||
|                 } | ||||
| 
 | ||||
|                 // raise KeyUp | ||||
|                 if (KeyUp != null && (wParam == WM_KEYUP || wParam == WM_SYSKEYUP)) | ||||
|                 { | ||||
|                     Keys keyData = (Keys)MyKeyboardHookStruct.vkCode; | ||||
|                     KeyEventArgs e = new KeyEventArgs(keyData); | ||||
|                     KeyUp(this, e); | ||||
|                     handled = handled || e.Handled; | ||||
|                 } | ||||
| 
 | ||||
|             } | ||||
| 
 | ||||
|             //if event handled in application do not handoff to other listeners | ||||
|             if (handled) | ||||
|                 return 1; | ||||
|             else | ||||
|                 return CallNextHookEx(hKeyboardHook, nCode, wParam, lParam); | ||||
|         } | ||||
|     } | ||||
| } | ||||
							
								
								
									
										37
									
								
								src/webimtray/WebIMTray/options/About.Designer.cs
									
									
									
										generated
									
									
									
								
							
							
						
						
									
										37
									
								
								src/webimtray/WebIMTray/options/About.Designer.cs
									
									
									
										generated
									
									
									
								
							| @ -30,7 +30,6 @@ namespace webImTray { | ||||
|             this.label2 = new System.Windows.Forms.Label(); | ||||
|             this.pictureBox1 = new System.Windows.Forms.PictureBox(); | ||||
|             this.linkLabel1 = new System.Windows.Forms.LinkLabel(); | ||||
|             this.linkLabel2 = new System.Windows.Forms.LinkLabel(); | ||||
|             this.pictureBox2 = new System.Windows.Forms.PictureBox(); | ||||
|             label3 = new System.Windows.Forms.Label(); | ||||
|             label4 = new System.Windows.Forms.Label(); | ||||
| @ -46,9 +45,9 @@ namespace webImTray { | ||||
|             label3.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); | ||||
|             label3.Name = "label3"; | ||||
|             label3.Padding = new System.Windows.Forms.Padding(0, 0, 0, 9); | ||||
|             label3.Size = new System.Drawing.Size(297, 27); | ||||
|             label3.Size = new System.Drawing.Size(401, 27); | ||||
|             label3.TabIndex = 3; | ||||
|             label3.Text = "Copyright (c) 2006-07 Internet Services Ltd."; | ||||
|             label3.Text = "Copyright (c) 2006-08 Web Messenger Creators Community"; | ||||
|             //  | ||||
|             // label4 | ||||
|             //  | ||||
| @ -58,9 +57,9 @@ namespace webImTray { | ||||
|             label4.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); | ||||
|             label4.Name = "label4"; | ||||
|             label4.Padding = new System.Windows.Forms.Padding(0, 0, 0, 9); | ||||
|             label4.Size = new System.Drawing.Size(169, 27); | ||||
|             label4.Size = new System.Drawing.Size(162, 27); | ||||
|             label4.TabIndex = 4; | ||||
|             label4.Text = "Please, visit our websites"; | ||||
|             label4.Text = "Please, visit our website"; | ||||
|             //  | ||||
|             // label1 | ||||
|             //  | ||||
| @ -83,13 +82,13 @@ namespace webImTray { | ||||
|             this.label2.Name = "label2"; | ||||
|             this.label2.Size = new System.Drawing.Size(134, 23); | ||||
|             this.label2.TabIndex = 1; | ||||
|             this.label2.Text = "version 1.0.2"; | ||||
|             this.label2.Text = "version 1.0.3"; | ||||
|             //  | ||||
|             // pictureBox1 | ||||
|             //  | ||||
|             this.pictureBox1.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox1.Image"))); | ||||
|             this.pictureBox1.Location = new System.Drawing.Point(352, 0); | ||||
|             this.pictureBox1.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); | ||||
|             this.pictureBox1.Margin = new System.Windows.Forms.Padding(4); | ||||
|             this.pictureBox1.Name = "pictureBox1"; | ||||
|             this.pictureBox1.Size = new System.Drawing.Size(147, 123); | ||||
|             this.pictureBox1.TabIndex = 2; | ||||
| @ -109,27 +108,13 @@ namespace webImTray { | ||||
|             this.linkLabel1.Text = "http://www.webim.ru"; | ||||
|             this.linkLabel1.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.webim_ru_link); | ||||
|             //  | ||||
|             // linkLabel2 | ||||
|             //  | ||||
|             this.linkLabel2.AutoSize = true; | ||||
|             this.linkLabel2.Font = new System.Drawing.Font("Tahoma", 9F, System.Drawing.FontStyle.Regular, System.Drawing.GraphicsUnit.Point, ((byte)(204))); | ||||
|             this.linkLabel2.Location = new System.Drawing.Point(17, 218); | ||||
|             this.linkLabel2.Margin = new System.Windows.Forms.Padding(4, 0, 4, 0); | ||||
|             this.linkLabel2.Name = "linkLabel2"; | ||||
|             this.linkLabel2.Padding = new System.Windows.Forms.Padding(0, 0, 0, 9); | ||||
|             this.linkLabel2.Size = new System.Drawing.Size(163, 27); | ||||
|             this.linkLabel2.TabIndex = 6; | ||||
|             this.linkLabel2.TabStop = true; | ||||
|             this.linkLabel2.Text = "http://www.i-services.ru"; | ||||
|             this.linkLabel2.LinkClicked += new System.Windows.Forms.LinkLabelLinkClickedEventHandler(this.i_services_ru_link); | ||||
|             //  | ||||
|             // pictureBox2 | ||||
|             //  | ||||
|             this.pictureBox2.Image = ((System.Drawing.Image)(resources.GetObject("pictureBox2.Image"))); | ||||
|             this.pictureBox2.Location = new System.Drawing.Point(24, 268); | ||||
|             this.pictureBox2.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); | ||||
|             this.pictureBox2.Location = new System.Drawing.Point(23, 245); | ||||
|             this.pictureBox2.Margin = new System.Windows.Forms.Padding(4); | ||||
|             this.pictureBox2.Name = "pictureBox2"; | ||||
|             this.pictureBox2.Size = new System.Drawing.Size(147, 69); | ||||
|             this.pictureBox2.Size = new System.Drawing.Size(147, 76); | ||||
|             this.pictureBox2.TabIndex = 7; | ||||
|             this.pictureBox2.TabStop = false; | ||||
|             //  | ||||
| @ -140,14 +125,13 @@ namespace webImTray { | ||||
|             this.BackColor = System.Drawing.Color.White; | ||||
|             this.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D; | ||||
|             this.Controls.Add(this.pictureBox2); | ||||
|             this.Controls.Add(this.linkLabel2); | ||||
|             this.Controls.Add(this.linkLabel1); | ||||
|             this.Controls.Add(label4); | ||||
|             this.Controls.Add(label3); | ||||
|             this.Controls.Add(this.pictureBox1); | ||||
|             this.Controls.Add(this.label2); | ||||
|             this.Controls.Add(this.label1); | ||||
|             this.Margin = new System.Windows.Forms.Padding(4, 4, 4, 4); | ||||
|             this.Margin = new System.Windows.Forms.Padding(4); | ||||
|             this.Name = "About"; | ||||
|             this.Padding = new System.Windows.Forms.Padding(13, 25, 0, 0); | ||||
|             this.Size = new System.Drawing.Size(499, 405); | ||||
| @ -164,7 +148,6 @@ namespace webImTray { | ||||
|         private System.Windows.Forms.Label label2; | ||||
|         private System.Windows.Forms.PictureBox pictureBox1; | ||||
|         private System.Windows.Forms.LinkLabel linkLabel1; | ||||
|         private System.Windows.Forms.LinkLabel linkLabel2; | ||||
|         private System.Windows.Forms.PictureBox pictureBox2; | ||||
|     } | ||||
| } | ||||
|  | ||||
| @ -685,271 +685,72 @@ | ||||
|   </data> | ||||
|   <data name="pictureBox2.Image" type="System.Drawing.Bitmap, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64"> | ||||
|     <value> | ||||
|         Qk3uPQAAAAAAADYAAAAoAAAAaQAAADIAAAABABgAAAAAAAAAAADEDgAAxA4AAAAAAAAAAAAA//////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ////////////////////////////////////////////////////////////2sfFr4V/kVZQhENEhENE | ||||
|         hENEkVZQpXRux6mo3uHn//////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ////////////Q/////////////////////////////////////////////////////////////////// | ||||
|         /////////////////////////////////////////////////////////////////////////+Xl5pxo | ||||
|         ZF8JBV8JBXkxKJFWUJxoZJxoZIRDRHkxKF8JBWsaCZxoZNrHxfv7+/////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         /////////////////////////////////0P///////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ///////////h0cx5MShrGgmrfXPax8Xx8PH+/v3////////6+fjt4+LPtbCRVlBfCQVrGgmcaGTn2tP/ | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////9D//////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ////+/v759rTx6mor4V/nGhknGhkq31zeTEoXwkFnGhk2sfF7ePi+/r1//////////////////////// | ||||
|         ////0722hENEXwkFeTEov56T/fz6//////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ////////////////////////////////////////////////////////////////////////////Q/// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         /////////////////+3j4ruVhopJNGsaCWsaCXkxKJFWUJliT18JBYpJNKt9c5liT4pJNIpJNJFWUKt9 | ||||
|         c860qfHq5/////////////////////Tu6qt9c2saCWsaCZxoZPHq5/////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         /////////////////0P///////////////////////////////////////////////////////////// | ||||
|         ///////////////////////////////59/XHpoh5MShrGgmKSTS7lYbh0cz28er+/v2ldG6KSTTt4+L/ | ||||
|         ///7+/v07urn2tPOtKmvhX+ZYk+RVlCsgW/ax8X6+fj///////////////+7lYZ4LQprGgmKSTTh0cz/ | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////9D//////////////////////////////////////// | ||||
|         ////////////////////////////////////////////////8ernom9XaxoJikk0zrSp+vbw//////// | ||||
|         ////z7WweC0K4dHM////////////////////////////+vn44dHMu5WGmWJPom9XzrSp+vn4//////// | ||||
|         ////v56TeC0KeC0Kikk00722//////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ////////////////////////////////////////////////////////////Q/////////////////// | ||||
|         //////////////////////////////////////////////////////////////////Xv5qFrRGsaCah4 | ||||
|         WPHq5/////////////////n39ZNTIruVhv////////////////////////////////////////////T0 | ||||
|         9N7Kuax+YKJvV9O6qfr5+P///////7uVhoE4B3gtCoE4B8utl/////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         /0P///////////////////////////////////////////////////////////////////////////// | ||||
|         ///8+/isfmBrGgmsfmD59/X////////////////////LrZeKSTT69vD///////////////////////// | ||||
|         ///////////////////////////////fzcCsfmCoeFjh0cz////7+/uoeFiBOAeKRhWBOAe7lHP59/X/ | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////9D//////////////////////////////////////////////////////// | ||||
|         ////////////////////////07qpeC0Km2E2+vbw////////////////////////oWtEy62X//////// | ||||
|         /////////////////////////////////////////////////////////v7907qpoWtEu5Rz+PPs+PPs | ||||
|         k1MigTgHikYVgTgHqHhY9O7q//////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ////////////////////////////////////////////Q/////////////////////////////////// | ||||
|         //////////////////////////////////////////n39ZthNoE4B+TVxf///////////////////+fa | ||||
|         08emiJNTIraMZbuUc8ejgNO6qefa0/n39f////////////////////////////////////////////// | ||||
|         //////jz7MOdeKFrRN7Kud/NwItDA4pGFZJPEYE4B5thNubYyv////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         /////////////////////////////////////////////////////////////////0P///////////// | ||||
|         ///////////////////////////////////////////////////////////////eyrmBOAexgVj///// | ||||
|         ///////////t4M2oeFiKRhWSTxGLQwOKRhWxgVi7lHO7lHO2jGW9kGDLrZfu4tL///////////////// | ||||
|         ///////////////////////////////////fzcCha0THpoi2jGWLQwOSTxGSTxGLQwOSTxHTuqn///// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////9D//////////////////////////////////////////////////////////////////////// | ||||
|         ////w514gTgH3cWq////////////3siuikYVm2E23sq5t4pfi0MD3siu////////////+vbw5tjKy62X | ||||
|         t4pfx6OA8OXY////////////////////////////////////////////////9O7qu5RzqXE1lFAHlFAH | ||||
|         lFAHl1MLi0MDi0MDu5Rz9vHq//////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ////////////////////////////Q/////////////////////////////////////////////////// | ||||
|         //////////////////////38+rJ+RpJPEfHn2f///////+bYyotDA7GBWPv48v7+/adsMItDA93Fqv// | ||||
|         //////////////////////Tu6ta7m7uPXta7m/38+v////////////////////////////////////// | ||||
|         //////7+/dG2mZdTC5pOAJhSAphSAphSAphSAotDA6lxNeTRu/////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         /////////////////////////////////////////////////0P///////////////////////////// | ||||
|         ///////////////////////////////////////////7+PKnbDCnbDD7+PL////7+vWnbDCsdEf8+/j/ | ||||
|         ///u4tKZVhOXSgCgXBPWu5v9/Pr////////////////////////17+bHpojEm23w5dj///////////// | ||||
|         ///////////////////////////////////eyK6ZVhOYUgKeVQCeVQCeVQCeVQCXSgCXUwvDnXjy6uD/ | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////9D//////// | ||||
|         ////////////////////////////////////////////////////////////////+vbwqWolsn5G//// | ||||
|         ////3cWqmVYT7+XU////////5NG2mFICn1kAnlUAmFICsn5G1rub7+XU+vn4//////////////////// | ||||
|         59jHw5145NG7////////////////////////////////////////////////vItUl0oAn1kAn1kAn1kA | ||||
|         n1kAn1kAnlUAmk4ApmQe07KM9e/m//////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ////////////Q/////////////////////////////////////////////////////////////////// | ||||
|         //////v48qlxNbeGSf///////7yLVLuPXv///////////9m+nJpOAKJcAKJcAKJcAJhSAppOAKBcE7F3 | ||||
|         NLyLVMiic9OyjNe6k9a7m97Irte6k6ZkHruPXta7m9m+nNm+nNa7m9a7m9a7m9a7m9m+nNm+nNa7m8Sb | ||||
|         bahmFZ9ZAKJcAKJcAKJcAKJcAKJcAKJcAKJcAJ5VAJpOAKlqJcejgO3gzf38+v////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         /////////////////////////////////0P///////////////////////////////////////////// | ||||
|         ///////////////////////////9/Pqyeja1fTv////69vCnbDDdxar////////////TsYWXSgCfWQCf | ||||
|         WQCfWQCfWQCiXACeVQCYUgKaTgCaTgCaTgCaTgCaTgCaTgCdUgGfWQCaTgCaTgCaTgCaTgCaTgCaTgCa | ||||
|         TgCaTgCaTgCaTgCaTgCaTgCfWQCiXACfWQCfWQCfWQCfWQCfWQCfWQCfWQCfWQCiXACdUgGaTgCfWA22 | ||||
|         gUPTsozq2sT28er9/Pr///////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////9D//////////////////////// | ||||
|         ////////////////////////////////////////////////////yKJztX07//339/Dlsno28ufX//// | ||||
|         ////////0K2BoFwTq2kWqGcYq2kWqGcYqGYVqGYVq2kWq2kWqGYVq2kWq2kWq2kWqGcYqGYVq2kWqGYV | ||||
|         pmMTqGYVq2kWqGYVpmMTqGYVpmMTpmMTqGYVqGcYqGYVqGYVqGYVqGcYqGcYqGcYqGcYqGcYqGcYqGYV | ||||
|         qGcYqGcYqGYVpmMTpmMToFwTn1gNpmQetX07x6Fn2r2U486y7eDN9e/m+/v7//////////////////// | ||||
|         ////////////////////////////////////////////////////////////////////////////Q/// | ||||
|         //n39fT09Pv7+/n39fT09P7+/f////////T09Pr5+P////////n39fT09P38+v////7+/fT09Pbx6vLq | ||||
|         3Pn39fT09PXt4vr5+PT09Pr5+P////Xv5u/l1PLp2fDo2PDo2PLp2e/l1PLn1/Lp2fDo2PLq3PHn2fLq | ||||
|         3PLq3PLq3PDo2PLp2fDo2O/l1O/l1PDo2PTr2+/l1O/l1O/l1PLq3PLq3PLp2fLq3PLq3PLn1+/l1PDo | ||||
|         2PDo2PLp2fDo2PLp2fDo2PLn1/Lp2fLn1+/l1PLn1/Lp2fHn2e7i0u3gzeraxOzdyO3gze/l1PXv5vv4 | ||||
|         8v38+v////////////v69f/99/////////z7+Pv48vv69fv69fv69fv48vz7+P////////7+/fv69f38 | ||||
|         +v///////////////0P///+jpKcvMTV/goR2eHw6PD+oqq7///+Wl5k0NjhbXmLs7e////+OkJM0NjiH | ||||
|         i5H////x8PFbXmJDRkpOUVc+QUU+QUVOUVeZnKFDRkpYWVzx8PH///9wcnZOUVeZnKFDRkpwcnb////e | ||||
|         4edOUVdJTFGoqq5bXmJJTFFOUVdJTFFDRkpbXmLs7e////+ztbk+QUV2eHz////////////k0bbCk1m2 | ||||
|         gUO8i1TZvpz7+vXIonO5hEK+iku7h0i7h0i8i1TdxKG8i1TCk1n69vD////QrYG2gUPt4M3////TsYW1 | ||||
|         fTvDlWD7+PL////jzK6xdzTHnGX+/v307d/Jn2m1fTu2gUPOqnr48+zq2sSyeja6gjm2gUO6gjmyejbD | ||||
|         lWD8+/jjzrK+ikuxdzS2gUPTsYX28er///////9D////rq+yAAEDNDY4Y2VoAAEDaGtu+vn4NDY4AAED | ||||
|         DRAVzc3O////lpeZAAEDPkFF+vn4+/v7SUxRAAEDDRAVExUaExUaDRAVdnh8HiElBgkO0NLV////WFlc | ||||
|         AAEDY2VoExUaExUa5eXmlpeZAAEDAAEDcHJ2NDY4AAEDDRAVExUaDRAVExUawMHD////s7W5AAEDHiEl | ||||
|         5eXm////5NG2mk4Al0oAtoFDsno2nVIBx5xlwpNZmk4ApV8Bol0Lol0Lol0Lx6FnqWolmk4A6trE//// | ||||
|         x6FnlEIA0K2B/fz6tX07mk4Amk4A07KM////5NG2mk4Aq2wd8+vdvopLl0oApmMTqWoll0oAtX075NG2 | ||||
|         pmMTnlUApV8BpmILn1gNr3Ej4curn1gNl0oAtoFDtX07nVIBu4dI+vbw////Q////9rc3x4hJRMVGn+C | ||||
|         hA0QFUlMUbe8vw0QFRMVGgYJDqOkp////83Nzg0QFR4hJdrc3////4SHiwABA0lMUdrc39rc39bY2uXl | ||||
|         5j5BRQABA3+ChLa4ujo8PwYJDn+ChDo8PwYJDsDBw05RVwYJDgYJDmBiZGNlaAABA3Z4fOXl5tbY2tDS | ||||
|         1ezt7////+vr7CUoLA0QFcDBw////+jWvsOVYNq9lPr28NzCnKJcAKZjE8ecZZ5VALd7MPDkzPDp1PDk | ||||
|         zPfv4ruHSJpOAMyja+POsrqCOZ5VAM+odPv69bF3NKVfAaVfAatsHfXt4vr28KtsHahlCte6k6hmFaJd | ||||
|         C+POsvz58cOVYKBcE9CtgbuHSJ1SAdOxhfTt3/DkzPDp1OjWvsecZdi5kPr28N/IpqZiC51SAePOsv// | ||||
|         /0P////59/VDRkoAAQN7fIAlKCwlKCxOUVcNEBUaHCAGCQ5wcnb////s7e8vMTUGCQ62uLr///+ysrQN | ||||
|         EBUaHCA6PD86PD80NjhgYmRjZWgNEBUNEBUAAQMAAQMTFRq3vL9gYmQGCQ5bXmIlKCwTFRoNEBU6PD97 | ||||
|         fIANEBUlKCw6PD80Njg0Njhwcnb///////9JTFEAAQOWl5n////////////fyKm1fTuiXACdUgGvcSPd | ||||
|         xKGmYxOoZQqxdzSxdzSpcTW8i1TJn2miXAClXwGeVQCdUgGiXADgxqL69vCpaiWvcSPMo2uaTgDPqHT/ | ||||
|         //+7h0ifWQDHnGWrbB2mYxPz693////7+PLz69348+zFmWOeVQCvcSOyejaxdzSnbDDVto/////jzK61 | ||||
|         fTuiXQueVQCiXQvq2sT///9D////////dnh8AAEDaGtuQ0ZKDRAVDRAVLzE1dnh8BgkOQ0ZK//////// | ||||
|         YGJkAAEDh4uR////5eXmJSgsBgkOPkFFY2VoWFlcdnh8jpCTBgkONDY4urq8lpeZExUaPkFFcHJ2DRAV | ||||
|         ExUaDRAVdnh8NDY4Ghwgh4uRGhwgExUaTlFXYGJkWFlce3yA/v79////hIeLAAEDaGtu////////2r2U | ||||
|         mk4An1kAr3Ejx5xl7+XU9vHqq2wdnlUAtX07wpNZvItUyZ9p17qTn1kAq2wd486y2r2UqGYVr3Ej486y | ||||
|         pmQer3Ej7+XUq2wdpmMT8+vd07GFmk4AxZdcuYRCmk4A3MKc////////7eDN7+XU07GFn1kApmILvopL | ||||
|         wpNZvItU2b6c4MqqnVIBnlUAq2wdxZlj6trE////////Q////////6OkpwABA0lMUWBiZA0QFQYJDmNl | ||||
|         aM3NzgYJDiUoLLKytK6vslhZXAYJDkNGSqiqrra4ukNGSgYJDnt8gLq6vLKytLa4uqOkpw0QFSUoLLa4 | ||||
|         urO1uSUoLAYJDmNlaB4hJQ0QFRocINbY2lhZXAABA4SHiy8xNRocIJaXmbq6vK6vsrO1ucjJzKiqrnBy | ||||
|         dgYJDjQ2OJmcobe8v8iic5pOALd7MO3gzdm+nMWZY+TRtsOSVZpOAMehZ+TRtuDKquPMruDKqqZkHqZj | ||||
|         E9/IqeTRtrN2KJ5VAMWXXKZkHqtsHfjz7M6qepdKAMylc+TRtp1SAbmEQt3EoZ1SAatsHejWvt/IpqJd | ||||
|         C6ZkHtzCnKZjE6tpFtzCnOPOst/IqejWvs6qepdKALF0IOzdyN3FqsOVYNm+nP///0P////////IycwA | ||||
|         AQMTFRpoa24AAQMAAQOoqq7x8PEaHCAAAQNOUVcAAQMAAQMGCQ4AAQMAAQMaHCBOUVcAAQMAAQMAAQMA | ||||
|         AQMAAQNbXmIvMTUAAQMAAQMAAQMAAQMlKCy6urwaHCAAAQNJTFH+/v1wcnYAAQNbXmJDRkoAAQMAAQMA | ||||
|         AQMAAQMGCQ5YWVwGCQ4AAQMGCQ4AAQMAAQMGCQ6zr6a/hT2XUwumYxOXSgCUQgDfyKnQrYGUQgCaTgCX | ||||
|         SgCXSgCUQgC+iku1fTuXSgCaTgCaTgCaTgCrbB3OqnqXSgCmYxP17+by6dmiXQudUgHavZSgXBOdUgHt | ||||
|         4M3Vto+fWA2aTgCaTgCaTgC8i1Tz692rbB2XSgCXSgCXSgCXSgCaTQjgxqK2gUOdUgGmZB6aTgCUQgDQ | ||||
|         rYH///9D////////9PT0jpCTe3yAurq8e3yAhIeL6+vs////mZyhdnh8rq+yhIeLf4KEf4KEf4KEf4KE | ||||
|         hIeLrq+yf4KEf4KEf4KEf4KEf4KEqKquqKquhIeLh4uRhIeLjpCT1tja////mZyhe3yAyMnM////0NLV | ||||
|         e3yAqKqus7W5hIeLh4uRh4uRh4uRhIeLtri6mZyhhIeLh4uRh4uRh4uRf4KE2tzf+/r13cSh0K2B07GF | ||||
|         5NG7////7+XU0K2B07GF07GF07GF0K2B4Mqq486y0K2B07GF07GF1baP8OXY8urgzqp61rub/v79//// | ||||
|         486yzKVz486y2b6czKVz7uLS////7eDN07GFzKVz2b6c+vbw/v791rubzKVzzqp6zqp6zqp6zKVz7uLS | ||||
|         +vbw2b6czKVzzqp638ip/Pv4////Q/////////////////////////////////////////////////// | ||||
|         /////////////////////////////////////////////+/bufLp2ejOqu3Tre3Tre3Tre3TreXLpdzC | ||||
|         nO3Tre3TrebNp9zCnOXLpe3TrejOqujOqu3Tre3Tre3Tre3Tre3TrebNp+3Tre3Tre3Tre3Tre3Tre3T | ||||
|         reDGot3EoePOruPOruPOruHLq9zCnN/IpubQruPOruPOruPOruPOruDKquDKquPOruPOruPOruPOrt/I | ||||
|         puDGouPOsuPOrtzCnNe6k9m+nN3EoeHLq+/l1P7+/f////////////////////////////////////// | ||||
|         /////////////////////////////////////////////////0P///////////////////////////// | ||||
|         ///////////////////////////////////////////////////////////////////MpXO9i0G3ezCe | ||||
|         VQCdUgGeVQClXwGlXwGlXwGlXwGlXwGeVQCdUgGdUgGeVQCdUgGdUgGeVQCeVQCeVQCeVQCeVQCdUgGe | ||||
|         VQCeVQCeVQCeVQCdUgGeVQClXwGlXwGeVQCdUgGdUgGeVQClXwGiXACeVQCdUgGdUgGdUgGdUgGiXACl | ||||
|         XwGlXwGlXwGlXwGlXwGlXwGlXwGlXwGeVQCeVQCvcSPFl1zavZTq2sT07OH8+/j///////////////// | ||||
|         //////////////////////////////////////////////////////////////////////9D//////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ////////+/jywpNZuoI5vYtBz6h0wJBMrGsBrGsBrGsBqWUBrGsLwJBMyaBjyaBjyaBjyaBjyaBjyaBj | ||||
|         yaBjyaBjyaBjyaBjyaBjyaBjyaBjyaBjyaBjyaBjwYxGqWUBqWUBvYtByaBjzKNrvYtBqWUBrGsLwpNZ | ||||
|         yaBjyaBjyaBjzJ1csXQgqWUBrGsBrGsBrGsBrGsBrGsBqWUBpV8BwYxG4cur+PPs//////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ////////////Q/////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////Xt4rqCOcWTSvv69f38+sGMRqllAaxrAbd7MOjWvv////// | ||||
|         //////////////////////////////////////////////////////////////38+s+odLF0IPbx6v// | ||||
|         //////z58bV9O8ylc////////////////////+raxK9wE6xrC69wE69wE69wE6xrAbF0IN3Eof38+v// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         /////////////////////////////////0P///////////////////////////////////////////// | ||||
|         ///////////////////////////////////////////////////////////u4tKxdCDFmWP////YuZCo | ||||
|         ZQqxdCDo1r7///////////////////////////////////////////////////////////////////// | ||||
|         ///////q2sTAkEz69vD////////////HnGXgxqL////////////////////7+PK6gjmraRaxdCCxdCCr | ||||
|         aRa3ezDs3cj///////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////9D//////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ////7N3Iq2kW2LmQ9e3iq2wdwY9R//////////////////////////////////////////////////// | ||||
|         ////////////////////////////8OXYw5JV9/Dl/////////Pv4x5xl6Na+//////////////////// | ||||
|         +ff1wYxGq2wds3Yor3Ejs3Yo7N3I//////////////////////////////////////////////////// | ||||
|         ////////////////////////////////////////////////////////////////////////////Q/// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         /////////////////////////////+jWvrN2KOPMrsmfacyja/////////////////////////////// | ||||
|         //////////////////////////////////////////////////Hn2cGPUfXt4v////////jz7MWXXPLp | ||||
|         2f////////////////////v48sGPUa9xI7d7MK9xI9zCnP////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         /////////////////0P///////////////////////////////////////////////////////////// | ||||
|         ///////////////////////////////////////////////////////o1r6+ikvJn2nQrYH///////// | ||||
|         ///////////////////////////////////////////////////////////////////////t4M3Bj1H3 | ||||
|         8OX////////t4M3HnGX7+PL////////////////////48+y+iku3ezCzdijHnGX+/v3///////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////9D//////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         7uLSvopLvopL/Pv4//////////////////////////////////////////////////////////////// | ||||
|         ////////////486yw5JV+/jy////////4Mqq0K2B/v79////////////////////8OXYuoI5t3swv4U9 | ||||
|         8OXY//////////////////////////////////////////////////////////////////////////// | ||||
|         ////////////////////////////////////////////////////////////Q/////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////Xv5sWXXNW2j/////////////////////////////////////////// | ||||
|         /////////////////////////////////86qes+odP///////////9OxhePMrv////////////////// | ||||
|         /////+POrrd7MLd7MNzCnP////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         /0P///////////////////////////////////////////////////////////////////////////// | ||||
|         ///////////////////////////////////////////////////69vDCk1nYtov8+/j///////////// | ||||
|         ///////////////////////////////////////////////////17eK/hT3k0bb////////69vDMpXP0 | ||||
|         69v////////////////////9/PrPqHS3ezDJn2n7+vX///////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////9D//////////////////////////////////////////////////////// | ||||
|         ////////////////////////////////////////////////////////////////////////////6trE | ||||
|         v4U92LaL8OXY/////////////////////////////////////////////////////////v79z6h0xZdc | ||||
|         /Pv4////////6trE0K2B/v79////////////////////7N3Iv4U9wYxG7uLS//////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ////////////////////////////////////////////Q/////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////7+/di5kNi0fN/IpuDGovfv4v////////////////////////////////////// | ||||
|         //////38+ti2i7+FPe3gzf///////////9u7j+TRu/////////////////////v48syja7qCOeDGov// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         /////////////////////////////////////////////////////////////////0P///////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ///////////////////////////////////////////48+zMo2vs2b7s3cjZt4TdxKHy6dn9/Pr///// | ||||
|         ///////////////////8+/ju4tLTqWrBjEbs2b7////////////y6tzYtHz7+PL////////////////9 | ||||
|         /Prbu4+/hT3TsYX9/Pr///////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////9D//////////////////////////////////////////////////////////////////////// | ||||
|         ////////////////////////////////////////////////////////////////////7uLSzJ1c7+XU | ||||
|         +/jy486u1K111K113cSh7Nm+7N3I6trE6dS14Mai1K11zJ1c2LR88urc/////////////v7927uP7Nm+ | ||||
|         ////////////////+vbw27uPwYxG1K11+PPs//////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ////////////////////////////Q/////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         /////////////+raxMydXO3gzf////r28ObQrtOpasydXNi0fOLHmODGouDGoubQrvbs3f////////// | ||||
|         /////////+nUtdq9lP////////////38+u3gzdOpasWTSti0fPbx6v////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         /////////////////////////////////////////////////0P///////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ///////////////////////////////////////s2b7TpFvp1LX////////8+/jt4M3ix5jcwpzv27n3 | ||||
|         7+L+/v3////////////////+/v3p1LXZt4T69vD8+/j17eLp1LXYtHzPnE/TpFvmzaf7+PL///////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////9D//////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ////////////////////////////////////////////////////////////////8OTM06Rb4sOJ+PHh | ||||
|         /////////v799+/i7Nm+5s2n5tCu7Nm+8OTM8OTM7Nm+3ryBz5xP2beE4sOJ2rNt06Rb06Rb2rNt6M6q | ||||
|         9/Dl//////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ////////////Q/////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////fv4t68gdOpaufOnvbs3f/99/////////////r28PTt3+3TrdqzbdOkW9qzbeXLpeLHmOLH | ||||
|         mOnRpezZvvbs3fv69f////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         /////////////////////////////////0P///////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ///////////////////////////////////9/Prv27ngvHbas23evIHnzp7s167s167p0aXiw4nas23a | ||||
|         s23p0aX69vD///////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////9D//////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         /////////////////////////////////////////////////////////////////Pnx8OTM586e3ryB | ||||
|         4Lx24Lx24Lx24sOJ7Neu+PHh//////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         ////////////////////////////////////////////////////////////////////////////Q/// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////v69fz58fz58fz58f38+v////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         //////////////////////////////////////////////////////////////////////////////// | ||||
|         /////////////////0M= | ||||
|         R0lGODlhYABJAPcAAMXb60xVkANKkZnH5JKmxOzz+GOs1wU8hGe021RimNXj7QNjpkV2qazM48nd63J2 | ||||
|         pjqDuwwSZCNrpqSqxvz9/S0zeQNCiqnU6keKwnGmzG2jyjd4qxdEiFyn1LvT5bO70ZO+3KLD3XWr0rLO | ||||
|         4/H2+QBbnVJ3qBVrrPn5+gBVnZnC3sLV5DN9t3aozFaGtYOsyeHi67XQ5MnJ2+3t7QttrU2UyAFsrHmJ | ||||
|         stri7PHy9aC30Guozvr7/BYtdvX4+urs8miVuy1gmiRWlOzx9svl8srV44662iFysPj6/IqNtFSayou1 | ||||
|         1QIyfery9xhZmnWSudLe6oSy1oiUuY7F4wBSlvb5/GCXxXyq0ZKYvABeot/p8VmWxNPo89XW41ORxPT2 | ||||
|         +Ck8gABmqJO20am1zdPj8WajzZO51nGy2gYqdi15tavE2oW63DhFhQBaoZm71uHt9aXM5b3K3OTu9bTV | ||||
|         6kGEu6PG4E+DtOXy+UuNv0SKvnKawYeHh7zd7dro8jxroSdxrnyhxdLa5svZ55SwzNzc3Hux1ixKiWqh | ||||
|         x7nW6X6myGmArLHL3Rt0sBhxr+bw9mKJtV9onBdeotjb597t9iZ6s6vI34SixGOcx+Hq8H2szgBPmA1O | ||||
|         kc7g7Wqfy5i92wEEWwpUmBU5fgFVmJiYmNjm8AoebSdQj0t/sNfp9HuCrni53ampqQBdpOfp8ICu0UCJ | ||||
|         wT5Sj7nF2VubxszR4Axnq12dzFGWxoiqyhUjb8HX6bfD1xZOjw1hpCl2swZWmw5YnIS/4AFTmwBXnhER | ||||
|         ESIiIkRERGZmZrq6uqLA1+/0+FVVVcvLy0aDr3SixHd3dzMzM/L3+kiPw4+qyOLs8vf7/EZhmZ2iwVWi | ||||
|         006czoKcwLXc7uft86nA1x1ior6+07u50OPn78Tf705uoN7g6lZtoFeYxGuYwZ/Q6d7o8ESAth4eagdf | ||||
|         plGNvn7A4tvs9d/s873C1wBbpb3P4AZaoAZSlQRVnFp+rImiw12Sv+Dr80FCgxhkm/39/QAAAP////7+ | ||||
|         /iwAAAAAYABJAAAI/wD9CRxIsKDBgwgp3CHC54LDC9qI3KGAsKLFixgzaixYhci5dghCigzZ7hwXHhtT | ||||
|         qlyJkRqRKQgMIAA24JzDc1NUhTxzzh3Ln0BTOhpgwEC7OaiSUfs3kNodPsCKquLjjgsXd3cKQOMXtCtQ | ||||
|         ImeuAeNDwiC0d0TCzZlyxkCHDmfaGjijasqFcJOoed2LkcKcawbmJCtIgkiDAQPgIApnNRycsAYGADvT | ||||
|         4Rq2a2cGACjLtzNBHnCwFUJFkAKqBmvWDAj3xkfBf28GlOHDowkqRFNEYMPWYU04vZ758qhTA0SBgVUc | ||||
|         qCgEDJEjihWrwNnRZyAPOXMKKVFSRsWd4Cz/if8fT1xFFfHJsiupVQiEChDuG3AiMb4+NRCF6NdPNqLM | ||||
|         9kJ91CfggAQK+JOADUSjAgX/FNDADuuJYIQK761RiH9K7NBAEwMWIEIdBJKiXQ0iBFjgiQUeOB4A0YDw | ||||
|         TzIxZFCGEYj0QQISVfBAAQVIOAIACLW8UkYuDNYHQBkmCljAEjWQ6AiKUNan4j/5lBMFNQ4UIkID+UT5 | ||||
|         jxYgvJIHHEjUh0QURvBAYDJRRBNNFNB4CaWK0EShARkqbMmhnP/w4EE0EDRQpHgAXJKkgHKU8QoGdQzK | ||||
|         p4Hh/RODF1FE4Ykcj9aXSx6vcFIfCRl4wk+BueDxihcOZDrggXJsAUEmDoz/qup4DaSRgQ/1hdBJAQVS | ||||
|         EwUEEHTy5KziHbhEGkvsSax40GjAAgD1keFFLic6gAEdEHjiaKY/VQIBCGUuq2kaUQxKQidLnEhCCyxA | ||||
|         QAe0xK5UhSfIbituMl54MUR9ZliRzIkhsEBHGpfwOqtKTVxxBDv7ijugKxB4Ol4MeEhMIAAQCNyLCrJy | ||||
|         u5EcVtBBxxJqOixgHSx4UJ8CeIBYoBbs9DIwHWQcrFE+eNBRCQaemDxgLiw0UF8BVrhy4hBWHNHuEZ2E | ||||
|         ++jNeRwBQCUnhOCzgA6wUEl9FLRgxXkEnnsCCyyk8YfVHl+UTx60jFCFF+ssYa/DWW/NLx6YEvhFJyek | ||||
|         /+G30hbLidE0eMSzhD8eHEHLFvpd/Q/QIwhYCR2Bf3oJLb1Q0ksvJ+ChxdMWNbFFPJdU4Y8ItDRyhMqO | ||||
|         /zNCGqxPzEIMBSazxQJH5J774l0KHl0ZNOBRXRMQ0MIILa+Q0rorJ8A73ghVFygHBAsw0sj119NSse8H | ||||
|         /eNKI9F44M8/ldBgPg1hQDCCssv6EAMlrBgB9j9NlCGMLOwzawQtNpzv/wKUAEH+CFSROjDCFhAowxnK | ||||
|         QIkw2OCBNlgADfJQhh1Y8IIYzKAGLViORoQhDIyQxQWjYYMwTFCDtjiBAyHIwgguIA8qGFaKDgKAI5Qj | ||||
|         D6zIQhvawIoP+jAMOtyhEP+HSMQiDlEYPQQiERcQhgUYsQ1Z+KEUP8gKYayDBRpoACkaN56DOEJkmeBF | ||||
|         FhZAxjKa8YxoTKMa18jGNp4xC8IQBi8o4YUlNMABjlDTlFrHx0cVox/9KIZARgHIfuxBIMoApCCJUchG | ||||
|         AlI8jHRkP56xivH8sR/DEM8eGrmH8UQSkDMgEDP2QcpS7oMZyBjPBkjJjPEko5TNuKQg/fHJQxKikKu4 | ||||
|         pSQV+Q9d7jKT4imkMsSTyEJ28h+bLOQz1mTKZu4DCl8q5QvGs4hSIuOSzkAmJ/9hDEAS4x+EBKQx9kBO | ||||
|         ch4DnIUc5x6GUUjxHMOY4mEnPGcgT0Bmc0DVJGUzxCD/hlGSUgz/QEYpFzGeF5RSC5fcAz05udB+jIKb | ||||
|         hQzlgLoJSEKI55Lf1CYgl/GPZXgTkJ1MZiQrOSCDkvJz/xBDKaHZjFL+Szz+3MA/5ElOQNJUpJC0aTnN | ||||
|         mVNMHuMYyRwGR/9xSWAmk6IKZSdF+yFRAflTAitYwSIkwErxrPKUroTlPwrpDHYOwxkgjeRDfSnJSpK1 | ||||
|         kcSwaDABOcx/FDOcNXUoIJc5IC04s5TM+JddSTlN8eRzH6ksZCTjGslhhDKcuzzsLucayneCNJ4VtadS | ||||
|         k3lPAQn0rmJ46WX3QVDxmHQfn3PkN5MJT4iCkkBLVetSz0lajnq0H9+0aUUvSVIB/7WUlIu47T76+g/d | ||||
|         vvQfV5XpVhv5UMfaVKKRpOuAIpnRf4B1o0S1qSbFOVzqRvQfPz2GWoMbzYOKhx3eDWgpAVpd2Lpzm70s | ||||
|         5DCKwV72DtOXxCBnMSe51n609a3lJYRjl+nLTu51H82wqjXFA4RSbuAFBWblS4l73kKqFbGSHCaEHSlU | ||||
|         7JZWnhblqkaziViObjaV//gsEPx6131sAJr1LcZ4jGuM8SxVkp18cSGLYQy1traj3lyrYaPbj0pSFJi6 | ||||
|         RekKSimB8SCDqkR+wW/7yGSfJSOqKBUQNYxwhUn8gx8q0JZ9kNEJEYhAA17+8iEOkQEvZ6DMYU5zBsZM | ||||
|         ZjOzmf/NGWhBCzKggTHHWc54lnMz7lznQ2hAzms2Bz6scIlmZGIJdfAAKXLgKE5EwgnQokY6JMA+auBD | ||||
|         AMFIgaY3zelOe3rTwuB0HOOYglB/+tSfDrUmBIBpCdBBA26IgQMUIIcCfIEHHYvBPP7wDvGYIxKBo0Az | ||||
|         glGCLBj72MhmxQ5JTepgQLENoSZ1p00dRygi+9rYNnYbgqGJSKTjCiPoQwGcBjBNpKFhYtCEGwTkCmJj | ||||
|         uwTC4HYwQPGLSHRDAviWwAZOoAlf3DvfAA94N36RgmwbvASaAMUfEuEBGcrJDQLYwJ4A8As7zO8fZgiG | ||||
|         MErQhhKUIAWa6PYG8JEIN1TCAw7/4IQCFNAEBWxgA26Y9cpnTvOZO6AOdvBFxz3O855/POGnQEbvVGUG | ||||
|         AfxhG8w6xSZoN55K/IIKHheGJiouhlwMoWMCWoELADGNTK3ACVD3ec81QQ87VIKLRBeABJQnHmRYgAHK | ||||
|         WkE3NFECKlDBDvJYcoduwQA34CpTiRCAKEow+MITnuwbUAPaZ4UMAThhBeMpgB2YoIel/IMUfhAAFeiR | ||||
|         iMXXpwrycIELUpUpfogBFFQQhepXLwoqCKAbt2iYyRaxCQGsezwOcMIBAIEraJzCAgIwR8kIVIUVmIMB | ||||
|         g/j7o0hwC1AInvWtZ7UdBNE6KAThAHrAuhp2wYRHKOAft7DA/yYiR6AhyEMPDDAH9VWFjkc4QQD0iH/8 | ||||
|         QaGJAzgh9nxMBgOY4AdM8OP//7cIQYAGpjAIt7AJFgAEcgCA/PADKzAILsAAQBAHDFiBFliBcRAEp3AK | ||||
|         ArAJHrgJoGABB+AH8nCBJniCF/gPgHAAFsANA6IAT8ABTMABHTiCT2AJ2QAE9sAA9mAJRaB8j+IDlrAL | ||||
|         TyAPQdCBHyiCjxBlfVQE3GcCi0cNgmAJJrALmyAEHLALQcAAjyANcbANc+MlRcAAQjAIPPAIB2CFHngA | ||||
|         HCANQNhHX2APTGABOnAiX5ANoaADCiAIOLANb5gpQ3APpiAO1KcDFsABm8ABMigEatBk4//xf3Egg0EA | ||||
|         BScIBRzwBCiYiQzIA7rgB6YgDcnAD4FwfYpoAfxXBJqYiqmIAk/ABEwgDj9ggjxgD6GAiqpogkWgCKag | ||||
|         CJTIDzkgh4oYCkxgD+Bwi8Z4gtsgDmjABCZQjBcID0ygCFVwjAAIBTcwiLGAa/zAA9nABKHAAaEQCk+Q | ||||
|         A9RYjhUYCNWwjAkQCBf4BeSABrFwjChQBDdgCNUwBuQIgBMQjuDIAQTgA+YYkACIjmiABoYwAVeHgT0A | ||||
|         C62QikgwDmNADvY4BiRQgWMAjqHQA4YwBgLZkf8HA4oQCqWABuTwAbEIgDxwA6WgCChwgl8gCWOgCIYA | ||||
|         BiU5jRX4AWD/0AOhgAawQIEe6ZEoMAEBgAYRUAoBIAUyAA5fwA9DUA2lgAUUAIA+8AOS8AFJQA5sAAaw | ||||
|         IAWzcIEUMAFggAY9UAoJIAk/eZb8AAPWkAA9EAGf0ANsAAk3MAapUAo9IAUfYA2pAAmwkJNaeQPwcJIW | ||||
|         mANY0AO4gAs9cAMzgJaM2Qq6kAQJAAalEAGUeZilYJc9AAZgEAAPYA2zsJgn2AUPgAuXyQYT0JKMmZo8 | ||||
|         8ANd4A0TIAWpkApJ8ADqEAGmOQOoiYKtYA36MJm4AAldkJrCKYtMmQS1GQBY0AVL2Y4wIJS4QJn6MAH5 | ||||
|         OJzUaYEoYA0V8AkRoA8PMAEyIAnjMA6SViADE/AA+qAO2lkBSWCW1dmeFygDCYCen6AOFaAP9nmebqmd | ||||
|         AZAEXRCV7vmfFZgD32CetUmZlKkO+rCf39CQANqg1gkDXSAD3vAN3iADXQAD0+mgtxgQADs= | ||||
| </value> | ||||
|   </data> | ||||
| </root> | ||||
| @ -132,6 +132,7 @@ | ||||
|     <Compile Include="options\OptionsSoundsPanel.Designer.cs"> | ||||
|       <DependentUpon>OptionsSoundsPanel.cs</DependentUpon> | ||||
|     </Compile> | ||||
|     <Compile Include="UserActivityHook.cs" /> | ||||
|     <EmbeddedResource Include="options\About.resx"> | ||||
|       <SubType>Designer</SubType> | ||||
|       <DependentUpon>About.cs</DependentUpon> | ||||
| @ -164,4 +165,4 @@ | ||||
|     <PostBuildEvent> | ||||
|     </PostBuildEvent> | ||||
|   </PropertyGroup> | ||||
| </Project> | ||||
| </Project> | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user