質問編集履歴

5

まとめた

2018/01/22 06:32

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -1,3 +1,11 @@
1
+ ###わかったこと
2
+
3
+ - Win7の電卓アプリはボタンに絵が表示されていてキャプションは空。
4
+
5
+ - WM_GETTEXTは`wstring`型で受けたほうが良い
6
+
7
+ - WM_GETTEXTで取得できる文字列は途中に`'\0'`を含むかもしれないので文字列を受ける側の変数にあらかじめWM_GETTEXTLENGTHで文字長を指定するなら取得後に再度文字長を定義したほうが良い
8
+
1
9
  ###前提・実現したいこと
2
10
 
3
11
  UIオートメーションを実現するためにテストとして、とりあえずWindowsに標準でインストールされている電卓を操作しようとしています。

4

wstringに変更。ウィンドウのボタン上の文字を取得するんだからそりゃstd::stringじゃ力不足よね・・・

2018/01/22 06:32

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -114,13 +114,13 @@
114
114
 
115
115
  // SendMessage(hwnd, WM_GETTEXT, bufLen, (LPARAM)&buf[0]);
116
116
 
117
- std::string buf;
117
+ std::wstring buf; //wstringに変更 std::string buf;
118
118
 
119
119
  buf.resize(bufLen);
120
120
 
121
121
  SendMessage(hwnd, WM_GETTEXT, bufLen, (LPARAM)&buf[0]);
122
122
 
123
- buf.resize(std::char_traits<char>::length(&buf[0]));
123
+ buf.resize(std::char_traits<wchar_t>::length(&buf[0])); //wstringに変更 char>::length(&buf[0]));
124
124
 
125
125
 
126
126
 

3

感情的な言い回しを是正

2018/01/22 04:41

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -4,17 +4,13 @@
4
4
 
5
5
  いま、取得できるハンドラのうちどれがどのボタンか判別ができずにいます。
6
6
 
7
- ~~ そこで、WM_GETTEXTをGetMessage関数に指定してボタンのキャプションを取得しようしています。
7
+ ~~そこで、WM_GETTEXTをGetMessage関数に指定してボタンのキャプションを取得しようしています。~~
8
8
 
9
- ですが、以下のメッセージが発生しており如何ともならなくなっている状況です。
9
+ ~~ですが、以下のメッセージが発生しており如何ともならなくなっている状況です。~~
10
10
 
11
+ ~~また、どのハンドラーがどのボタンであるかを判断する方法が他にあれば`GetMessage`関数が使えなくとも良いです。~~
11
12
 
12
-
13
- また、どのハンドラーがどのボタンであるかを判断する方法が他にあれば`GetMessage`関数が使えなくとも良いです。
14
-
15
- ~~
16
-
17
- まったく駄目でした。ボタンのキャプションほとんどが空になっており終端文字`'\0'`しか取得できず何の役にも立ちません。
13
+ ボタンのキャプションを取得して判別しようとしましたがほとんどが空になっており終端文字`'\0'`しか取得できず目的を達成できません。
18
14
 
19
15
  電卓のボタンをそれぞれ特定するために良い方法はないでしょうか?
20
16
 

2

キャプションを取る方法で駄目だったので質問内容を修正

2018/01/22 03:43

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  いま、取得できるハンドラのうちどれがどのボタンか判別ができずにいます。
6
6
 
7
- そこで、WM_GETTEXTをGetMessage関数に指定してボタンのキャプションを取得しようしています。
7
+ ~~ そこで、WM_GETTEXTをGetMessage関数に指定してボタンのキャプションを取得しようしています。
8
8
 
9
9
  ですが、以下のメッセージが発生しており如何ともならなくなっている状況です。
10
10
 
@@ -12,9 +12,19 @@
12
12
 
13
13
  また、どのハンドラーがどのボタンであるかを判断する方法が他にあれば`GetMessage`関数が使えなくとも良いです。
14
14
 
15
+ ~~
16
+
17
+ まったく駄目でした。ボタンのキャプションはほとんどが空になっており終端文字`'\0'`しか取得できず何の役にも立ちません。
18
+
19
+ 電卓のボタンをそれぞれ特定するために良い方法はないでしょうか?
20
+
15
21
 
16
22
 
17
23
  よろしくお願いいたします。
24
+
25
+
26
+
27
+ **以下は解決しました。**
18
28
 
19
29
  ###発生している問題・エラーメッセージ
20
30
 
@@ -104,9 +114,17 @@
104
114
 
105
115
  if (bufLen > 1) {
106
116
 
107
- std::vector<char> buf[bufLen];
117
+ // std::vector<char> buf[bufLen]; ご指摘を受けて改善
118
+
119
+ // SendMessage(hwnd, WM_GETTEXT, bufLen, (LPARAM)&buf[0]);
120
+
121
+ std::string buf;
122
+
123
+ buf.resize(bufLen);
108
124
 
109
125
  SendMessage(hwnd, WM_GETTEXT, bufLen, (LPARAM)&buf[0]);
126
+
127
+ buf.resize(std::char_traits<char>::length(&buf[0]));
110
128
 
111
129
 
112
130
 

1

質問をすこしすっきりさせました

2018/01/22 03:39

投稿

notgoodpg
notgoodpg

スコア37

test CHANGED
File without changes
test CHANGED
@@ -1,12 +1,16 @@
1
1
  ###前提・実現したいこと
2
2
 
3
- UIオートメーションを実現するためにテストとして電卓を操作しようとしています。
3
+ UIオートメーションを実現するためにテストとして、とりあえずWindowsに標準でインストールされている電卓を操作しようとしています。
4
4
 
5
- しかしボタンを特定する事ができなため、取得できるハンドラのうちどれがどのボタンか判別ができずにいます。
5
+ 、取得できるハンドラのうちどれがどのボタンか判別ができずにいます。
6
6
 
7
7
  そこで、WM_GETTEXTをGetMessage関数に指定してボタンのキャプションを取得しようしています。
8
8
 
9
- そのとき、以下のメッセージが発生しました
9
+ ですが、以下のメッセージが発生しており如何ともならなくなっている状況です
10
+
11
+
12
+
13
+ また、どのハンドラーがどのボタンであるかを判断する方法が他にあれば`GetMessage`関数が使えなくとも良いです。
10
14
 
11
15
 
12
16