ホップ・ステップ・εミ(ο_ _)ο ドテッ

プログラミングの風景をちょいとぶつぶつ書きつづってみようというテスト

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  98  : 記事  1  : コメント  1207  : トラックバック  9

ニュース

ゆーち

Y.Uchiyama

 福岡県在住
 株式会社シーソフト
 代表取締役
 現役職人です(`^´)
 主にC++を使ってます
リアルマイミク募集中w
 (・∀・)Mixi
フォローよろしくw
 (・∀・)Twitter

記事カテゴリ

書庫

日記カテゴリ

ギャラリ

keybd_event 使って2バイト系文字列を処理するのって、結構大変だったんだよね・・・
いつの間にか、SendInput なるAPIができているらしく、UNICODEで処理できるようになってました。

つうことで、書き上げたモジュールをさらしておきます。
#include <windows.h>
#include <vector>
#include <string>

// マルチバイト文字用(CP_ACP固定w)
void KeyInput( const char *Text_ )
{
  std::wstring  wstr;
  int length = ::MultiByteToWideChar( CP_ACP, 0, Text_, -1, NULL, 0 );
  if( length == 0 )
  {
    return;
  }
  else
  {
    wstr.resize( length );
    ::MultiByteToWideChar( CP_ACP, 0, Text_, -1, &wstr[ 0 ], length );
  }
  std::vector<INPUT>  inputs;
  for( int i = 0; i < length; i++ )
  {
    for( int j = 0; j < 2; j++ )
    {
      INPUT input;
      input.type        = INPUT_KEYBOARD;
      input.ki.wVk      = 0;
      input.ki.wScan      = wstr[ i ];
      input.ki.time     = 0;
      input.ki.dwExtraInfo  = 0;
      input.ki.dwFlags    = KEYEVENTF_UNICODE;
      if( j != 0 )
      {
        input.ki.dwFlags  |= KEYEVENTF_KEYUP;
      }
      inputs.push_back( input );
    }
  }
  ::SendInput( length * 2, &inputs[ 0 ], sizeof( INPUT ) );
  return;
}

// VK_xxx 用
void VKeyInput( int *VKeys_, int Count_ )
{
  std::vector<INPUT>  inputs;
  for( int i = 0; i < Count_; i++, VKeys_++ )
  {
    for( int j = 0; j < 2; j++ )
    {
      INPUT input;
      input.type        = INPUT_KEYBOARD;
      input.ki.wVk      = *VKeys_;
      input.ki.wScan    = ::MapVirtualKey( *VKeys_, 0 );
      input.ki.time     = 0;
      input.ki.dwExtraInfo  = 0;
      input.ki.dwFlags    = KEYEVENTF_SCANCODE;
      if( j != 0 )
      {
        input.ki.dwFlags  |= KEYEVENTF_KEYUP;
      }
      inputs.push_back( input );
    }
  }
  ::SendInput( Count_ * 2, &inputs[ 0 ], sizeof( INPUT ) );
  return;
}
動作検証するとき、デバッガでブレークポイントを貼ると、フォーカスがソース上に移るので、ソースが書き変わっちゃって困った(笑)
投稿日時 : 2010年7月26日 12:43

コメント

No comments posted yet.

Post Feedback

タイトル
名前
Url:
コメント