mirror of
				https://github.com/PowerShell/Win32-OpenSSH.git
				synced 2025-10-31 03:34:16 +01:00 
			
		
		
		
	Will work with Tectia server 6.3.6 and all Tectia ssh servers. Tested with latest Tectia ssh server 6.4.12
		
			
				
	
	
		
			763 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			763 lines
		
	
	
		
			32 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| /*
 | |
|  * Author: Microsoft Corp.
 | |
|  *
 | |
|  * Copyright (c) 2015 Microsoft Corp.
 | |
|  * All rights reserved
 | |
|  *
 | |
|  * Microsoft openssh win32 port
 | |
|  *
 | |
|  * Redistribution and use in source and binary forms, with or without
 | |
|  * modification, are permitted provided that the following conditions
 | |
|  * are met:
 | |
|  *
 | |
|  * 1. Redistributions of source code must retain the above copyright
 | |
|  * notice, this list of conditions and the following disclaimer.
 | |
|  * 2. Redistributions in binary form must reproduce the above copyright
 | |
|  * notice, this list of conditions and the following disclaimer in the
 | |
|  * documentation and/or other materials provided with the distribution.
 | |
|  *
 | |
|  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
 | |
|  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
 | |
|  * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
 | |
|  * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
 | |
|  * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
 | |
|  * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
 | |
|  * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
 | |
|  * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
 | |
|  * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
 | |
|  * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 | |
|  */
 | |
| /* tncon.c
 | |
|  *
 | |
|  * Console reading calls for building an emulator over Windows Console. MS win32 port of ssh.exe client uses it.
 | |
|  *
 | |
| */
 | |
| #include <stdlib.h>
 | |
| #include <stdio.h>
 | |
| #include <ctype.h>
 | |
| #include <string.h>
 | |
| 
 | |
| #include <winsock2.h>
 | |
| #include <windows.h>
 | |
| 
 | |
| #include "ansiprsr.h"
 | |
| #include "tncon.h"
 | |
| #include "tnnet.h"
 | |
| 
 | |
| extern bool gbVTAppMode;
 | |
| 
 | |
| char *glob_out = NULL ;
 | |
| int   glob_outlen = 0;
 | |
| int	  glob_space = 0;
 | |
| 
 | |
| // For our case, in NetWriteString2(), we do not use socket, but write the out going data to
 | |
| // a global buffer setup by ReadConsoleForTermEmul() function below
 | |
| int NetWriteString2(SOCKET sock, char* source, size_t len, int options)
 | |
| {
 | |
| 	while ( len > 0 ) {
 | |
| 		//printf("[%c]", *source);
 | |
| 		if (glob_outlen >= glob_space)
 | |
| 			return glob_outlen; // no more room to copy, this much got done
 | |
| 		*glob_out++ = *source++ ;
 | |
| 		len--;
 | |
| 		glob_outlen++;
 | |
| 	}
 | |
| 
 | |
| 	return glob_outlen;
 | |
| }
 | |
| 
 | |
| TelParams Parameters;
 | |
| TelParams* pParams = &Parameters ;
 | |
| 
 | |
| void ConInputInitParams(void)
 | |
| {
 | |
| 	memset( &Parameters, '\0', sizeof( TelParams ) );
 | |
| 
 | |
| 	// set default values
 | |
| 	Parameters.szDebugInputFile = NULL;
 | |
| 	Parameters.fDebugWait= FALSE;
 | |
| 	Parameters.nReceiveCRLF = ENUM_LF;
 | |
| 	//Parameters.fSendCROnly = TRUE; //FALSE;
 | |
| 	Parameters.sleepChar = '`';
 | |
| 	Parameters.menuChar = '\035'; // CTRL-]
 | |
| 	Parameters.pAltKey = "\x01";		// default 
 | |
| 	
 | |
| 	HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
 | |
| 	DWORD	dwMode;
 | |
| 	GetConsoleMode(hInput, &dwMode);
 | |
| 	SetConsoleMode(hInput, (dwMode & ~(ENABLE_LINE_INPUT |
 | |
| 							ENABLE_ECHO_INPUT | ENABLE_PROCESSED_INPUT | ENABLE_MOUSE_INPUT)) | ENABLE_WINDOW_INPUT );
 | |
| 
 | |
| 	extern int glob_itissshclient;
 | |
| 	glob_itissshclient = 1; // tell our contrib/win32/win32compat/socket.c code it is for ssh client side
 | |
| 
 | |
| }
 | |
