ログインしてさらにmixiを楽しもう

コメントを投稿して情報交換!
更新通知を受け取って、最新情報をゲット!

Win32APIコミュのウインドウズのアプリケーションのキー入力を自動化したい

  • mixiチェック
  • このエントリーをはてなブックマークに追加
日常的に使っている業務で、ウインドウズのアプリケーションのキー入力を自動化したい。この様なソフトは、確かにあるが。思う様にキー入力が出来ない場合も多々ある。この際に、基本から見直してwin32apiを駆使して、解決を図りたい。

私は、この手は初心者で、詳しくは有りません。SendMessage,FindWindow,FindWindowEx位しか思いつく物は有りませんが。この手の何かサンプルが有ったら、宜しくお願いします。とっかかりが、分かりません。

初めて投稿しますが。宜しくお願いします。

コメント(1)

メモ帳を起動してキー入力するサンプルです。Windows7 で動作すると思います。
質問する場合はOS名を記載したほうがいいですよ。
#include <windows.h>

bool AutoInput(HWND hWnd, char *ps);

int main(void)
{
  char szInput[] = "1234";
  HWND hNoteWnd = NULL;

  ShellExecute(NULL, NULL, "Notepad.exe", NULL, NULL, SW_SHOWNORMAL);
  Sleep(3000);  // メモ帳の起動を待つ
  hNoteWnd = FindWindow("Notepad", NULL);
  if (IsWindow(hNoteWnd)) {
    AutoInput(hNoteWnd, szInput);
  }
  return 0;
}

bool AutoInput(HWND hWnd, char *ps)
{
  enum {FOREGROUND_TIMEOUT = 3000};   // Timeout: 3sec
  DWORD dwTick;

  SetForegroundWindow(hWnd);
  dwTick = GetTickCount();
  while (GetForegroundWindow() != hWnd) {
    if (GetTickCount() - dwTick > FOREGROUND_TIMEOUT) {
      return false;
    }
    Sleep(100);
  }
  for (int ni = 0; ps[ni]; ++ni) {
    keybd_event(ps[ni], (BYTE)MapVirtualKey(ps[ni], 0), 0, 0);
    Sleep(100);
    keybd_event(ps[ni], (BYTE)MapVirtualKey(ps[ni], 0), KEYEVENTF_KEYUP, 0);
    Sleep(100);
  }
  return true;
}

実際に入力したいキーの VirtualKey 値を指定する必要があります
VirtualKey で調べてください。

ログインすると、みんなのコメントがもっと見れるよ

mixiユーザー
ログインしてコメントしよう!

Win32API 更新情報

Win32APIのメンバーはこんなコミュニティにも参加しています

星印の数は、共通して参加しているメンバーが多いほど増えます。

人気コミュニティランキング