![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
いろんな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;
}
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
MessageBox の OK ボタンをクリックした時点で MessageBox を表示したアプリケーションがフォアグラウンドになるのでは?
FindWindか何か別の方法でターゲットのウィンドウのウィンドウハンドルを取得した方がいいと思います。
ご回答ありがとうございます。
また、お礼に大変遅れてしまい申し訳ありません。
私もその可能性を考えて、ご指摘のような方法で
ウィンドウタイトルを取得して、フォアグランドが
どのウィンドウになっているか、確認したのですが
目的のウィンドウがフォアグラウンドになっておりました。
それに、エディットボックスでないコントロールのウィンド
ウテキストは取得できたので、フォアグラウンドに関しては
問題ないかと思います。
私は、まだ、勉強不足なところもあるかと思いますので
継続して調べて行こうと思います。
貴重なお時間を使って、アドバイスいただき
誠にありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Excel(エクセル) 【VBA】 Alt+PrintScreenにてアクティブウィンドウのスクショを貼付する方法 4 2022/12/08 20:53
- C言語・C++・C# このプログラミング誰か教えてくれませんか 1 2022/06/02 15:27
- Windows 10 (続き2)2つのウィンドウ選択時の表示について 3 2023/08/21 22:41
- C言語・C++・C# カードシャッフルのブログラムを使ってc言語でブラックジャックをしたい 2 2022/04/12 15:13
- C言語・C++・C# const char** p;のとき、free(p)でC4090エラーとなるのはなぜですか 3 2023/03/31 16:28
- C言語・C++・C# プログラミングの授業の課題です 1 2023/01/17 22:15
- C言語・C++・C# win10で、正確な待ち時間の作り方 6 2023/02/14 18:28
- C言語・C++・C# バイナリファイルをコピーするのにかかる時間を測りたいのですが実行するとFatel error:gli 2 2022/11/03 01:10
- C言語・C++・C# c言語の問題です 3 2023/01/10 16:15
- Word(ワード) IMEパッドがショートカットキーで開かないのですが。。。 5 2023/06/11 09:23
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
勝手にウィンドウが開いて止ま...
-
Vba LongPtrについて教えてくだ...
-
作成したウインドウのサイズを...
-
OutlookでRSSフィードやメモの...
-
ラジオボタンの初期指定
-
他のアプリケーションの終了処理
-
GLUTでのウィンドウの左上のア...
-
「&HFFFF」「&H1A」とは?
-
ゲームでは結局どっちが良いの?
-
Excelの上下を固定したい
-
パソコン関連)何度消してもま...
-
【VB2008】 マウス操作の一時的...
-
子ウィンドウに発生したイベント
-
[VBA] UserForm を Excel の W...
-
Alt+P,Alt+NをPostmessageで送...
-
VBで外部プログラムを位置のみ...
-
複数のビュー表示について
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
検索の画面がでなくなってしま...
-
勝手にウィンドウが開いて止ま...
-
ゲームでは結局どっちが良いの?
-
ラジオボタンの初期指定
-
VBA .Value=.Value ?
-
Excelの上下を固定したい
-
ExcelのBOOKが消えた!
-
他のアプリケーションの終了処理
-
Vba LongPtrについて教えてくだ...
-
作成したウインドウのサイズを...
-
UWSCで特定のChromeのタブをア...
-
[VBA] UserForm を Excel の W...
-
MFC ダイアログ上のID取得につ...
-
Alt+P,Alt+NをPostmessageで送...
-
「&HFFFF」「&H1A」とは?
-
ExcelVBAでAPIを使って外部ウイ...
-
親ウインドウにあるOKボタンを...
-
EnumChildWindowsの使い方(VBA)
おすすめ情報