| 
 | |
| unsigned char  NAWSSTR[] = { "\xff\xfa\x1f\x00\x00\x00\x00\xff\xf0"};
 | |
| 
 | |
| extern int ScreenY;
 | |
| extern int ScreenX;
 | |
| 
 | |
| extern int ScrollTop;
 | |
| extern int ScrollBottom;
 | |
| 
 | |
| int DataAvailableCount ( HANDLE h )
 | |
| {
 | |
|     INPUT_RECORD irec[64];
 | |
| 
 | |
|     DWORD events_read = 0;
 | |
| 
 | |
|     int ret = PeekConsoleInput (h, &irec, 64, &events_read);
 | |
| 
 | |
|     if (!ret)
 | |
|     {
 | |
|       return 0;
 | |
|     }
 | |
| 
 | |
|     if (events_read) // && irec.EventType == KEY_EVENT)
 | |
|     {
 | |
|       return events_read ;
 | |
|     }
 | |
| 
 | |
| 	return 0;
 | |
| }
 | |
| 
 | |
| int ReadConsoleForTermEmul( HANDLE hInput, char *destin, int destinlen)
 | |
| {
 | |
| 	//HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
 | |
| 	HANDLE hHandle[] = {hInput, NULL};
 | |
| 	DWORD nHandle = 1;
 | |
| 	DWORD	dwInput;
 | |
| 	unsigned char	szResponse[50];
 | |
| 	INPUT_RECORD InputRecord;
 | |
| 	DWORD			dwControlKeyState, rc;
 | |
| 	BOOL			bCapsOn, bShift;
 | |
| 	char		aChar;
 | |
| 	unsigned char	octets[20];
 | |
| 	
 | |
| 	glob_out = destin ;
 | |
| 	glob_space = destinlen ;
 | |
| 	glob_outlen = 0;
 | |
| 	
 | |
| 	int dataavail = DataAvailableCount (hInput) ;
 | |
| 
 | |
| 	while (dataavail > 0)
 | |
| 	{
 | |
| 		if (glob_outlen >= destinlen)
 | |
| 			return glob_outlen ; // user given space is full, so return with whatever we read so far
 | |
| 		
 | |
| 		//rc = WaitForMultipleObjects(nHandle, hHandle, FALSE, INFINITE);
 | |
| 		rc = WAIT_OBJECT_0 ;
 | |
| 		switch (rc) 
 | |
| 		{
 | |
| 			case WAIT_OBJECT_0: 
 | |
| 			{
 | |
| 			ReadConsoleInputW(hInput, &InputRecord, 1, &dwInput);
 | |
| 			dataavail--;
 | |
| 			switch (InputRecord.EventType) 
 | |
| 			{
 | |
| 			case WINDOW_BUFFER_SIZE_EVENT:
 | |
| 				memcpy(szResponse,NAWSSTR,9);
 | |
| 				szResponse[4] = ConScreenSizeX();
 | |
| 				szResponse[6] = ConWindowSizeY();	// visible window size - not buffer
 | |
| 				ScreenX = ConScreenSizeX();
 | |
| 				ScreenY = ConWindowSizeY();	// visible window size - not buffer
 | |
| 				//NetWriteString2(pParams->Socket,(char *) szResponse, 9,0); // it needs to got out to remote sshd
 | |
| 				break;
 | |
| 
 | |
| 			case FOCUS_EVENT:
 | |
| 			case MENU_EVENT:
 | |
| 				break;
 | |
| 
 | |
| 			case KEY_EVENT:
 | |
| 				// Remove all of the keys we don't care about
 | |
| 				bCapsOn = (InputRecord.Event.KeyEvent.dwControlKeyState & CAPSLOCK_ON);
 | |
| 				bShift = (InputRecord.Event.KeyEvent.dwControlKeyState & SHIFT_PRESSED);
 | |
| 				dwControlKeyState = InputRecord.Event.KeyEvent.dwControlKeyState & ~(CAPSLOCK_ON | ENHANCED_KEY | NUMLOCK_ON | SCROLLLOCK_ON );
 | |
| 				if (InputRecord.Event.KeyEvent.uChar.UnicodeChar)
 | |
| 				{
 | |
| 					if (InputRecord.Event.KeyEvent.bKeyDown) 
 | |
| 					{
 | |
| 						ConRestoreViewRect();
 | |
| 						int n = WideCharToMultiByte(GetConsoleCP(),0,&(InputRecord.Event.KeyEvent.uChar.UnicodeChar),1,(LPSTR)octets,20,NULL,NULL);
 | |
| 
 | |
| 						if (pParams->fLocalEcho){
 | |
| //							ConWriteCharW( InputRecord.Event.KeyEvent.uChar.UnicodeChar );
 | |
| 							ConWriteString((char *)octets,n);
 | |
| 						}
 | |
| 						if ((dwControlKeyState == LEFT_ALT_PRESSED) ||
 | |
| 							(dwControlKeyState == RIGHT_ALT_PRESSED))
 | |
| 							NetWriteString2(pParams->Socket, (char *)pParams->pAltKey, 1, 0);
 | |
| 						
 | |
| 						switch (InputRecord.Event.KeyEvent.uChar.UnicodeChar)
 | |
| 						{
 | |
| 						case 0xd:
 | |
| 							if (pParams->nReceiveCRLF == ENUM_LF)
 | |
| 								NetWriteString2(pParams->Socket, "\r", 1, 0);
 | |
| 							else
 | |
| 								NetWriteString2(pParams->Socket, "\r\n", 2, 0);
 | |
| 							break;
 | |
| 							
 | |
| 						case VK_ESCAPE:
 | |
| 								NetWriteString2(pParams->Socket, (char *)ESCAPE_KEY, 1, 0);
 | |
| 							break;
 | |
| 						
 | |
| 						default:
 | |
| 								NetWriteString2(pParams->Socket, (char *)octets, n, 0);									
 | |
| 							break;
 | |
| 						}
 | |
| 					}
 | |
| 				}
 | |
| 				else
 | |
| 				{
 | |
| 					//Non Unicode key
 | |
| 					if (InputRecord.Event.KeyEvent.bKeyDown)
 | |
| 					{
 | |
| 
 | |
| 						switch(InputRecord.Event.KeyEvent.wVirtualKeyCode)
 | |
| 						{
 | |
| 						case VK_UP:
 | |
| 							NetWriteString2(pParams->Socket, (char *)(gbVTAppMode?APP_UP_ARROW:UP_ARROW), 3, 0);
 | |
| 							break;
 | |
| 						case VK_DOWN:
 | |
| 							NetWriteString2(pParams->Socket, (char *)(gbVTAppMode?APP_DOWN_ARROW:DOWN_ARROW), 3, 0);
 | |
| 							break;
 | |
| 						case VK_RIGHT:
 | |
| 							NetWriteString2(pParams->Socket, (char *)(gbVTAppMode?APP_RIGHT_ARROW:RIGHT_ARROW), 3, 0);
 | |
| 							break;
 | |
| 						case VK_LEFT:
 | |
| 							NetWriteString2(pParams->Socket, (char *)(gbVTAppMode?APP_LEFT_ARROW:LEFT_ARROW), 3, 0);
 | |
| 							break;
 | |
| 						case VK_F1:
 | |
| 							if ( dwControlKeyState == 0 )
 | |
| 							{
 | |
| 								if (pParams->bVT100Mode)
 | |
| 									NetWriteString2(pParams->Socket, (char *)VT100_PF1_KEY, strlen(VT100_PF1_KEY), 0);
 | |
| 								else
 | |
| 									NetWriteString2(pParams->Socket, (char *)PF1_KEY, strlen(PF1_KEY), 0);
 | |
| 							}
 | |
| 							else if ( dwControlKeyState == SHIFT_PRESSED )
 | |
| 								NetWriteString2(pParams->Socket, (char *)SHIFT_PF1_KEY, strlen(SHIFT_PF1_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_CTRL_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_CTRL_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)CTRL_PF1_KEY, strlen(CTRL_PF1_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_ALT_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_ALT_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)ALT_PF1_KEY, strlen(ALT_PF1_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) )
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF1_KEY, strlen(SHIFT_ALT_CTRL_PF1_KEY), 0);
 | |
| 							else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) 
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF1_KEY, strlen(ALT_CTRL_PF1_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 										(dwControlKeyState & LEFT_ALT_PRESSED) ))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF1_KEY, strlen(SHIFT_ALT_PF1_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF1_KEY, strlen(SHIFT_CTRL_PF1_KEY), 0);
 | |
| 							break;
 | |
| 						case VK_F2:
 | |
| 							if ( dwControlKeyState == 0 )
 | |
| 							{
 | |
| 								if (pParams->bVT100Mode)
 | |
| 									NetWriteString2(pParams->Socket, (char *)VT100_PF2_KEY, strlen(VT100_PF2_KEY), 0);
 | |
| 								else
 | |
| 									NetWriteString2(pParams->Socket, (char *)PF2_KEY, strlen(PF2_KEY), 0);
 | |
| 							}
 | |
| 							else if ( dwControlKeyState == SHIFT_PRESSED )
 | |
| 								NetWriteString2(pParams->Socket, (char *)SHIFT_PF2_KEY, strlen(SHIFT_PF2_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_CTRL_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_CTRL_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)CTRL_PF2_KEY, strlen(CTRL_PF2_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_ALT_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_ALT_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)ALT_PF2_KEY, strlen(ALT_PF2_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) )
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF2_KEY, strlen(SHIFT_ALT_CTRL_PF2_KEY), 0);
 | |
| 							else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) 
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF2_KEY, strlen(ALT_CTRL_PF2_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 										(dwControlKeyState & LEFT_ALT_PRESSED) ))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF2_KEY, strlen(SHIFT_ALT_PF2_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF2_KEY, strlen(SHIFT_CTRL_PF2_KEY), 0);
 | |
| 							break;
 | |
| 						case VK_F3:
 | |
| 							if ( dwControlKeyState == 0 )
 | |
| 							{
 | |
| 								if (pParams->bVT100Mode)
 | |
| 									NetWriteString2(pParams->Socket, (char *)VT100_PF3_KEY, strlen(VT100_PF3_KEY), 0);
 | |
| 								else
 | |
| 									NetWriteString2(pParams->Socket, (char *)PF3_KEY, strlen(PF3_KEY), 0);
 | |
| 							}
 | |
| 							else if ( dwControlKeyState == SHIFT_PRESSED )
 | |
| 								NetWriteString2(pParams->Socket, (char *)SHIFT_PF3_KEY, strlen(SHIFT_PF3_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_CTRL_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_CTRL_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)CTRL_PF3_KEY, strlen(CTRL_PF3_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_ALT_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_ALT_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)ALT_PF3_KEY, strlen(ALT_PF3_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) )
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF3_KEY, strlen(SHIFT_ALT_CTRL_PF3_KEY), 0);
 | |
| 							else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) 
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF3_KEY, strlen(ALT_CTRL_PF3_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 										(dwControlKeyState & LEFT_ALT_PRESSED) ))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF3_KEY, strlen(SHIFT_ALT_PF3_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF3_KEY, strlen(SHIFT_CTRL_PF3_KEY), 0);
 | |
