예제 #1
0
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);
}
예제 #2
0
파일: controls.cpp 프로젝트: jeffycf/pecmd
// ボタンの作成とイメージボタン化 (長すぎる)
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;
}