mirror of
https://github.com/PowerShell/Win32-OpenSSH.git
synced 2025-07-23 14:04:59 +02:00
Improved SSH client interactive mode and fixed control-c to work
Console API is now used for interactive tty mode. Thus ssh.exe client can now pass each character to remote side as one types so that programs like more works correctly. Control-c now will stop the remote program instead of exiting the ssh.exe.
This commit is contained in:
parent
1c258ec0ae
commit
d4c8ef9ac5
@ -1685,6 +1685,10 @@ channel_handle_rfd(Channel *c, fd_set *readset, fd_set *writeset)
|
||||
if (c->rfd != -1 && (force || FD_ISSET(c->rfd, readset))) {
|
||||
errno = 0;
|
||||
len = read(c->rfd, buf, sizeof(buf));
|
||||
#ifdef WIN32_FIXME
|
||||
if (len == 0)
|
||||
return 1; // in Win32 console read, there may be no data, but is ok
|
||||
#endif
|
||||
if (len < 0 && (errno == EINTR ||
|
||||
((errno == EAGAIN || errno == EWOULDBLOCK) && !force)))
|
||||
return 1;
|
||||
@ -2395,9 +2399,7 @@ channel_output_poll(void)
|
||||
}
|
||||
}
|
||||
}
|
||||
#ifdef WIN32_FIXME
|
||||
int lftocrlf = 0;
|
||||
#endif
|
||||
|
||||
/* -- protocol input */
|
||||
|
||||
/* ARGSUSED */
|
||||
|
14
clientloop.c
14
clientloop.c
@ -1348,14 +1348,14 @@ process_escapes(Channel *c, Buffer *bin, Buffer *bout, Buffer *berr,
|
||||
* and append it to the buffer.
|
||||
*/
|
||||
last_was_cr = (ch == '\r' || ch == '\n');
|
||||
#ifdef WIN32_FIXME
|
||||
extern int lftocrlf ; // defined in channels.c file's channel_input_data() function for now
|
||||
if ( (lftocrlf == 1) && ( ch == '\n') ) {
|
||||
//#ifdef WIN32_FIXME
|
||||
//extern int lftocrlf ; // defined in channels.c file's channel_input_data() function for now
|
||||
//if ( (lftocrlf == 1) && ( ch == '\n') ) {
|
||||
// add a \r before \n if sshd server sent us ESC[20h during initial tty mode setting
|
||||
buffer_put_char(bin, '\r');
|
||||
bytes++;
|
||||
}
|
||||
#endif
|
||||
//buffer_put_char(bin, '\r');
|
||||
//bytes++;
|
||||
//}
|
||||
//#endif
|
||||
buffer_put_char(bin, ch);
|
||||
bytes++;
|
||||
}
|
||||
|
@ -19,7 +19,8 @@ LDFLAGS=-L. @LDFLAGS@ -L/lib/win32api
|
||||
|
||||
WIN32COMPATFILES = daemon.o gettimeofday.o homedirhelp.o pwd.o sfds.o \
|
||||
socket.o startupneeds.o strcasecmp.o syslog.o lsalogon.o lsastring.o \
|
||||
stringhelp.o deskright.o win32auth.o kerberos.o cng_cipher.o ansiprsr.o console.o tnnet.o conio.o
|
||||
stringhelp.o deskright.o win32auth.o kerberos.o cng_cipher.o ansiprsr.o \
|
||||
console.o tnnet.o conio.o tncon.o
|
||||
|
||||
WIN32COMPATLIB=@LIBWIN32COMPAT@
|
||||
|
||||
|
@ -51,7 +51,7 @@
|
||||
// items used from other modules
|
||||
int NetWriteString(char* pszString, size_t cbString);
|
||||
TelParams Parameters;
|
||||
extern int lftocrlf;
|
||||
int lftocrlf = 0;
|
||||
|
||||
extern int ScreenX;
|
||||
extern int ScreenY;
|
||||
|
@ -55,11 +55,28 @@ unsigned char * ParseVT52(unsigned char * pszBuffer, unsigned char * pszBufferEn
|
||||
|
||||
typedef struct _TelParams
|
||||
{
|
||||
int fLogging;
|
||||
FILE *fplogfile;
|
||||
|
||||
char *pInputFile;
|
||||
|
||||
char * szDebugInputFile;
|
||||
BOOL fDebugWait;
|
||||
|
||||
int timeOut;
|
||||
int fLocalEcho;
|
||||
int fTreatLFasCRLF;
|
||||
int fSendCROnly;
|
||||
int nReceiveCRLF;
|
||||
//_crlftype nReceiveCRLF;
|
||||
char sleepChar;
|
||||
char menuChar;
|
||||
|
||||
SOCKET Socket;
|
||||
BOOL bVT100Mode;
|
||||
|
||||
char *pAltKey;
|
||||
|
||||
} TelParams;
|
||||
|
||||
#endif
|
@ -54,6 +54,7 @@ extern void debug3(const char *fmt,...);
|
||||
extern void error(const char *fmt,...);
|
||||
extern void fatal(const char *fmt,...);
|
||||
|
||||
int glob_itissshclient = 0; // ssh client turns it to 1
|
||||
static int winsock_initialized = 0;
|
||||
|
||||
extern int logfd;
|
||||
@ -1545,7 +1546,26 @@ int socketpair(int socks[2])
|
||||
return SOCKET_ERROR;
|
||||
}
|
||||
|
||||
int DataAvailable ( HANDLE h )
|
||||
{
|
||||
INPUT_RECORD irec = {0};
|
||||
|
||||
DWORD events_read = 0;
|
||||
|
||||
int ret = PeekConsoleInput (h, &irec, 1, &events_read);
|
||||
|
||||
if (!ret)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (events_read) // && irec.EventType == KEY_EVENT)
|
||||
{
|
||||
return events_read ;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
int peekConsoleRead(int sfd)
|
||||
{
|
||||
DWORD sleep_time = 0;
|
||||
@ -2391,8 +2411,9 @@ int WSHELPread(int sfd, char *dst, unsigned int max)
|
||||
SOCKET sock;
|
||||
|
||||
int ret = -1;
|
||||
int sfd_type = get_sfd_type(sfd);
|
||||
|
||||
switch(get_sfd_type(sfd))
|
||||
switch (sfd_type)
|
||||
{
|
||||
case SFD_TYPE_SOCKET:
|
||||
{
|
||||
@ -2450,8 +2471,9 @@ int WSHELPread(int sfd, char *dst, unsigned int max)
|
||||
|
||||
case SFD_TYPE_FD:
|
||||
case SFD_TYPE_PIPE:
|
||||
case SFD_TYPE_CONSOLE:
|
||||
//case SFD_TYPE_CONSOLE:
|
||||
{
|
||||
|
||||
ret = _read(sfd_to_fd(sfd), dst, max);
|
||||
|
||||
if (FD_ISSET(sfd_to_fd(sfd), &debug_sfds))
|
||||
@ -2470,6 +2492,25 @@ int WSHELPread(int sfd, char *dst, unsigned int max)
|
||||
sfd, GetLastError());
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
case SFD_TYPE_CONSOLE:
|
||||
{
|
||||
//if (sfd_type == SFD_TYPE_CONSOLE) {
|
||||
// we could be send here due to ctrl-c input, so no data to read
|
||||
//if ( DataAvailable (sfd_to_handle(sfd)) <=0 )
|
||||
//return 1; // no data to read
|
||||
//}
|
||||
ret = ReadConsoleForTermEmul( sfd_to_handle(sfd), dst, max);
|
||||
|
||||
if (ret < 0)
|
||||
{
|
||||
error("read from pipe/console sfd [%d] failed with error code [%d]",
|
||||
sfd, GetLastError());
|
||||
}
|
||||
if (ret == 0)
|
||||
return 0; //1;
|
||||
|
||||
break;
|
||||
}
|
||||
case 99:
|
||||
@ -2519,7 +2560,11 @@ int WSHELPwrite(int sfd, const char *buf, unsigned int max)
|
||||
|
||||
int ret = -1;
|
||||
|
||||
switch(get_sfd_type(sfd))
|
||||
int sfd_type = get_sfd_type(sfd);
|
||||
if ( (glob_itissshclient) && ( sfd_type == SFD_TYPE_CONSOLE ) )
|
||||
sfd_type = SFD_TYPE_PIPE ; // client write type uses _write() in place ofn console insertion
|
||||
|
||||
switch(sfd_type)
|
||||
{
|
||||
case SFD_TYPE_SOCKET:
|
||||
{
|
||||
|
762
contrib/win32/win32compat/tncon.c
Normal file
762
contrib/win32/win32compat/tncon.c
Normal file
@ -0,0 +1,762 @@
|
||||
/*
|
||||
* 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->fSendCROnly)
|
||||
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 ;
|
||||
}
|
||||
|
||||
|
4
ssh.c
4
ssh.c
@ -1530,7 +1530,9 @@ main(int ac, char **av)
|
||||
#ifdef WIN32_FIXME
|
||||
if (tty_flag) {
|
||||
//AllocConsole();
|
||||
ConInit( STD_OUTPUT_HANDLE, TRUE );
|
||||
ConInputInitParams(); // init the Console input side with global parameters
|
||||
HANDLE hInput = GetStdHandle(STD_INPUT_HANDLE);
|
||||
ConInit( STD_OUTPUT_HANDLE, TRUE ); //init the output console surface for us to write
|
||||
}
|
||||
#endif
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user