RtKeyboard::RtKeyboard(QWidget *parent) : QWidget(parent) { // Disable the window's frame. // this->setWindowFlags(Qt::FramelessWindowHint); m_pExtKey = NULL; //Load button images. LoadButtonImages(); // Setup Signal Mapper signalMapper = new QSignalMapper; connect(signalMapper, SIGNAL(mapped(const QString&)), this, SIGNAL(keySelected(const QString&))); //setup function button. setupFuncKey(); //setup key button. setupKeyboardAZ(); //setup number button. setupKeyboard09(); //Initial parameter. m_pSelectKey = NULL; m_KeypadFlag = KEYPAD_AZ; m_ABCabcFlag = KEYPAD_UPPER_CASE; m_SpecWordFlag = KEYPAD_UPPER_CASE; setKeypadFlag(KEYPAD_AZ); m_pExtTimer = new QTimer(this); connect(m_pExtTimer, SIGNAL(timeout()), this, SLOT(EnableExtKey())); // m_pExtTimer->start(1000); }
// ボタンの作成とイメージボタン化 (長すぎる) int Controls::CreateControls(HWND hWnd, HINSTANCE hInst) { int partitiontool = 0; int filer_pos = 0, backuptool_pos = 0, partitiontool_pos = 0; long ctl_id = 0; UINT wintools = 0L, users_app = 0L; // ボタンのハンドル HWND hFilerButton, hFileOpenButton, hBackupToolButton, hPartitionToolButton, hCommandPromptButton, hNotepadButton, hRegistryEditorButton, hDiskpartButton, hLoadDriverButton, hMSIMEButton, hWindowsREButton, hInstallWindowsButton, hApp1Button, hApp2Button, hApp3Button, hApp4Button, hApp5Button, hApp6Button, hApp7Button, hApp8Button, hApp9Button, hPStartButton, hResDefaultButton, hResXGAButton, hResSXGAButton, hResHDButton, hResChangeButton, hRebootButton, hShutdownButton; controls_all = 0; hFilerButton = hBackupToolButton = hPartitionToolButton = NULL; /*---------------------------------- ここから大量のボタンを作成 ----------------------------------*/ // 画像ボタンにするときはボタンにフォント設定しないので(というかしなくてもいいので)、WM_SETFONTはボタンには適用しない // ファイラー if (FileExist(ufFilePath)) { // ユーザーが自由に指定できるファイラー ctl_id = IDC_FILER; filer_pos = 40; } else if (FileExist(TEXT("X:\\Program Files\\q-dir\\q-dir.exe"))) { // Q-Dirが存在する場合 ctl_id = IDC_QDIR; filer_pos = 20; } else if (FileExist(TEXT("X:\\Program Files\\7-Zip\\7zFM.exe"))) { // Q-Dirが存在しない & 7-Zipが存在する場合 ctl_id = IDC_7ZIP; } // ファイラーのボタン作成 if (ctl_id) { hFilerButton = CreateButton(hWnd, hInst, 25, 20, 180, 20, ctl_id); controls_all++; } // ファイルオープンダイアログ, File Open Dialog hFileOpenButton = CreateButton(hWnd, hInst, 213, 20, 20, 20, IDC_FILEOPENDLG); ctl_id = 0; // バックアップツール, Backup Tools if (FileExist(TEXT("X:\\Program Files\\Acronis\\BackupAndRecovery\\trueimage_starter.exe"))) { // Acronis Backup & Recovery 10 ctl_id = IDC_ACROBACKRECOVER; } else if (FileExist(TEXT("X:\\Program Files\\Acronis\\TrueImageHome\\trueimage_starter.exe"))) { // TrueImage2009以降 ctl_id = IDC_ACROTRUEIMAGE2009; } else if (FileExist(TEXT("X:\\Program Files\\Acronis\\TrueImage_starter.exe"))) { // TrueImage11 ctl_id = IDC_ACROTRUEIMAGE11; } else if (FileExist(TEXT("X:\\Program Files\\Acronis\\TrueImage.exe"))) { // TrueImage10/9Home ctl_id = IDC_ACROTRUEIMAGE10OR9HOME; } else if (FileExist(TEXT("X:\\Program Files\\Acronis\\TrueImage\\TrueImage.exe"))) { // TrueImageLE/Personal2 Execute(NULL, NULL, TEXT("reg.exe"), TEXT("add HKCU\\Software\\Acronis\\TrueImage\\DontShow /v Updates /t REG_SZ /d 1 /f"), NULL, SW_SHOWMINIMIZED); // 最小化状態で実行 Execute(NULL, NULL, TEXT("X:\\Program Files\\Acronis\\TrueImage\\schedhlp.exe"), NULL, NULL, SW_SHOWDEFAULT); Execute(NULL, NULL, TEXT("X:\\Program Files\\Acronis\\TrueImage\\TimounterMonitor.exe"), NULL, NULL, SW_SHOWDEFAULT); Execute(NULL, NULL, TEXT("X:\\Program Files\\Acronis\\TrueImage\\TrueImageMonitor.exe"), NULL, NULL, SW_SHOWDEFAULT); ctl_id = IDC_ACROTRUEIMAGELEORPERSONAL2; } else if (FileExist(TEXT("X:\\Program Files\\Seagate\\DiscWizard_starter.exe"))) { // DiscWizard ctl_id = IDC_DISCWIZARD; backuptool_pos = 20; } else if (FileExist(TEXT("X:\\Program Files\\PBR\\program\\launcher.lnk"))) { // Paragon Backup & Recovery ctl_id = IDC_PARAGBACKRECOVER; backuptool_pos = 40; } else if (FileExist(TEXT("X:\\Program Files\\easeus\\tb2.0\\bin\\PELoader.lnk"))) { // EASEUS Todo Backup 2.5x (公式PE互換) ctl_id = IDC_EASEUSTODOBACKUP25PE; backuptool_pos = 60; } else if (FileExist(TEXT("X:\\Program Files\\easeus\\tb\\bin\\PELoader.lnk"))) { // EaseUS Todo Backup 4.0.0.2 (公式PE互換) ctl_id = IDC_EASEUSTODOBACKUP4002PE; backuptool_pos = 60; } else if (FileExist(TEXT("X:\\Program Files\\ETB\\bin\\loader.lnk"))) { // EASEUS Todo Backup 2.5x (Win版互換) ctl_id = IDC_EASEUSTODOBACKUP25WIN; backuptool_pos = 60; } else if (FileExist(TEXT("X:\\Program Files\\AomeiBackupper\\Backupper.exe"))) { // AOMEI Backupper ctl_id = IDC_AOMEIBACKUPPER; backuptool_pos = 80; } else if (FileExist(TEXT("X:\\Program Files\\otherbpt.lnk"))) { // 他のバックアップツール ctl_id = IDC_OTHERBACKUPTOOL; backuptool_pos = 200; } // バックアップツールのボタンを作成 if (ctl_id) hBackupToolButton = CreateButton(hWnd, hInst, 25, 50, 210, 20, ctl_id); ctl_id = 0; // パーティションツール if (FileExist(TEXT("X:\\Program Files\\EPM\\bin\\epm0.lnk"))) { // EaseUS Partition Master ctl_id = IDC_EASEUSPARTITIONMASTER; partitiontool_pos = 100; } else if (FileExist(TEXT("X:\\Program Files\\MPW\\PartitionWizard.lnk"))) { // Partition Wizard ctl_id = IDC_PARTITIONWIZARD; partitiontool_pos = 120; } else if (FileExist(TEXT("X:\\Program Files\\Acronis\\DiskDirector\\trueimage_starter.exe"))) { // Acronis Disk Director ctl_id = IDC_ACRODISKDIRECTOR11; partitiontool_pos = 140; } else if (FileExist(TEXT("X:\\Program Files\\PPM\\program\\launcher.lnk"))) { // Paragon Partition Manager ctl_id = IDC_PARAGPARTITIONMANAGER; partitiontool_pos = 160; } else if (FileExist(TEXT("X:\\Program Files\\PA\\PartAssist.exe"))) { // AOMEI Partition Assistant ctl_id = IDC_AOMEIPARTITIONASSISTANT; partitiontool_pos = 180; } else if (FileExist(TEXT("X:\\Program Files\\otherptt.lnk"))) { // 他のパーティションツール ctl_id = IDC_OTHERPARTITIONTOOL; partitiontool_pos = 200; } // パーティションツールのボタンを作成 if (ctl_id) hPartitionToolButton = CreateButton(hWnd, hInst, 25, 80, 210, 20, ctl_id); // Windows Tools // Command Prompt (コマンドプロンプト) hCommandPromptButton = CreateButton(hWnd, hInst, 10, 130, 130, 20, IDC_COMMANDPROMPT); // Notepad (メモ帳) hNotepadButton = CreateButton(hWnd, hInst, 145, 130, 130, 20, IDC_NOTEPAD); // Registry Editor (レジストリエディター) hRegistryEditorButton = CreateButton(hWnd, hInst, 10, 155, 130, 20, IDC_REGISTRYEDITOR); // Diskpart hDiskpartButton = CreateButton(hWnd, hInst, 145, 155, 130, 20, IDC_DISKPART); // Load Driver (ドライバ読み込み) hLoadDriverButton = CreateButton(hWnd, hInst, 10, 180, 130, 20, IDC_LOADDRIVER); // MS-IME if (FileExist(TEXT("imecmd.cmd"))) { hMSIMEButton = CreateButton(hWnd, hInst, 145, 180, 130, 20, IDC_MSIME); wintools |= 0x10; } // Windows RE if (FileExist(TEXT("X:\\sources\\recovery\\recenv.exe"))) { hWindowsREButton = CreateButton(hWnd, hInst, 10, 205, 130, 20, IDC_WINDOWSRE); wintools |= 0x20; } // Install Windows (NT6.x) if (FileExist(TEXT("X:\\sources\\setup.exe"))) { hInstallWindowsButton = CreateButton(hWnd, hInst, 145, 205, 130, 20, IDC_INSTALLWINDOWS); wintools |= 0x40; } // Other Applications // App1 if (FileExist(uaFilePath1)) { hApp1Button = CreateButton(hWnd, hInst, 10, 230, 20, 20, IDC_APP1); users_app |= 0x1; } // App2 if (FileExist(uaFilePath2)) { hApp2Button = CreateButton(hWnd, hInst, 35, 230, 20, 20, IDC_APP2); users_app |= 0x2; } // App3 if (FileExist(uaFilePath3)) { hApp3Button = CreateButton(hWnd, hInst, 60, 230, 20, 20, IDC_APP3); users_app |= 0x4; } // App4 if (FileExist(uaFilePath4)) { hApp4Button = CreateButton(hWnd, hInst, 85, 230, 20, 20, IDC_APP4); users_app |= 0x8; } // App5 if (FileExist(uaFilePath5)) { hApp5Button = CreateButton(hWnd, hInst, 110, 230, 20, 20, IDC_APP5); users_app |= 0x10; } // App6 if (FileExist(uaFilePath6)) { hApp6Button = CreateButton(hWnd, hInst, 135, 230, 20, 20, IDC_APP6); users_app |= 0x20; } // App7 if (FileExist(uaFilePath7)) { hApp7Button = CreateButton(hWnd, hInst, 160, 230, 20, 20, IDC_APP7); users_app |= 0x40; } // App8 if (FileExist(uaFilePath8)) { hApp8Button = CreateButton(hWnd, hInst, 185, 230, 20, 20, IDC_APP8); users_app |= 0x80; } // App9 if (FileExist(uaFilePath9)) { hApp9Button = CreateButton(hWnd, hInst, 210, 230, 20, 20, IDC_APP9); users_app |= 0x100; } // PStart or Custom USB Memory Launcher if (!lstrcmp(uNxPath, TEXT("true"))) { hPStartButton = CreateButton(hWnd, hInst, 235, 230, 20, 20, IDC_PSTART); } // 解像度変更 // Default hResDefaultButton = CreateButton(hWnd, hInst, 10, 255, 61, 16, IDC_RESDEF); // XGA hResXGAButton = CreateButton(hWnd, hInst, 73, 255, 61, 16, IDC_RESXGA); // SXGA hResSXGAButton = CreateButton(hWnd, hInst, 10, 272, 61, 16, IDC_RESSXGA); // HD hResHDButton = CreateButton(hWnd, hInst, 73, 272, 61, 16, IDC_RESHD); // Res1 (edit) hRes1 = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("EDIT"), TEXT("0"), WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL | ES_NUMBER, 150, 262, 38, 20, hWnd, (HMENU)IDC_RES1, hInst, NULL ); SendMessage(hRes1, WM_SETFONT, (WPARAM)hGUIFont, TRUE); // フォント設定 SendMessage(hRes1, EM_SETLIMITTEXT, 5, 0); // 入力上限設定 // Res2 (edit) hRes2 = CreateWindowEx(WS_EX_CLIENTEDGE, TEXT("EDIT"), TEXT("0"), WS_CHILD | WS_VISIBLE | WS_TABSTOP | ES_AUTOHSCROLL | ES_NUMBER, 196, 262, 38, 20, hWnd, (HMENU)IDC_RES2, hInst, NULL ); SendMessage(hRes2, WM_SETFONT, (WPARAM)hGUIFont, TRUE); SendMessage(hRes2, EM_SETLIMITTEXT, 5, 0); // エディトボックスのプロシージャーを取得 DefEditProc = (WNDPROC)GetWindowLongPtr(hRes1, GWLP_WNDPROC); // プロシージャーを設定 SetWindowLongPtr(hRes1, GWLP_WNDPROC, (LONG_PTR)EditProc); SetWindowLongPtr(hRes2, GWLP_WNDPROC, (LONG_PTR)EditProc); // ResChange hResChangeButton = CreateButton(hWnd, hInst, 237, 263, 45, 16, IDC_RESCHANGE); controls_all += 2; // Reboot WinPE hRebootButton = CreateButton(hWnd, hInst, 10, 325, 130, 20, IDC_REBOOTWINPE); // Shutdown WinPE hShutdownButton = CreateButton(hWnd, hInst, 150, 325, 130, 20, IDC_SHUTDOWNWINPE); // 作成されたボタンの数だけ配列を確保 controlinfo = (CONTROLINFO *)malloc(sizeof(CONTROLINFO) * controls_all); if (controlinfo == NULL) return 1; // 実際に値を設定したボタンの数 int controls_set = 0; // イメージをロード LoadButtonImages(hWnd, 3); // ファイラー if (hFilerButton) { // 画像をロード LoadButtonImages(hWnd, 1); // 情報をセット SetImageButtonInfo(controls_set, hFilerButton, HDC_MEMID1, 0, filer_pos, 180, filer_pos, 180, filer_pos); controls_set++; } // ファイルオープンダイアログ SetImageButtonInfo(controls_set, hFileOpenButton, HDC_MEMID4, 0, 60, 0, 80, 0, 80); controls_set++; if (hBackupToolButton || hPartitionToolButton) LoadButtonImages(hWnd, 2); // バックアップツール if (hBackupToolButton) { SetImageButtonInfo(controls_set, hBackupToolButton, HDC_MEMID2, 0, backuptool_pos, 210, backuptool_pos, 210, backuptool_pos); controls_set++; } // パーティションツール if (hPartitionToolButton) { SetImageButtonInfo(controls_set, hPartitionToolButton, HDC_MEMID2, 0, partitiontool_pos, 210, partitiontool_pos, 210, partitiontool_pos); controls_set++; } // 標準的なWindowsアプリケーション SetImageButtonInfo(controls_set, hCommandPromptButton, HDC_MEMID3, 0, 40, 130, 40, 130, 40); SetImageButtonInfo(controls_set+1, hNotepadButton, HDC_MEMID3, 0, 60, 130, 60, 130, 60); SetImageButtonInfo(controls_set+2, hRegistryEditorButton, HDC_MEMID3, 0, 80, 130, 80, 130, 80); SetImageButtonInfo(controls_set+3, hDiskpartButton, HDC_MEMID3, 0, 100, 130, 100, 130, 100); SetImageButtonInfo(controls_set+4, hLoadDriverButton, HDC_MEMID3, 0, 120, 130, 120, 130, 120); controls_set += 5; // オプション? if (wintools & 0x10) { SetImageButtonInfo(controls_set, hMSIMEButton, HDC_MEMID3, 0, 140, 130, 140, 130, 140); controls_set++; } if (wintools & 0x20) { SetImageButtonInfo(controls_set, hWindowsREButton, HDC_MEMID3, 0, 160, 130, 160, 130, 160); controls_set++; } if (wintools & 0x40) { SetImageButtonInfo(controls_set, hInstallWindowsButton, HDC_MEMID3, 0, 180, 130, 180, 130, 180); controls_set++; } // User's Applications (App1~9) LoadButtonImages(hWnd, 4); if (users_app & 0x1) { SetImageButtonInfo(controls_set, hApp1Button, HDC_MEMID4, 0, 100, 0, 100, 0, 100); controls_set++; } if (users_app & 0x2) { SetImageButtonInfo(controls_set, hApp2Button, HDC_MEMID4, 0, 120, 0, 120, 0, 120); controls_set++; } if (users_app & 0x4) { SetImageButtonInfo(controls_set, hApp3Button, HDC_MEMID4, 0, 140, 0, 140, 0, 140); controls_set++; } if (users_app & 0x8) { SetImageButtonInfo(controls_set, hApp4Button, HDC_MEMID4, 0, 160, 0, 160, 0, 160); controls_set++; } if (users_app & 0x10) { SetImageButtonInfo(controls_set, hApp5Button, HDC_MEMID4, 0, 180, 0, 180, 0, 180); controls_set++; } if (users_app & 0x20) { SetImageButtonInfo(controls_set, hApp6Button, HDC_MEMID4, 0, 200, 0, 200, 0, 200); controls_set++; } if (users_app & 0x40) { SetImageButtonInfo(controls_set, hApp7Button, HDC_MEMID4, 0, 220, 0, 220, 0, 220); controls_set++; } if (users_app & 0x80) { SetImageButtonInfo(controls_set, hApp8Button, HDC_MEMID4, 0, 240, 0, 240, 0, 240); controls_set++; } if (users_app & 0x100) { SetImageButtonInfo(controls_set, hApp9Button, HDC_MEMID4, 0, 260, 0, 260, 0, 260); controls_set++; } // PStart if (!lstrcmp(uNxPath, TEXT("true"))) { SetImageButtonInfo(controls_set, hPStartButton, HDC_MEMID4, 0, 40, 0, 40, 0, 40); controls_set++; } // 解像度変更 LoadButtonImages(hWnd, 5); SetImageButtonInfo(controls_set, hResDefaultButton, HDC_MEMID5, 0, 0, 61, 0, 61, 0); SetImageButtonInfo(controls_set+1, hResXGAButton, HDC_MEMID5, 0, 16, 61, 16, 61, 16); SetImageButtonInfo(controls_set+2, hResSXGAButton, HDC_MEMID5, 0, 32, 61, 32, 61, 32); SetImageButtonInfo(controls_set+3, hResHDButton, HDC_MEMID5, 0, 48, 61, 48, 61, 48); /* 以下は入力ボックスだが、Tabキーのフォーカス移動を処理するため、ボタンのハンドルのみ入れる */ SetImageButtonInfo(controls_set+4, hRes1, -1, 0, 0, 0, 0, 0, 0); SetImageButtonInfo(controls_set+5, hRes2, -1, 0, 0, 0, 0, 0, 0); controlinfo[controls_set+4].option = 0x10; controlinfo[controls_set+5].option = 0x10; SetImageButtonInfo(controls_set+6, hResChangeButton, HDC_MEMID5, 16, 64, 61, 64, 61, 64); controls_set += 7; // Reboot / Shutdown SetImageButtonInfo(controls_set, hRebootButton, HDC_MEMID3, 0, 0, 130, 0, 130, 0); SetImageButtonInfo(controls_set+1, hShutdownButton, HDC_MEMID3, 0, 20, 130, 20, 130, 20); controls_set += 2; // ボタンのプロシージャーを取得 (どのボタンのものも同じなので一回のみ) DefButtonProc = (WNDPROC)GetWindowLongPtr(controlinfo[0].hWnd_control, GWLP_WNDPROC); for(int i = 0; i < controls_all; i++) { // indexを設定 SetWindowLongPtr(controlinfo[i].hWnd_control, GWLP_USERDATA, i); if (controlinfo[i].hdc_id == -1) continue; // ボタンのサブクラス化 SetWindowLongPtr(controlinfo[i].hWnd_control, GWLP_WNDPROC, (LONG_PTR)ImgButtonProc); // イメージボタン化 (BS_OWNERDRAWスタイルを適用) SendMessage(controlinfo[i].hWnd_control, BM_SETSTYLE, BS_OWNERDRAW, TRUE); } return 0; }