質問編集履歴
5
まとめた
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じゃ力不足よね・・・
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
感情的な言い回しを是正
test
CHANGED
File without changes
|
test
CHANGED
@@ -4,17 +4,13 @@
|
|
4
4
|
|
5
5
|
いま、取得できるハンドラのうちどれがどのボタンか判別ができずにいます。
|
6
6
|
|
7
|
-
~~
|
7
|
+
~~そこで、WM_GETTEXTをGetMessage関数に指定してボタンのキャプションを取得しようしています。~~
|
8
8
|
|
9
|
-
ですが、以下のメッセージが発生しており如何ともならなくなっている状況です。
|
9
|
+
~~ですが、以下のメッセージが発生しており如何ともならなくなっている状況です。~~
|
10
10
|
|
11
|
+
~~また、どのハンドラーがどのボタンであるかを判断する方法が他にあれば`GetMessage`関数が使えなくとも良いです。~~
|
11
12
|
|
12
|
-
|
13
|
-
また、どのハンドラーがどのボタンであるかを判断する方法が他にあれば`GetMessage`関数が使えなくとも良いです。
|
14
|
-
|
15
|
-
~~
|
16
|
-
|
17
|
-
|
13
|
+
ボタンのキャプションを取得して判別しようとしましたがほとんどが空になっており終端文字`'\0'`しか取得できず目的を達成できません。
|
18
14
|
|
19
15
|
電卓のボタンをそれぞれ特定するために良い方法はないでしょうか?
|
20
16
|
|
2
キャプションを取る方法で駄目だったので質問内容を修正
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
質問をすこしすっきりさせました
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
|
|