私はいくつかの典型的な問題を抱えています。ユーザーが sendText() 関数を利用できるようにします。彼は例えばタイプすることができます
sendText( "mytext{newline}text{up}" )
{text} は、ユーザーが送信できる特別なキーです。特殊なキーがたくさんあります。
したがって、私の最初のステップは、{} ブラケット間の文字列を取得して作成することでした:
if( _specialKey == "newline" ) {
// action for VK_RETURN
} else if( _specialKey == "up" ) {
// action for VK_UP
} else .....
例:
if( specialKey == "n" ) {
// enter click
unsigned short key = VK_RETURN;
inputs.push_back( keyDown( key ) );
inputs.push_back( keyUp( key ) );
return 2;
} else if( specialKey == "n+" ) {
// enter down
inputs.push_back( keyDown( VK_RETURN ) );
return 2;
} else if( specialKey == "n-" ) {
// enter up
inputs.push_back( keyUp( VK_RETURN ) );
return 2;
} else if( specialKey == "t" ) {
// tabulator click
unsigned short key = VK_TAB;
inputs.push_back( keyDown( key ) );
inputs.push_back( keyUp( key ) );
return 2;
} else if( specialKey == "t+" ) {
// tabulator down
inputs.push_back( keyDown( VK_TAB ) );
return 2;
} else if( specialKey == "t-" ) {
// tabulator up
inputs.push_back( keyUp( VK_TAB ) );
return 2;
} else if( specialKey == "caps" ) {
// caps lock click
unsigned short key = VK_CAPITAL;
inputs.push_back( keyDown( key ) );
inputs.push_back( keyUp( key ) );
return 2;
} else if( specialKey == "caps+" ) {
// caps lock down
inputs.push_back( keyDown( VK_CAPITAL ) );
return 2;
} else if( specialKey == "caps-" ) {
// caps lock up
inputs.push_back( keyUp( VK_CAPITAL ) );
return 2;
} else if( specialKey == "ralt" ) {
// right alt click
unsigned short key = VK_RMENU;
inputs.push_back( keyDown( key ) );
inputs.push_back( keyUp( key ) );
return 2;
} else if( specialKey == "ralt+" ) {
// right alt down
inputs.push_back( keyDown( VK_RMENU ) );
return 2;
} else if( specialKey == "ralt-" ) {
// right alt up
inputs.push_back( keyUp( VK_RMENU ) );
return 2;
} else if( specialKey == "lalt" ) {
// right alt click
unsigned short key = VK_LMENU;
inputs.push_back( keyDown( key ) );
inputs.push_back( keyUp( key ) );
return 2;
} else if( specialKey == "lalt+" ) {
// right alt down
inputs.push_back( keyDown( VK_LMENU ) );
return 2;
} else if( specialKey == "lalt-" ) {
// right alt up
inputs.push_back( keyUp( VK_LMENU ) );
return 2;
} else if( specialKey == "rctrl" ) {
// right alt click
unsigned short key = VK_RCONTROL;
inputs.push_back( keyDown( key ) );
inputs.push_back( keyUp( key ) );
return 2;
} else if( specialKey == "rctrl+" ) {
// right alt down
inputs.push_back( keyDown( VK_RCONTROL ) );
return 2;
} else if( specialKey == "rctrl-" ) {
// right alt up
inputs.push_back( keyUp( VK_RCONTROL ) );
return 2;
} else if( specialKey == "lctrl" ) {
しかし、コンパイラは次のように述べています。
fatal error C1061: compiler limit : blocks nested too deeply
それを解決するための私の最初のアイデアは、整数にマップされるすべての特殊キーを (文字列として) 格納するマップを定義することでした。次に、次のことができます。
switch( map[key] ) {
case 0:
...
}
しかし、コンパイラもそれについて文句を言わないかどうかはわかりません。変えなければならないことがたくさんあるので、結果が出ないから変えたくありません。
それとも、他にもっと良いアイデアがありますか?
ありがとう。