SendMessage関数がうまく動作しません
いろんなWindowsのアプリケーションの設定を、プログラムから自動実行するようにしたく、テストでWinodowsのメモ帳の設定を一部自動設定するソースコードを書いてみたのですが、どうもうまくいきません。
実行して、メッセージを表示することはできるのですが、メモ帳のページ設定ウィンドウのエディットコントロールに、目的のテキストが入力されません。
コントロールのIDも、何度も確認したので、間違ってはいないと思うのですが、なぜ、目的のテキストが入力されないのでしょうか。
SendMessage関数の参考ページは、いろいろと調べてみまして、目的のことをするのであれば、以下で問題なと思うのですが、なぜか、うまくいきません。
もし、お分かりの方がいらっしゃったら、お知恵を拝借いただけないでしょうか。
■ 開発&実行環境
Windows XP XP3 32bit
c++
■ 動作
Winodowsのメモ帳のページ設定ウィンドウが開いているときに、フッター(F)のエディットコントロール
のテキストを既定のものに置き換える。
■ ソースコード
/* 取りあえず、よく利用しそうなものをインクルード */
#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <commctrl.h>
#include <tchar.h>
DWORD dwSleepTime = 3000;
DWORD dwSleepTime1 = 1000;
DWORD dwSleepTime2 = 5000;
void SendKeysC(
BYTE bVk // 仮想キーコード
) {
// キーの押し下げをシミュレートする。
keybd_event( bVk, MapVirtualKey(bVk, 0), KEYEVENTF_EXTENDEDKEY | 0, 0 );
// キーの解放をシミュレートする。
keybd_event( bVk, MapVirtualKey(bVk, 0), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
}
void SendKeysExC(
BYTE bVk1, // 仮想キーコード
BYTE bVk2 // 仮想キーコード
) {
// キーの押し下げをシミュレートする。
keybd_event( bVk1, MapVirtualKey(bVk1, 0), KEYEVENTF_EXTENDEDKEY | 0, 0 );
// キーの押し下げをシミュレートする。
keybd_event( bVk2, MapVirtualKey(bVk2, 0), KEYEVENTF_EXTENDEDKEY | 0, 0 );
// キーの解放をシミュレートする。
keybd_event( bVk2, MapVirtualKey(bVk2, 0), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
// キーの解放をシミュレートする。
keybd_event( bVk1, MapVirtualKey(bVk1, 0), KEYEVENTF_EXTENDEDKEY | KEYEVENTF_KEYUP, 0);
}
int main(int argc, char *argv[]) {
HWND hWnd1;
HWND hWndTmp;
char *sNum;
LPCTSTR lpszText;
lpszText = _T("サンプル");
sNum = "start";
MessageBox(NULL, "フォアグラウンドウィンドウを選択してある?", "OK", MB_OK);
hWnd1 = GetForegroundWindow();
Sleep(dwSleepTime);
SendKeysC(0X09);
Sleep(dwSleepTime);
//メモ帳のページ設定ウィンドウのフッター(F)のエディットコントロール
hWndTmp = NULL;
hWndTmp = GetDlgItem(hWnd1, 122);
SendKeysExC(0X10, 0X09);
Sleep(dwSleepTime);
::SendMessage(hWndTmp,WM_SETTEXT,0,(LPARAM)"test");
Sleep(dwSleepTime);
return 0;
}
お礼
回答ありがとうございます。 そうですか、やっぱり破棄はしない方が良さそうですね。 隠しにして、動作の保証を優先させたいと思います。 迅速なレスありがとうございました。またよろしくお願いします。