一定時間毎に現在のフォアグラウンドウィンドウに対してkeybd_eventを起こしたい

[戻る]
XTORT 2004/07/21(水) 23:09:30
はじめまして。
現在C言語WindowsSDKでプログラミング言語の勉強をかねてツールを開発しています。
タイトルどおり一定時間毎に現在のフォアグラウンドウィンドウに対してkeybd_eventを
起こしたいのですが、どのようにしたらいいのでしょう。
このとき、フォーカスは作成してるツールではなく、別のソフトウェアにあります。

setTimer()関数でWM_TIMERメッセージを送信してウィンドウプロシージャで処理させたと
きは、呼び出し間隔が長ければ一定間隔で呼び出すことができたのですが、setTimer()で
は精度が悪すぎて、間隔を短くした場合にうまく動作させることができませんでした。
そこで現在は下記のようにメッセージループ内でTimerFunc()を呼び、その中で
keybd_eventを発生させているのですが、フォーカスがツールにないので一定間隔で呼び
出すことができません。一定時間毎にTimerFuncを呼び出すにはどうしたらよいでしょ
う?

while(GetMessage(&msg, NULL, 0, 0))
{
  TranslateMessage(&msg); // キーボードメッセージを変換する 
  DispatchMessage(&msg); //メッセージをウインドウプロシージャに転送
  if(flag){
    NowTime = timeGetTime();
    if(StartTime <= NowTime){
      TimerFunc();
      StartTime = NowTime + stp4;//stp4間隔で周期呼び出しする
    }
  }
  Sleep(1);
}

よろしくお願いします。

XTORT 2004/07/21(水) 23:57:41
追記です。
TimerFunc()内ではkeybd_eventを指定回数呼び出しています。
(要するにキーボードを一定間隔で連打した状態を作り出したい)

そして、連打は指定回数が終了する前に、途中で中断させる可能性があるのです。
スレッドを1個作成だけ作成し、そこで実行させれば一定時間毎に連打するのは簡単
だと考えたのですが、スレッドを途中終了させるのが難しいようです・・・。

ですから、スレッドを使ってなおかつそれを途中終了させる方法か、
スレッドを使わずにすむ方法をどなたかご存知ないでしょうか?

επιστημη 2004/07/22(木) 01:20:43
なにやらあっちこっちにおんなじ質問が投げ込まれていますが、
マルチポストは嫌われますよ。

古いスレッドには追加発言できません。