| 							break;
 | |
| 						case VK_F4:
 | |
| 							if ( dwControlKeyState == 0 )
 | |
| 							{
 | |
| 								if (pParams->bVT100Mode)
 | |
| 									NetWriteString2(pParams->Socket, (char *)VT100_PF4_KEY, strlen(VT100_PF4_KEY), 0);
 | |
| 								else
 | |
| 									NetWriteString2(pParams->Socket, (char *)PF4_KEY, strlen(PF4_KEY), 0);
 | |
| 							}
 | |
| 							else if ( dwControlKeyState == SHIFT_PRESSED )
 | |
| 								NetWriteString2(pParams->Socket, (char *)SHIFT_PF4_KEY, strlen(SHIFT_PF4_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_CTRL_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_CTRL_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)CTRL_PF4_KEY, strlen(CTRL_PF4_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_ALT_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_ALT_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)ALT_PF4_KEY, strlen(ALT_PF4_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) )
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF4_KEY, strlen(SHIFT_ALT_CTRL_PF4_KEY), 0);
 | |
| 							else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) 
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF4_KEY, strlen(ALT_CTRL_PF4_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 										(dwControlKeyState & LEFT_ALT_PRESSED) ))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF4_KEY, strlen(SHIFT_ALT_PF4_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF4_KEY, strlen(SHIFT_CTRL_PF4_KEY), 0);
 | |
