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 + -
显示快捷键?