qtewin.cpp

来自「远程桌面登陆软件 用rdesktop 但不基于Xwindows 可基于(nano」· C++ 代码 · 共 2,176 行 · 第 1/5 页

CPP
2,176
字号
        if (Item->Comp)         Line += "1";        else         Line += "0";        Line += (char)10;        WriteString(File, &Line);       		Line = "";        Line += (char)10;        WriteString(File, &Line);      }    }   // File->flush();    File->close();    delete File;  }}/******************************************************************************/void QMyDialog::RemoveClicked(){  int i, j, c;  QMyConnectionItem* Item1;  QMyConnectionItem* Item2;  i = ListBox->currentItem();  if (i >= 0)  {    c = ListBox->count();    for (j = i; j < c - 1; j++)    {      Item1 = ConnectionList[j];      Item2 = ConnectionList[j + 1];      Item1->ServerName = Item2->ServerName;      Item1->UserName = Item2->UserName;      Item1->WidthHeight = Item2->WidthHeight;      Item1->ServerIP = Item2->ServerIP;      Item1->FullScreen = Item2->FullScreen;      Item1->Password = Item2->Password;      Item1->PortNo = Item2->PortNo;      Item1->Color = Item2->Color;      Item1->RDP5Exp = Item2->RDP5Exp;      Item1->RDP5Exp1 = Item2->RDP5Exp1;      Item1->RDP5Exp2 = Item2->RDP5Exp2;      Item1->RDP5Exp3 = Item2->RDP5Exp3;      Item1->RDP5Exp4 = Item2->RDP5Exp4;      Item1->KBD = Item2->KBD;      Item1->Ctrl = Item2->Ctrl;      Item1->OK = Item2->OK;      Item1->Left = Item2->Left;      Item1->Enc = Item2->Enc;      Item1->Comp = Item2->Comp;      Item1->Sound = Item2->Sound;      Item1->Disk = Item2->Disk;      Item1->DiskArg = Item2->DiskArg;      Item1->Console = Item2->Console;      Item1->Cache = Item2->Cache;    }    ListBox->removeItem(i);  }}/******************************************************************************/void QMyDialog::ListBoxChanged(){  int i;  QMyConnectionItem * Item;  char Text[100];  i = ListBox->currentItem();  if (i >= 0 && i < 10)  {    Item = ConnectionList[i];    ServerNameEdit->setText(Item->ServerName);    UserNameEdit->setText(Item->UserName);    PWDEdit->setText(Item->Password);    IPEdit->setText(Item->ServerIP);    WidthHeightBox->setCurrentItem(Item->WidthHeight);    sprintf(Text, "%d", Item->PortNo);    PortNoEdit->setText(Text);    ColorBox->setCurrentItem(Item->Color);    RDP5ExpBox->setCurrentItem(Item->RDP5Exp);    RDP5ExpCheckBox1->setChecked(Item->RDP5Exp1 != 0);    RDP5ExpCheckBox2->setChecked(Item->RDP5Exp2 != 0);    RDP5ExpCheckBox3->setChecked(Item->RDP5Exp3 != 0);    RDP5ExpCheckBox4->setChecked(Item->RDP5Exp4 != 0);    KBDBox->setCurrentItem(Item->KBD);    CacheBox->setCurrentItem(Item->Cache);    CacheChanged(Item->Cache);    FullScreenCheckBox->setChecked(Item->FullScreen != 0);    CtrlCheck->setChecked(Item->Ctrl != 0);    OKCheck->setChecked(Item->OK != 0);    LeftCheck->setChecked(Item->Left != 0);    EncCheck->setChecked(Item->Enc != 0);    CompCheck->setChecked(Item->Comp != 0);    SoundBox->setCurrentItem(Item->Sound);    DiskBox->setCurrentItem(Item->Disk);    DiskEdit->setText(Item->DiskArg);    ConsoleCheck->setChecked(Item->Console != 0);  }}/******************************************************************************/void QMyDialog::ListBoxSelected(int /*index*/){}/******************************************************************************/void GetScanCode(QKeyEvent * e, int * ScanCode, int * code){  int key;  int mod;  int ascii;  key = e->key();  mod = e->state();  ascii = e->ascii();  *ScanCode = 0;  *code = mod; // 8 shift, 16 control, 32 alt  //gkey=1(us),0(jp)  //printf("key 0x%X mod %d ascii %d \n", key,mod,ascii);  switch (key)  {      case 0x1000: *ScanCode = 0x01; break; // esc      case 0x1001: *ScanCode = 0x0f; break; // tab      case 0x1003: *ScanCode = 0x0e; break; // backspace      case 0x1004: *ScanCode = 0x1c; break; // return      case 0x1007: *ScanCode = 0xd3; break; // delete      case 0x1010: *ScanCode = 0xc7; break; // home (Fn+Hidari)      case 0x1011: *ScanCode = 0xcf; break; // end (Fn+Migi)      case 0x1012: *ScanCode = 0xcb; break; // left arrow      case 0x1013: *ScanCode = 0xc8; break; // up arrow      case 0x1014: *ScanCode = 0xcd; break; // right arrow      case 0x1015: *ScanCode = 0xd0; break; // down arrow      case 0x1016: *ScanCode = 0xc9; break; // page up (Prior(Fn+Ue))      case 0x1017: *ScanCode = 0xd1; break; // page down (Next(Fn+Shita))      case 0x1021: // Ctrl		   if (g_Ctrl == 1 ) { *ScanCode = 0x1d; break; }		   else { return; }      case 0x1024: *ScanCode = 0x3a; break; // Key_CapsLock      case 0x1039:     		if (g_fullscreen){ *ScanCode = 60000; break; }// Address (Mouse Toggle)		else { return; }      case 0x103a: // F11(MenuKey)		 if (g_Ctrl == 1 ){ return; }		 else { *ScanCode = 0x38; break; }// Alt      case 0x103b: *ScanCode = 60004; break; //F12 Home      case 0x1044: *ScanCode = 0x29; break; // zenkaku-hankaku      case 0x1049: //F26(Kana/Hira)		 if (g_Ctrl == 1 ){ *ScanCode = 0x38; break; }// Alt		 else { *ScanCode = 0x1d; break; }// Ctrl      case 0x1050: *ScanCode = 60001; break; //F33 OK      case 0x200f: *ScanCode = 0x3b; break; // F1 Fn+1      case 0x2010: *ScanCode = 0x3c; break; // F2 Fn+2      case 0x2012: *ScanCode = 0x3d; break; // F3 Fn+3      case 0x2011: *ScanCode = 0x3e; break; // F4 Fn+4      case 0x201b: *ScanCode = 0x3f; break; // F5 Fn+5      case 0x200a: *ScanCode = 0x40; break; // F6 Fn+6      case 0x200b: *ScanCode = 0x41; break; // F7 Fn+7      case 0x200c: *ScanCode = 0x42; break; // F8 Fn+8      case 0x2007: *ScanCode = 0x43; break; // F9 Fn+9      case 0x2008: *ScanCode = 0x44; break; // F10 Fn+0      case 0x2015: *ScanCode = 0x57; break; // F11 Fn+o      case 0x2016: *ScanCode = 0x58; break; // F12 Fn+p       case 0x2014: *ScanCode = 60002; break; // Fn+q      case 0x2017: *ScanCode = 60003; break; // Fn+a   //test      //case 0x201a: printf("------test-----------------\n"); break; // Fn+m      case 0x2022:		 if (g_key == 1) { *ScanCode = 0x2b; break; } //Key_Backslash(Eng)		 else { *ScanCode = 0x7d; break; } //Key_Backslash(JP)      case 0x20: *ScanCode = 0x39; break; //Key_Space      case 0x2a:		 if (g_key == 1) { *ScanCode = 0x09; *code = 8; break; } //Key_Asterisk(Eng)		 else { *ScanCode = 0x28; *code = 8; break; } //Key_Asterisk(JP)      case 0x2b:		 if (g_key == 1) { *ScanCode = 0x0d; *code = 8; break; } //Key_Plus(Eng)		 else { *ScanCode = 0x27; *code = 8; break; } //Key_Plus(JP)      case 0x2c: 		 if ( (*code & 8) == 8 ) { *ScanCode = 0x35; *code = 0; break; } //Key_Slash		 else { *ScanCode = 0x33; break; }//Key_Comma      case 0x2d: *ScanCode = 0x0c; break; //Key_Minus      case 0x2e: 		 if ( (*code & 8) == 8 ) { *ScanCode = 0x35; break; } //Key_Question		 else { *ScanCode = 0x34; break; }//Key_Period      case 0x2f: *ScanCode = 0x35; *code = 0; break; //Key_Slash      case 0x30: 		 if (g_key == 1 && (*code & 8) == 8 ) { *ScanCode = 0x29; break; } //key0(Eng)		 else if (g_key == 0 && (*code & 8) == 8 ) { *ScanCode = 0x0d; break; } //key0(JP)		 else { *ScanCode = 0x0b; break; }//key0       case 0x31: *ScanCode = 0x02; break; //key1      case 0x32:		 if (g_key == 1 && (*code & 8) == 8 ) { *ScanCode = 0x28; break; } //key2 (Eng)		 else { *ScanCode = 0x03; break; }//key2 (JP)      case 0x33: *ScanCode = 0x04; break; //key3      case 0x34: *ScanCode = 0x05; break; //key4      case 0x35: *ScanCode = 0x06; break; //key5      case 0x36: 		 if (g_key == 1 && (*code & 8) == 8 ) { *ScanCode = 0x08; break; } //key6(Eng)		 else { *ScanCode = 0x07; break; } //key6(JP)      case 0x37:		 if (g_key == 1 && (*code & 8) == 8 ) { *ScanCode = 0x28; *code = 0; break; } //key7(Eng)		 else { *ScanCode = 0x08; break; } //key7(JP)      case 0x38:		 if (g_key == 1 && (*code & 8) == 8 ) { *ScanCode = 0x0a; break; } //Key8(Eng)		 else { *ScanCode = 0x09; break; } //key8(JP)      case 0x39: 		 if (g_key == 1 && (*code & 8) == 8 ) { *ScanCode = 0x0b; break; } //key9(Eng)		 else { *ScanCode = 0x0a; break; } //key9(JP)      case 0x3a:		 if (g_key == 1) { *ScanCode = 0x27; *code = 8; break; } //Key_Colon(Eng)		 else { *ScanCode = 0x28; break; } //Key_Colon(JP)      case 0x3b: *ScanCode = 0x27; break; //Key_Semicolon      case 0x3c: *ScanCode = 0x33; *code = 8; break; // Key_Less(<)      case 0x3d:		if (g_key == 1) { *ScanCode = 0x0d; break; } //Key_Equal(Eng)		else { *ScanCode = 0x0c; *code = 8; break; } //Key_Equal(JP)      case 0x3e: *ScanCode = 0x34; *code = 8; break; //Key_Greater(>)      case 0x3f: *ScanCode = 0x35; break; //Key_Question      case 0x40:		 if (g_key == 1) { *ScanCode = 0x03; *code = 8; break; }//Key_At (Eng)		 else { *ScanCode = 0x1a; break; }//Keu_At (JP)      case 0x41: *ScanCode = 0x1e; break; //key a      case 0x42: *ScanCode = 0x30; break; //key b      case 0x43: *ScanCode = 0x2e; break; //key c      case 0x44: *ScanCode = 0x20; break; //key d      case 0x45: *ScanCode = 0x12; break; //key e      case 0x46: *ScanCode = 0x21; break; //key f      case 0x47: *ScanCode = 0x22; break; //key g      case 0x48: *ScanCode = 0x23; break; //key h      case 0x49: *ScanCode = 0x17; break; //key i      case 0x4a: *ScanCode = 0x24; break; //key j      case 0x4b: *ScanCode = 0x25; break; //key k      case 0x4c: *ScanCode = 0x26; break; //key l      case 0x4d: *ScanCode = 0x32; break; //key m      case 0x4e: *ScanCode = 0x31; break; //key n      case 0x4f: *ScanCode = 0x18; break; //key o      case 0x50: *ScanCode = 0x19; break; //key p      case 0x51: *ScanCode = 0x10; break; //key q      case 0x52: *ScanCode = 0x13; break; //key r      case 0x53: *ScanCode = 0x1f; break; //key s      case 0x54: *ScanCode = 0x14; break; //key t      case 0x55: *ScanCode = 0x16; break; //key u      case 0x56: *ScanCode = 0x2f; break; //key v      case 0x57: *ScanCode = 0x11; break; //key w      case 0x58: *ScanCode = 0x2d; break; //key x      case 0x59: *ScanCode = 0x15; break; //key y      case 0x5a: *ScanCode = 0x2c; break; //key z      case 0x5b:		 if (g_key == 1) { *ScanCode = 0x1a; break; } //Key_BracketLeft(Eng)		 else { *ScanCode = 0x1b; break; } //Key_BracketLeft(JP)      case 0x5c:		 if (g_key == 1) { *ScanCode = 0x2b; break; } //Key_Backslash(Eng)		 else { *ScanCode = 0x7d; break; } //Key_Backslash(JP)      case 0x5d:			 if (g_key == 1) { *ScanCode = 0x1b; break; } //Key_BracketRight(Eng)		 else { *ScanCode = 0x2b; break; } //Key_BracketRight(JP)      case 0x5e: 		 if (g_key == 1) { *ScanCode = 0x07; *code = 8; break; } //Key_AsciiCircum(Eng)		 else { *ScanCode = 0x0d; break; } //Key_AsciiCircum(JP)      case 0x5f: 		 if (g_key == 1) { *ScanCode = 0x0c; *code = 8; break; } //Key_Underscore(Eng)		 else { *ScanCode = 0x73; *code = 8; break; } //Key_Underscore(JP)      case 0x7c:		 if (g_key == 1) { *ScanCode = 0x2b; *code = 8; break; } //Key_Bar(Eng)		 else { *ScanCode = 0x7d; *code = 8; break; } //Key_Bar(JP)      case 0xa2: //Fn+U		 if (g_key == 1) { *ScanCode = 0x1a; *code = 8; break; } //us {		 else { *ScanCode = 0x1b; *code = 8; break; } //jp {      case 0xa3: //Fn+I 		 if (g_key == 1) { *ScanCode = 0x1b; *code = 8; break; } //us }		 else { *ScanCode = 0x2b; *code = 8; break; } //jp }  }  //printf("key 0x%X mod %d ascii %d \n", key,mod,ascii);   if (*ScanCode != 0)    return;  if (*ScanCode == 0 && key < 3000)    printf("unknown key 0x%X mod %d ascii %d \n", key,mod,ascii);}/******************************************************************************/QMyScrollView::QMyScrollView() : QScrollView(){  setCaption( ( QTRVER ) );}/******************************************************************************/QMyScrollView::~QMyScrollView(){}/******************************************************************************/void QMyScrollView::focusInEvent(QFocusEvent * e){	if (g_Clip == True){		cliprdr_send_simple_native_format_announce(CF_TEXT);	}}/******************************************************************************/void QMyScrollView::focusOutEvent(QFocusEvent * e){	if (g_Clip == True){		cliprdr_send_data_request(CF_TEXT);	}}/******************************************************************************/void QMyScrollView::keyPressEvent(QKeyEvent* e){  int ScanCode, code;    GetScanCode(e, &ScanCode, &code);  if (ScanCode != 0)  {    if (ScanCode == 60000){ 	    g_MW->bAddressPressed = True; 	    g_MW->bClickCheck = False;	    return;    }    if (ScanCode == 60001){	    return;     }    if (ScanCode == 60002){		 switch (g_key) {		    case 0: g_key =1; break;		    case 1: g_key =0; break;		 }		 return;     }    if (ScanCode == 60003){	    g_MW->SetScreen();	    return;     }    if (ScanCode == 60004){	    g_dragscroll = 1; 	    return;     }    if (g_dragscroll == 1){	    switch (ScanCode){		    case 0xcb: g_SV->setContentsPos((g_SV->contentsX() - g_scrollpixel),g_SV->contentsY()); break; //left		    case 0xc8: g_SV->setContentsPos(g_SV->contentsX(),(g_SV->contentsY() - g_scrollpixel)); break; //up		    case 0xcd: g_SV->setContentsPos((g_SV->contentsX() + g_scrollpixel),g_SV->contentsY()); break; //right		    case 0xd0: g_SV->setContentsPos(g_SV->contentsX(),(g_SV->contentsY() + g_scrollpixel)); break; //down	    }	    return;    }    if (code == 8) // send shift      rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYPRESS, 0x2a, 0);    rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYPRESS, ScanCode, 0);    e->accept();   }}/******************************************************************************/void QMyScrollView::keyReleaseEvent(QKeyEvent* e){  int ScanCode, code;  GetScanCode(e, &ScanCode, &code);  if (ScanCode != 0)  {    if (ScanCode == 60000){ 	    g_MW->bAddressPressed = False;	    if (!g_MW->bClickCheck){ g_MW->bAddressCheck = True; }	    return;    }    if (ScanCode == 60001){	    return;    }    if (ScanCode == 60002){	    return;    }    if (ScanCode == 60003){	    return;    }    if (ScanCode == 60004){	    g_dragscroll = 0; 	    return;     }    if (g_dragscroll == 1){	    return;    }    rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, ScanCode, 0);    if (code == 8) // send shift      rdp_send_input(0, RDP_INPUT_SCANCODE, RDP_KEYRELEASE, 0x2a, 0);    e->accept();   }}/******************************************************************************/void QMyScrollView::showEvent(QShowEvent* e){  QScrollView::showEvent(e);}/******************************************************************************/void QMyScrollView::show(){  QScrollView::show();}/******************************************************************************/void QMyScrollView::polish(){  QScrollView::polish();}/******************************************************************************/BOOL ui_create_window(){  int w, h;    QPainter * painter;    QWidget * desktop;    g_BS = new QPixmap(g_width, g_height);    painter = new QPainter(g_BS);    painter->fillRect(0, 0, g_width, g_height, QBrush(QColor(0, 0, 0)));    painter->fillRect(0, 0, g_width, g_height, QBrush(QBrush::CrossPattern));    delete painter;    g_DS = new QPixmap(480, 480);    g_P1 = new QPainter();    g_P2 = new QPainter();    g_ClipRect = new QRegion(0, 0, g_width, g_height);    g_MW = new QMyMainWindow();    g_MW->resize(g_width, g_height);    g_MW->show();    g_SV->addChild(g_MW);    g_MW->setMouseTracking(true);    g_SocketNotifier = new QSocketNotifier(g_global_sock, QSocketNotifier::Read, g_MW);    g_MW->connect(g_SocketNotifier, SIGNAL(activated(int)), g_MW, SLOT(dataReceived()));

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?