| 							break;
 | |
| 						case VK_F5:
 | |
| 							if ( dwControlKeyState == 0 )
 | |
| 							{
 | |
| 								NetWriteString2(pParams->Socket, (char *)PF5_KEY, strlen(PF5_KEY), 0);
 | |
| 							}
 | |
| 							else if ( dwControlKeyState == SHIFT_PRESSED )
 | |
| 								NetWriteString2(pParams->Socket, (char *)SHIFT_PF5_KEY, strlen(SHIFT_PF5_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_CTRL_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_CTRL_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)CTRL_PF5_KEY, strlen(CTRL_PF5_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_ALT_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_ALT_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)ALT_PF5_KEY, strlen(ALT_PF5_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) )
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF5_KEY, strlen(SHIFT_ALT_CTRL_PF5_KEY), 0);
 | |
| 							else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) 
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF5_KEY, strlen(ALT_CTRL_PF5_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 										(dwControlKeyState & LEFT_ALT_PRESSED) ))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF5_KEY, strlen(SHIFT_ALT_PF5_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF5_KEY, strlen(SHIFT_CTRL_PF5_KEY), 0);
 | |
| 							break;
 | |
| 						case VK_F6:
 | |
| 							if ( dwControlKeyState == 0 )
 | |
| 								NetWriteString2(pParams->Socket, (char *)PF6_KEY, strlen(PF6_KEY), 0);
 | |
