// // File : dllmain.cpp // /////////////////////////////////////////////////////////////////////////////////// #include #include #include #include "resource.h" #include "common.h" #include "sspfunc.h" // プラグインの設定情報を保管するレジストリ名 #define REG_KEY "RagnarokOnline" // 作成者名 #define AUTHOR "Tokiwa Kagura" // ファンクションキーに設定可能な機能数 #define FUNCTION_NUM 57 // キーストローク機能の番号 #define KEYSTROKE_NO 1 // グローバル変数 HINSTANCE ghInst=NULL; int buf_up=0,buf_down=0; // 設定情報 SSP_SETTING sspSetting; // デフォルト設定情報(ファンクションキー1〜8、ホイールボタン、作成者の順) // ここにデフォルト設定を記述してください SSP_DEFAULT sspDefault = { 41, 13, 34, 30, 37, 17, 21, 25, 8, AUTHOR }; SSP_STATUS WINAPI SspSendKeyEvent(HWND hWnd, UINT uiButton, UINT uiFunction, UINT uiSW); /////////////////////////////////////////////////////////////////////////////////// BOOL APIENTRY DllMain(HINSTANCE hModule, DWORD dwReason, LPVOID lpReserved ) { if(dwReason == DLL_PROCESS_ATTACH) { // レジストリから設定情報を読み込みます SspLoadRegSetting(REG_KEY, &sspSetting, &sspDefault); ghInst = hModule; } UNREFERENCED_PARAMETER(lpReserved); return TRUE; } /////////////////////////////////////////////////////////////////////////////////// // < 機能 > // プラグインファイルがドライバによりロードされた時に呼ばれる関数です // < パラメータ > // pParam->dwModel : SmartScrollのモデル番号 // pParam->dwVersion : SmartScrollドライバのバージョン // < 戻り値 > // SSP_TRUE : このプラグインは常駐されます // SSP_FALSE : このプラグインの常駐は解除されます SSP_STATUS WINAPI SspLoadPlugin(PLOADPARAM pParam) { #ifdef _DEBUG char szOut[200]; wsprintf(szOut, "SspLoadPlugin : dwModel = %x, dwVersion = %x.%x", pParam->dwModel, HIWORD(pParam->dwVersion), LOWORD(pParam->dwVersion)); SspTraceOut(szOut); #endif return SSP_TRUE; } /////////////////////////////////////////////////////////////////////////////////// // < 機能 > // フォアグラウンドウィンドウに対して、このプラグインを適用するかどうかを判断する関数です // < パラメータ > // hWnd : フォアグラウンドウィンドウのハンドル // < 戻り値 > // SSP_TRUE : このプラグインが適用される // SSP_FALSE : このプラグインは適用されない SSP_STATUS WINAPI SspApplyProc(HWND hWnd) { #ifdef _DEBUG char szOut[100]; wsprintf(szOut, "SspApplyProc : hWnd = %x", hWnd); SspTraceOut(szOut); #endif // ウィンドウクラス名が、"Ragnarok"の場合に適用されます // ウィンドウクラス名は、"Window Messenger"で取得することができます // http://member.nifty.ne.jp/kobayashi/winmes/ char szClass[100]; GetClassName(hWnd, szClass, sizeof(szClass)); if(!strcmp(szClass, "Ragnarok")) return SSP_TRUE; return SSP_FALSE; } /////////////////////////////////////////////////////////////////////////////////// // < 機能 > // プラグインが適用される時、最初に呼び出される関数です // < パラメータ > // pParam->hwndApp : フォアグラウンドウィンドウのハンドル // pParam->dwModel : SmartScrollのモデル番号 // pParam->dwVersion : SmartScrollドライバのバージョン // < 戻り値 > // SSP_TRUE : 通常はこの値を返してください // SSP_FALSE : プラグインの適用が取り消されます SSP_STATUS WINAPI SspInitProc(PINITPARAM pParam) { #ifdef _DEBUG char szOut[200]; wsprintf(szOut, "SspInitProc : hwndApp = %x, dwModel = %x, dwVersion = %x.%x", pParam->hwndApp, pParam->dwModel, HIWORD(pParam->dwVersion), LOWORD(pParam->dwVersion)); SspTraceOut(szOut); #endif return SSP_TRUE; // SspTimerProc関数を使用する場合は、SSP_TIMERを戻り値として返してください。 // (ドライババージョン1.20以降で対応) // return SSP_TIMER; } /////////////////////////////////////////////////////////////////////////////////// // < 機能 > // 約100ms間隔で呼び出されるタイマ関数です。 //(ドライババージョン1.20以降で対応) void WINAPI SspTimerProc(void) { #ifdef _DEBUG SspTraceOut("SspTimerProc"); #endif } /////////////////////////////////////////////////////////////////////////////////// // < 機能 > // プラグインの適用が終了する時に呼び出される関数です void WINAPI SspReleaseProc(void) { #ifdef _DEBUG SspTraceOut("SspReleaseProc()"); #endif } //////////////////////////////////////////////////////////////////////[オリジナル]/ // < 機能 > // IMEの動作を取得する処理を行う関数です // < パラメータ > // hWnd : 目的のウィンドウハンドル // < 戻り値 > // TRUE : IME ON // FALSE : IME OFF //BOOL IsImeOn( HWND hWnd ) //{ // HIMC hIMC = ImmGetContext( hWnd ); // BOOL bResult = ImmGetOpenStatus( hIMC ); // ImmReleaseContext( hWnd, hIMC ); // return bResult; //} //RO内ではIMEの取得が不可能なため停止中(要検討) //#include "imm.h" //IMM32.LIBが別途必要 //////////////////////////////////////////////////////////////////////[オリジナル]/ // < 機能 > // IMEをON/OFFする処理を行う関数です // < パラメータ > // hWnd : 目的のウィンドウハンドル // bOn : TRUE…ON/FALSE…OFF //void ImeOn( HWND hWnd, BOOL bOn ) //{ // HIMC hIMC = ImmGetContext( hWnd ); // ImmSetOpenStatus( hIMC, bOn ); // ImmReleaseContext( hWnd, hIMC ); //} //RO内ではIMEの取得が不可能なため停止中(要検討) //#include "imm.h" //IMM32.LIBが別途必要 /////////////////////////////////////////////////////////////////////////////////// // < 機能 > // ファンクションキーが操作された場合の処理を行う関数です // < パラメータ > // pParam->hwndMouse : マウスカーソルの真下にあるウィンドウのハンドル // pParam->dwType : イベントタイプ // < 戻り値 > // SSP_TRUE : 通常はこの値を返してください // SSP_SHOW_HIDE: SmartScrollウィンドウの表示/非表示が切り替わります SSP_STATUS WINAPI SspButtonProc(PBUTTONPARAM pParam) { #ifdef _DEBUG char szOut[200]; wsprintf(szOut, "SspButtonProc : hwndMouse = %x, dwType = %d", pParam->hwndMouse, pParam->dwType); SspTraceOut(szOut); #endif UINT uiNo = BUTTON_NO(pParam->dwType); UINT uiEvent = BUTTON_EVENT(pParam->dwType); if(SSP_BUTTON1 <= uiNo && uiNo <= SSP_BUTTON_WHEEL) { return SspSendKeyEvent(pParam->hwndMouse, uiNo, sspSetting.sbiButton[uiNo].uiFunction, uiEvent); } return SSP_TRUE; } /////////////////////////////////////////////////////////////////////////////////// // < 機能 > // ズームホイール機能の有効/無効を判断する関数です // < 戻り値 > // SSP_TRUE : ズームホイールは有効です // SSP_FALSE : ズームホイールは無効です SSP_STATUS WINAPI SspGetWheelEffect(void) { #ifdef _DEBUG SspTraceOut("SspGetWheelEffect"); #endif return SSP_TRUE; } /////////////////////////////////////////////////////////////////////////////////// // < 機能 > // ズームホイールが操作された場合の処理を行う関数です // < パラメータ > // pParam->hwndMouse : マウスカーソルの真下にあるウィンドウのハンドル // pParam->lRoll : ズームホイールの回転量 // pParam->dwDirection : 回転方向フラグ // < 戻り値 > // SSP_TRUE : デフォルトのズーム処理は行われません // SSP_FALSE : デフォルトのズーム処理が行われます SSP_STATUS WINAPI SspWheelProc(PWHEELPARAM pParam) { #ifdef _DEBUG char szOut[200]; wsprintf(szOut, "SspWheelProc : hwndMouse = %x, lRoll = %d, dwDirection = %d", pParam->hwndMouse, pParam->lRoll, pParam->dwDirection); SspTraceOut(szOut); #endif // 奥に回すと視点を下に、手前に回すと視点を上にします。 switch(pParam->dwDirection) { case SSP_WHEEL_FW: keybd_event(VK_SHIFT, 0, 0, 0); mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0); Sleep(100); mouse_event(0, 0, -50, 0, 0); mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); break; case SSP_WHEEL_BK: keybd_event(VK_SHIFT, 0, 0, 0); mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0); Sleep(100); mouse_event(0, 0, 50, 0, 0); mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); break; } return SSP_TRUE; } /////////////////////////////////////////////////////////////////////////////////// // < 機能 > // スクロールボールが操作された場合の処理を行う関数です // < パラメータ > // pParam->hwndMouse : マウスカーソルの真下にあるウィンドウのハンドル // pParam->hwndOwner : hwndMouseの親ウィンドウのハンドル // pParam->hwndHScroll : 横スクロールバーコントロールのハンドル // pParam->hwndVScroll : 縦スクロールバーコントロールのハンドル // pParam->lX : スクロールボールのX方向の回転量 // pParam->lY : スクロールボールのY方向の回転量 // pParam->dwDirection : 回転方向フラグ // < 戻り値 > // SSP_TRUE : デフォルトのスクロール処理は行われません // SSP_FALSE : デフォルトのスクロール処理が行われます SSP_STATUS WINAPI SspScrollProc(PSCROLLPARAM pParam) { #ifdef _DEBUG char szOut[200]; wsprintf(szOut, "SspScrollProc : hwndMouse = %x, hwndOwner = %x, hwndHScroll = %x, hwndVScroll = %x, lX = %d, lY = %d, dwDirection = %d", pParam->hwndMouse, pParam->hwndOwner, pParam->hwndHScroll, pParam->hwndVScroll, pParam->lX, pParam->lY, pParam->dwDirection); SspTraceOut(szOut); #endif // 上下はキーボードの上下キーに対応、 // 左右は視点を回転します。 if(pParam->dwDirection & SSP_SCROLL_UP) { buf_up++; buf_down=0; if(buf_up>=10) { keybd_event(VK_UP, 0, 0, 0); keybd_event(VK_UP, 0, KEYEVENTF_KEYUP, 0); buf_up=0; } } else if(pParam->dwDirection & SSP_SCROLL_DOWN) { buf_up=0; buf_down++; if(buf_down>=10) { keybd_event(VK_DOWN, 0, 0, 0); keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0); buf_down=0; } } if(pParam->dwDirection & SSP_SCROLL_LEFT) { mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0); mouse_event(0, -2, 0, 0, 0); Sleep(0); mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0); } else if(pParam->dwDirection & SSP_SCROLL_RIGHT) { mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0); mouse_event(0, 2, 0, 0, 0); Sleep(0); mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0); } return SSP_TRUE; } /////////////////////////////////////////////////////////////////////////////////// // < 機能 > // SmartScrollパッドのボタンに表示されるアイコンハンドルを提供する関数です // < パラメータ > // dwType : ボタンの種類 // < 戻り値 > // 各ボタン用のアイコンハンドルを返します HICON WINAPI SspGetIcon(DWORD dwType) { #ifdef _DEBUG char szOut[100]; wsprintf(szOut, "SspGetIcon : dwType = %d", dwType); SspTraceOut(szOut); #endif if(SSP_BUTTON1 <= dwType && dwType <= SSP_BUTTON_WHEEL) { // キーストロークの場合 if(sspSetting.sbiButton[dwType].uiFunction == KEYSTROKE_NO) { return SspGetKeyIcon(&(sspSetting.sbiButton[dwType])); } else { return (HICON)LoadImage(ghInst, MAKEINTRESOURCE(SSP_ICON_BASE+sspSetting.sbiButton[dwType].uiFunction), IMAGE_ICON, SSP_ICON_SIZE, SSP_ICON_SIZE, LR_DEFAULTCOLOR); } } return NULL; } /////////////////////////////////////////////////////////////////////////////////// // < 機能 > // プラグインが持つ文字列リソースを提供する関数です // < パラメータ > // dwType : リソースの種類 // lpStr : 文字列を受け取るバッファを指すポインタ // uiSize : バッファのサイズ // < 戻り値 > // バッファにコピーされた文字数を返します int WINAPI SspGetString(DWORD dwType, LPSTR lpStr, UINT uiSize) { #ifdef _DEBUG char szOut[100]; wsprintf(szOut, "SspGetString : dwType = %d", dwType); SspTraceOut(szOut); #endif if(dwType == SSP_NAME) { return LoadString(ghInst, IDS_NAME, lpStr, uiSize); } else if(dwType == SSP_NAME_EX) { return LoadString(ghInst, IDS_NAME_EX, lpStr, uiSize); } else if(SSP_BUTTON1 <= dwType && dwType <= SSP_BUTTON_WHEEL) { // キーストロークの場合 if(sspSetting.sbiButton[dwType].uiFunction == KEYSTROKE_NO) { return SspGetKeyText(&(sspSetting.sbiButton[dwType]), lpStr, uiSize); } else { return LoadString(ghInst, SSP_STRING_BASE+sspSetting.sbiButton[dwType].uiFunction, lpStr, uiSize); } } return 0; } /////////////////////////////////////////////////////////////////////////////////// // < 機能 > // 設定ダイアログ用のダイアログプロシージャです BOOL CALLBACK SspDialogProc(HWND hWnd, UINT uiMsg, WPARAM wParam, LPARAM lParam) { switch(uiMsg) { case WM_INITDIALOG: { #ifdef _DEBUG SspTraceOut("SspDialogProc : WM_INITDIALOG"); #endif // コンボボックスの初期化を行います for(int i=0; iitemHeight = SSP_ICON_SIZE; } return TRUE; case WM_DRAWITEM: { LPDRAWITEMSTRUCT lpdis = (LPDRAWITEMSTRUCT)lParam; if(lpdis->itemID == -1) break; if(IDC_COMBO1 <= lpdis->CtlID && lpdis->CtlID <= IDC_COMBO_WHEEL) { // コンボボックスの描画を行います(アイコン表示付き) SspDrawComboBox(ghInst, lpdis); return TRUE; } } break; case WM_COMMAND: switch(LOWORD(wParam)) { case IDOK: case IDCANCEL: // レジストリに設定情報を保存します SspSaveRegSetting(REG_KEY, &sspSetting); EndDialog(hWnd, 0); return TRUE; // コンボボックスが選択された時の処理を行います case IDC_COMBO1: case IDC_COMBO2: case IDC_COMBO3: case IDC_COMBO4: case IDC_COMBO5: case IDC_COMBO6: case IDC_COMBO7: case IDC_COMBO8: case IDC_COMBO_WHEEL: { if(HIWORD(wParam) != CBN_SELCHANGE) break; int i = LOWORD(wParam)-IDC_COMBO1; UINT uiRet = SendMessage(GetDlgItem(hWnd, LOWORD(wParam)), CB_GETCURSEL, (WPARAM)0, (LPARAM)0); // キーストロークの場合は設定用ダイアログを呼び出します if(uiRet == KEYSTROKE_NO) { if(SspSetKeyStroke(hWnd, &(sspSetting.sbiButton[i]))) sspSetting.sbiButton[i].uiFunction = uiRet; else SendMessage(GetDlgItem(hWnd, LOWORD(wParam)), CB_SETCURSEL, (WPARAM)sspSetting.sbiButton[i].uiFunction, (LPARAM)0); } else sspSetting.sbiButton[i].uiFunction = uiRet; } return TRUE; // デフォルト設定にします case IDC_DEFAULT: { for(int i=0; i // 各機能に合せてアプリケーションに対してメッセージを送信する関数です SSP_STATUS WINAPI SspSendKeyEvent(HWND hWnd, UINT uiButton, UINT uiFunction, UINT uiSW) { switch(uiFunction) { case 0: // なし break; case KEYSTROKE_NO: // キーストローク SspKeyStroke(&(sspSetting.sbiButton[uiButton]), uiSW); break; case 2: // 左クリック if(uiSW == SSP_BUTTON_DOWN) { mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); } break; case 3: // 左ダブルクリック if(uiSW == SSP_BUTTON_DOWN) { mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); Sleep(150); mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); Sleep(150); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); Sleep(150); mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); } break; case 4: // 右クリック if(uiSW == SSP_BUTTON_DOWN) { mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0); } break; case 5: // 右ダブルクリック if(uiSW == SSP_BUTTON_DOWN) { mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0); Sleep(150); mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0); Sleep(150); mouse_event(MOUSEEVENTF_RIGHTDOWN,0,0,0,0); Sleep(150); mouse_event(MOUSEEVENTF_RIGHTUP,0,0,0,0); } break; case 6: // Ctrl+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_CONTROL, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0); } break; case 7: // Shift+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_SHIFT, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); } break; case 8: // 座る/立つ if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_INSERT, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_INSERT, 0, KEYEVENTF_KEYUP, 0); } break; case 9: // F1 if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F1, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_F1, 0, KEYEVENTF_KEYUP, 0); } break; case 10: // F1+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F1, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_F1, 0, KEYEVENTF_KEYUP, 0); } break; case 11: // F1+Shift+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F1, 0, 0, 0); keybd_event(VK_SHIFT, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_F1, 0, KEYEVENTF_KEYUP, 0); } break; case 12: // F1+ディレイ+リターン if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F1, 0, 0, 0); keybd_event(VK_F1, 0, KEYEVENTF_KEYUP, 0); Sleep(500); keybd_event(VK_RETURN, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 13: // F2 if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F2, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_F2, 0, KEYEVENTF_KEYUP, 0); } break; case 14: // F2+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F2, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_F2, 0, KEYEVENTF_KEYUP, 0); } break; case 15: // F2+Shift+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F2, 0, 0, 0); keybd_event(VK_SHIFT, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_F2, 0, KEYEVENTF_KEYUP, 0); } break; case 16: // F2+ディレイ+リターン if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F2, 0, 0, 0); keybd_event(VK_F2, 0, KEYEVENTF_KEYUP, 0); Sleep(500); keybd_event(VK_RETURN, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 17: // F3 if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F3, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_F3, 0, KEYEVENTF_KEYUP, 0); } break; case 18: // F3+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F3, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_F3, 0, KEYEVENTF_KEYUP, 0); } break; case 19: // F3+Shift+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F3, 0, 0, 0); keybd_event(VK_SHIFT, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_F3, 0, KEYEVENTF_KEYUP, 0); } break; case 20: // F3+ディレイ+リターン if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F3, 0, 0, 0); keybd_event(VK_F3, 0, KEYEVENTF_KEYUP, 0); Sleep(500); keybd_event(VK_RETURN, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 21: // F4 if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F4, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_F4, 0, KEYEVENTF_KEYUP, 0); } break; case 22: // F4+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F4, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_F4, 0, KEYEVENTF_KEYUP, 0); } break; case 23: // F4+Shift+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F4, 0, 0, 0); keybd_event(VK_SHIFT, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_F4, 0, KEYEVENTF_KEYUP, 0); } break; case 24: // F4+ディレイ+リターン if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F4, 0, 0, 0); keybd_event(VK_F4, 0, KEYEVENTF_KEYUP, 0); Sleep(500); keybd_event(VK_RETURN, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 25: // F5 if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F5, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_F5, 0, KEYEVENTF_KEYUP, 0); } break; case 26: // F5+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F5, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_F5, 0, KEYEVENTF_KEYUP, 0); } break; case 27: // F5+Shift+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F5, 0, 0, 0); keybd_event(VK_SHIFT, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_F5, 0, KEYEVENTF_KEYUP, 0); } break; case 28: // F5+ディレイ+リターン if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F5, 0, 0, 0); keybd_event(VK_F5, 0, KEYEVENTF_KEYUP, 0); Sleep(500); keybd_event(VK_RETURN, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 29: // F6 if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F6, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_F6, 0, KEYEVENTF_KEYUP, 0); } break; case 30: // F6+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F6, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_F6, 0, KEYEVENTF_KEYUP, 0); } break; case 31: // F6+Shift+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F6, 0, 0, 0); keybd_event(VK_SHIFT, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_F6, 0, KEYEVENTF_KEYUP, 0); } break; case 32: // F6+ディレイ+リターン if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F6, 0, 0, 0); keybd_event(VK_F6, 0, KEYEVENTF_KEYUP, 0); Sleep(500); keybd_event(VK_RETURN, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 33: // F7 if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F7, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_F7, 0, KEYEVENTF_KEYUP, 0); } break; case 34: // F7+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F7, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_F7, 0, KEYEVENTF_KEYUP, 0); } break; case 35: // F7+Shift+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F7, 0, 0, 0); keybd_event(VK_SHIFT, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_F7, 0, KEYEVENTF_KEYUP, 0); } break; case 36: // F7+ディレイ+リターン if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F7, 0, 0, 0); keybd_event(VK_F7, 0, KEYEVENTF_KEYUP, 0); Sleep(500); keybd_event(VK_RETURN, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 37: // F8 if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F8, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_F8, 0, KEYEVENTF_KEYUP, 0); } break; case 38: // F8+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F8, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_F8, 0, KEYEVENTF_KEYUP, 0); } break; case 39: // F8+Shift+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F8, 0, 0, 0); keybd_event(VK_SHIFT, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_F8, 0, KEYEVENTF_KEYUP, 0); } break; case 40: // F8+ディレイ+リターン if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F8, 0, 0, 0); keybd_event(VK_F8, 0, KEYEVENTF_KEYUP, 0); Sleep(500); keybd_event(VK_RETURN, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 41: // F9 if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F9, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_F9, 0, KEYEVENTF_KEYUP, 0); } break; case 42: // F9+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F9, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_F9, 0, KEYEVENTF_KEYUP, 0); } break; case 43: // F9+Shift+左クリック if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F9, 0, 0, 0); keybd_event(VK_SHIFT, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTDOWN,0,0,0,0); } if(uiSW == SSP_BUTTON_UP) { mouse_event(MOUSEEVENTF_LEFTUP,0,0,0,0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_F9, 0, KEYEVENTF_KEYUP, 0); } break; case 44: // F9+ディレイ+リターン if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F9, 0, 0, 0); keybd_event(VK_F9, 0, KEYEVENTF_KEYUP, 0); Sleep(500); keybd_event(VK_RETURN, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 45: // !(IME動作OFF時のみ動作可能) if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_DIVIDE, 0, 0, 0); keybd_event(VK_DIVIDE, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_SHIFT, 0, 0, 0); keybd_event('1', 0, 0, 0); keybd_event('1', 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 46: // 嬉しい(IME動作OFF時のみ動作可能) if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_DIVIDE, 0, 0, 0); keybd_event(VK_DIVIDE, 0, KEYEVENTF_KEYUP, 0); keybd_event('D', 0, 0, 0); keybd_event('D', 0, KEYEVENTF_KEYUP, 0); keybd_event('E', 0, 0, 0); keybd_event('E', 0, KEYEVENTF_KEYUP, 0); keybd_event('L', 0, 0, 0); keybd_event('L', 0, KEYEVENTF_KEYUP, 0); keybd_event('I', 0, 0, 0); keybd_event('I', 0, KEYEVENTF_KEYUP, 0); keybd_event('G', 0, 0, 0); keybd_event('G', 0, KEYEVENTF_KEYUP, 0); keybd_event('H', 0, 0, 0); keybd_event('H', 0, KEYEVENTF_KEYUP, 0); keybd_event('T', 0, 0, 0); keybd_event('T', 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 47: // ハート(IME動作OFF時のみ動作可能) if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_DIVIDE, 0, 0, 0); keybd_event(VK_DIVIDE, 0, KEYEVENTF_KEYUP, 0); keybd_event('H', 0, 0, 0); keybd_event('H', 0, KEYEVENTF_KEYUP, 0); keybd_event('E', 0, 0, 0); keybd_event('E', 0, KEYEVENTF_KEYUP, 0); keybd_event('A', 0, 0, 0); keybd_event('A', 0, KEYEVENTF_KEYUP, 0); keybd_event('R', 0, 0, 0); keybd_event('R', 0, KEYEVENTF_KEYUP, 0); keybd_event('T', 0, 0, 0); keybd_event('T', 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 48: // 汗(IME動作OFF時のみ動作可能) if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_DIVIDE, 0, 0, 0); keybd_event(VK_DIVIDE, 0, KEYEVENTF_KEYUP, 0); keybd_event('S', 0, 0, 0); keybd_event('W', 0, KEYEVENTF_KEYUP, 0); keybd_event('W', 0, 0, 0); keybd_event('W', 0, KEYEVENTF_KEYUP, 0); keybd_event('E', 0, 0, 0); keybd_event('E', 0, KEYEVENTF_KEYUP, 0); keybd_event('A', 0, 0, 0); keybd_event('A', 0, KEYEVENTF_KEYUP, 0); keybd_event('T', 0, 0, 0); keybd_event('T', 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 49: // あはは(IME動作OFF時のみ動作可能) if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_DIVIDE, 0, 0, 0); keybd_event(VK_DIVIDE, 0, KEYEVENTF_KEYUP, 0); keybd_event('A', 0, 0, 0); keybd_event('A', 0, KEYEVENTF_KEYUP, 0); keybd_event('H', 0, 0, 0); keybd_event('H', 0, KEYEVENTF_KEYUP, 0); keybd_event('A', 0, 0, 0); keybd_event('A', 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 50: // 嫌だな(IME動作OFF時のみ動作可能) if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_DIVIDE, 0, 0, 0); keybd_event(VK_DIVIDE, 0, KEYEVENTF_KEYUP, 0); keybd_event('F', 0, 0, 0); keybd_event('F', 0, KEYEVENTF_KEYUP, 0); keybd_event('R', 0, 0, 0); keybd_event('R', 0, KEYEVENTF_KEYUP, 0); keybd_event('E', 0, 0, 0); keybd_event('E', 0, KEYEVENTF_KEYUP, 0); keybd_event('T', 0, 0, 0); keybd_event('T', 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 51: // 怒り(IME動作OFF時のみ動作可能) if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_DIVIDE, 0, 0, 0); keybd_event(VK_DIVIDE, 0, KEYEVENTF_KEYUP, 0); keybd_event('A', 0, 0, 0); keybd_event('A', 0, KEYEVENTF_KEYUP, 0); keybd_event('N', 0, 0, 0); keybd_event('N', 0, KEYEVENTF_KEYUP, 0); keybd_event('G', 0, 0, 0); keybd_event('G', 0, KEYEVENTF_KEYUP, 0); keybd_event('E', 0, 0, 0); keybd_event('E', 0, KEYEVENTF_KEYUP, 0); keybd_event('R', 0, 0, 0); keybd_event('R', 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 52: // お金(IME動作OFF時のみ動作可能) if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_DIVIDE, 0, 0, 0); keybd_event(VK_DIVIDE, 0, KEYEVENTF_KEYUP, 0); keybd_event('M', 0, 0, 0); keybd_event('M', 0, KEYEVENTF_KEYUP, 0); keybd_event('O', 0, 0, 0); keybd_event('O', 0, KEYEVENTF_KEYUP, 0); keybd_event('N', 0, 0, 0); keybd_event('N', 0, KEYEVENTF_KEYUP, 0); keybd_event('E', 0, 0, 0); keybd_event('E', 0, KEYEVENTF_KEYUP, 0); keybd_event('Y', 0, 0, 0); keybd_event('Y', 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 53: // チョキ(IME動作OFF時のみ動作可能) if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_DIVIDE, 0, 0, 0); keybd_event(VK_DIVIDE, 0, KEYEVENTF_KEYUP, 0); keybd_event('G', 0, 0, 0); keybd_event('G', 0, KEYEVENTF_KEYUP, 0); keybd_event('A', 0, 0, 0); keybd_event('A', 0, KEYEVENTF_KEYUP, 0); keybd_event('W', 0, 0, 0); keybd_event('W', 0, KEYEVENTF_KEYUP, 0); keybd_event('I', 0, 0, 0); keybd_event('I', 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 54: // グー(IME動作OFF時のみ動作可能) if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_DIVIDE, 0, 0, 0); keybd_event(VK_DIVIDE, 0, KEYEVENTF_KEYUP, 0); keybd_event('B', 0, 0, 0); keybd_event('B', 0, KEYEVENTF_KEYUP, 0); keybd_event('A', 0, 0, 0); keybd_event('A', 0, KEYEVENTF_KEYUP, 0); keybd_event('W', 0, 0, 0); keybd_event('W', 0, KEYEVENTF_KEYUP, 0); keybd_event('I', 0, 0, 0); keybd_event('I', 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 55: // パー(IME動作OFF時のみ動作可能) if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_DIVIDE, 0, 0, 0); keybd_event(VK_DIVIDE, 0, KEYEVENTF_KEYUP, 0); keybd_event('B', 0, 0, 0); keybd_event('B', 0, KEYEVENTF_KEYUP, 0); keybd_event('O', 0, 0, 0); keybd_event('O', 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_RETURN, 0, 0, 0); keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 56: // 表示/非表示 if(uiSW == SSP_BUTTON_UP) { return SSP_SHOW_HIDE; } break; /* case 47: // F8+ディレイ+リターン if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F8, 0, 0, 0); keybd_event(VK_F8, 0, KEYEVENTF_KEYUP, 0); Sleep(500); keybd_event(VK_RETURN, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break; case 48: // F8+ディレイ+↓+リターン if(uiSW == SSP_BUTTON_DOWN) { keybd_event(VK_F8, 0, 0, 0); keybd_event(VK_F8, 0, KEYEVENTF_KEYUP, 0); Sleep(500); keybd_event(VK_DOWN, 0, 0, 0); keybd_event(VK_DOWN, 0, KEYEVENTF_KEYUP, 0); keybd_event(VK_RETURN, 0, 0, 0); } if(uiSW == SSP_BUTTON_UP) { keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0); } break;*/ } return SSP_TRUE; } ///////////////////////////////// End of File ////////////////////////////////////