| 							else if ( dwControlKeyState == SHIFT_PRESSED )
 | |
| 								NetWriteString2(pParams->Socket, (char *)SHIFT_PF6_KEY, strlen(SHIFT_PF6_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_CTRL_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_CTRL_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)CTRL_PF6_KEY, strlen(CTRL_PF6_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_ALT_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_ALT_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)ALT_PF6_KEY, strlen(ALT_PF6_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) )
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF6_KEY, strlen(SHIFT_ALT_CTRL_PF6_KEY), 0);
 | |
| 							else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) 
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF6_KEY, strlen(ALT_CTRL_PF6_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 										(dwControlKeyState & LEFT_ALT_PRESSED) ))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF6_KEY, strlen(SHIFT_ALT_PF6_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF6_KEY, strlen(SHIFT_CTRL_PF6_KEY), 0);
 | |
| 							break;
 | |
| 						case VK_F7:
 | |
| 							if ( dwControlKeyState == 0 )
 | |
| 								NetWriteString2(pParams->Socket, (char *)PF7_KEY, strlen(PF7_KEY), 0);
 | |
| 							else if ( dwControlKeyState == SHIFT_PRESSED )
 | |
| 								NetWriteString2(pParams->Socket, (char *)SHIFT_PF7_KEY, strlen(SHIFT_PF7_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_CTRL_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_CTRL_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)CTRL_PF7_KEY, strlen(CTRL_PF7_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_ALT_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_ALT_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)ALT_PF7_KEY, strlen(ALT_PF7_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) )
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF7_KEY, strlen(SHIFT_ALT_CTRL_PF7_KEY), 0);
 | |
| 							else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) 
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF7_KEY, strlen(ALT_CTRL_PF7_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 										(dwControlKeyState & LEFT_ALT_PRESSED) ))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF7_KEY, strlen(SHIFT_ALT_PF7_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF7_KEY, strlen(SHIFT_CTRL_PF7_KEY), 0);
 | |
| 							break;
 | |
| 						case VK_F8:
 | |
| 							if ( dwControlKeyState == 0 )
 | |
| 								NetWriteString2(pParams->Socket, (char *)PF8_KEY, strlen(PF8_KEY), 0);
 | |
| 							else if ( dwControlKeyState == SHIFT_PRESSED )
 | |
| 								NetWriteString2(pParams->Socket, (char *)SHIFT_PF8_KEY, strlen(SHIFT_PF8_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_CTRL_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_CTRL_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)CTRL_PF8_KEY, strlen(CTRL_PF8_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_ALT_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_ALT_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)ALT_PF8_KEY, strlen(ALT_PF8_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) )
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF8_KEY, strlen(SHIFT_ALT_CTRL_PF8_KEY), 0);
 | |
| 							else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) 
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF8_KEY, strlen(ALT_CTRL_PF8_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 										(dwControlKeyState & LEFT_ALT_PRESSED) ))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF8_KEY, strlen(SHIFT_ALT_PF8_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF8_KEY, strlen(SHIFT_CTRL_PF8_KEY), 0);
 | |
| 							break;
 | |
| 						case VK_F9:
 | |
| 							if ( dwControlKeyState == 0 )
 | |
| 								NetWriteString2(pParams->Socket, (char *)PF9_KEY, strlen(PF9_KEY), 0);
 | |
| 							else if ( dwControlKeyState == SHIFT_PRESSED )
 | |
| 								NetWriteString2(pParams->Socket, (char *)SHIFT_PF9_KEY, strlen(SHIFT_PF9_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_CTRL_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_CTRL_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)CTRL_PF9_KEY, strlen(CTRL_PF9_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_ALT_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_ALT_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)ALT_PF9_KEY, strlen(ALT_PF9_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) )
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF9_KEY, strlen(SHIFT_ALT_CTRL_PF9_KEY), 0);
 | |
| 							else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) 
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF9_KEY, strlen(ALT_CTRL_PF9_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 										(dwControlKeyState & LEFT_ALT_PRESSED) ))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF9_KEY, strlen(SHIFT_ALT_PF9_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF9_KEY, strlen(SHIFT_CTRL_PF9_KEY), 0);
 | |
| 							break;
 | |
| 						case VK_F10:
 | |
| 							if ( dwControlKeyState == 0 )
 | |
| 								NetWriteString2(pParams->Socket, (char *)PF10_KEY, strlen(PF10_KEY), 0);
 | |
| 							else if ( dwControlKeyState == SHIFT_PRESSED )
 | |
| 								NetWriteString2(pParams->Socket, (char *)SHIFT_PF10_KEY, strlen(SHIFT_PF10_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_CTRL_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_CTRL_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)CTRL_PF10_KEY, strlen(CTRL_PF10_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_ALT_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_ALT_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)ALT_PF10_KEY, strlen(ALT_PF10_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) )
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF10_KEY, strlen(SHIFT_ALT_CTRL_PF10_KEY), 0);
 | |
| 							else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) 
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF10_KEY, strlen(ALT_CTRL_PF10_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 										(dwControlKeyState & LEFT_ALT_PRESSED) ))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF10_KEY, strlen(SHIFT_ALT_PF10_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF10_KEY, strlen(SHIFT_CTRL_PF10_KEY), 0);
 | |
| 							break;
 | |
| 						case VK_F11:
 | |
| 							if ( dwControlKeyState == 0 )
 | |
| 								NetWriteString2(pParams->Socket, (char *)PF11_KEY, strlen(PF11_KEY), 0);
 | |
| 							else if ( dwControlKeyState == SHIFT_PRESSED )
 | |
| 								NetWriteString2(pParams->Socket, (char *)SHIFT_PF11_KEY, strlen(SHIFT_PF11_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_CTRL_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_CTRL_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)CTRL_PF11_KEY, strlen(CTRL_PF11_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_ALT_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_ALT_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)ALT_PF11_KEY, strlen(ALT_PF11_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) )
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF11_KEY, strlen(SHIFT_ALT_CTRL_PF11_KEY), 0);
 | |
| 							else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) 
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF11_KEY, strlen(ALT_CTRL_PF11_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 										(dwControlKeyState & LEFT_ALT_PRESSED) ))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF11_KEY, strlen(SHIFT_ALT_PF11_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF11_KEY, strlen(SHIFT_CTRL_PF11_KEY), 0);
 | |
| 							break;
 | |
| 						case VK_F12:
 | |
| 							if ( dwControlKeyState == 0 )
 | |
| 								NetWriteString2(pParams->Socket, (char *)PF12_KEY, strlen(PF12_KEY), 0);
 | |
| 							else if ( dwControlKeyState == SHIFT_PRESSED )
 | |
| 								NetWriteString2(pParams->Socket, (char *)SHIFT_PF12_KEY, strlen(SHIFT_PF12_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_CTRL_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_CTRL_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)CTRL_PF12_KEY, strlen(CTRL_PF12_KEY), 0);
 | |
| 							else if ( dwControlKeyState == LEFT_ALT_PRESSED || 
 | |
| 								 		dwControlKeyState == RIGHT_ALT_PRESSED ) 
 | |
| 								NetWriteString2(pParams->Socket, (char *)ALT_PF12_KEY, strlen(ALT_PF12_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) )
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_CTRL_PF12_KEY, strlen(SHIFT_ALT_CTRL_PF12_KEY), 0);
 | |
| 							else if((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 									(dwControlKeyState & LEFT_ALT_PRESSED) 
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)ALT_CTRL_PF12_KEY, strlen(ALT_CTRL_PF12_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & RIGHT_ALT_PRESSED) ||
 | |
| 										(dwControlKeyState & LEFT_ALT_PRESSED) ))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_ALT_PF12_KEY, strlen(SHIFT_ALT_PF12_KEY), 0);
 | |
| 							else if((dwControlKeyState & SHIFT_PRESSED)
 | |
| 									&&
 | |
| 									((dwControlKeyState & LEFT_CTRL_PRESSED) ||
 | |
| 									(dwControlKeyState & RIGHT_CTRL_PRESSED)))
 | |
| 										NetWriteString2(pParams->Socket, (char *)SHIFT_CTRL_PF12_KEY, strlen(SHIFT_CTRL_PF12_KEY), 0);
 | |
| 							break;
 | |
| 						case VK_PRIOR:
 | |
| #ifdef PHYS_KEY_MAP
 | |
| 							NetWriteString2(pParams->Socket, (char *)REMOVE_KEY,4, 0);
 | |
| #else
 | |
| 							NetWriteString2(pParams->Socket, (char *)PREV_KEY, 4, 0);
 | |
| #endif
 | |
| 							break;
 | |
| 						case VK_NEXT:
 | |
| 							NetWriteString2(pParams->Socket, (char *)NEXT_KEY, 4, 0);
 | |
| 							break;
 | |
| 						case VK_END:
 | |
| #ifdef PHYS_KEY_MAP
 | |
| 							NetWriteString2(pParams->Socket, (char *)PREV_KEY,4, 0);
 | |
| #else
 | |
| 							NetWriteString2(pParams->Socket, (char *)SELECT_KEY, 4, 0);
 | |
| #endif
 | |
| 							break;
 | |
| 							
 | |
| 						case VK_HOME: 
 | |
| #ifdef PHYS_KEY_MAP
 | |
| 							NetWriteString2(pParams->Socket, (char *)INSERT_KEY,4, 0);
 | |
| #else
 | |
| 							NetWriteString2(pParams->Socket, (char *)FIND_KEY, 4, 0);
 | |
| #endif
 | |
| 							break;
 | |
| 						case VK_INSERT:
 | |
| #ifdef PHYS_KEY_MAP
 | |
| 							NetWriteString2(pParams->Socket, (char *)FIND_KEY,4, 0);
 | |
| #else
 | |
| 							NetWriteString2(pParams->Socket, (char *)INSERT_KEY, 4, 0);
 | |
| 
 | |
| #endif
 | |
| 							break;
 | |
| 						case VK_DELETE:
 | |
| #ifdef PHYS_KEY_MAP
 | |
| 							NetWriteString2(pParams->Socket, (char *)SELECT_KEY,4, 0);
 | |
| #else
 | |
| 							NetWriteString2(pParams->Socket, (char *)REMOVE_KEY, 4, 0);
 | |
| #endif
 | |
| 							break;
 | |
| 						case VK_TAB:
 | |
| 							if (dwControlKeyState == SHIFT_PRESSED)
 | |
| 								NetWriteString2(pParams->Socket, (char *)SHIFT_TAB_KEY, 3, 0);
 | |
| 							break;
 | |
| 						case VK_ESCAPE:
 | |
| 							NetWriteString2(pParams->Socket, (char *)ESCAPE_KEY, 1, 0);
 | |
| 							break;
 | |
| 						case VK_SHIFT:
 | |
| 						case VK_CONTROL:
 | |
| 						case VK_CAPITAL:
 | |
| 							// NOP on these
 | |
| 							break;
 | |
| 						default:
 | |
| 							{
 | |
| 							aChar = InputRecord.Event.KeyEvent.uChar.AsciiChar;
 | |
| 							NetWriteString2(pParams->Socket, (char *)&aChar, 1, 0);									
 | |
| 							break;
 | |
| 						}
 | |
| 
 | |
| 
 | |
| 						}
 | |
| 
 | |
| 					}
 | |
| 				}
 | |
| 				break;
 | |
| 			}
 | |
| 			break;
 | |
| 			}
 | |
| 
 | |
| 			default:
 | |
| 			return glob_outlen;
 | |
| 		}
 | |
| 	}
 | |
| 
 | |
| 	return glob_outlen ;
 | |
| }
 | |
| 
 | |
| 
 |