61197


今までRPAソフトウェアを使用し、テキストボックスからのテキストの抽出を行っていましたが、  
タイトルのような必要性が発生しました。

テキストを抽出したいソフトウェアは、独自のコントロールを使用しているようで、  
Visual StudioのSpy++で調べるとクラスはCustomと表示されます。  
ただ、リアルタイムで表示テキストの内容は変わるため、  
それをイベントとして、更新テキストをキャッチするようなことが  
C++またはC#で可能でしょうか。


CC BY-SA 4.0
2019-12-07T05:11:20.227
61196
2019-12-07T06:53:20.947
27065
question
c# c++ windows
テキストボックスではないウィンドウのコントロールからテキストを抽出したい


出来るようですね。[SetWinEventHook function](https://docs.microsoft.com/en-
us/windows/win32/api/winuser/nf-winuser-setwineventhook?redirectedfrom=MSDN)
と、[WinEvents](https://docs.microsoft.com/en-
us/windows/win32/winauto/winevents-collision169?redirectedfrom=MSDN)
というのを使うようです。

使えるイベント [Event Constants](https://docs.microsoft.com/en-
us/windows/win32/winauto/event-constants)

この辺の記事が参考になるでしょう。  
オリジナル [Setting up Hook on Windows
messages](https://stackoverflow.com/q/9665579/9014308) / 翻訳 [c＃ –
Windowsメッセージにフックを設定する](https://codeday.me/jp/qa/20190124/180441.html)

日本語の記事の例  
[Windowsのイベントを拾う](https://sites.google.com/site/agkh6mze/howto/winevent)

その他にこんな記事も。  
[Window Title Changed Event](https://stackoverflow.com/q/8764348/9014308)  
[asynchronously GetForegroundWindow via SendMessage or
something?](https://stackoverflow.com/q/8840926/9014308)  
[Log all Windows that are Closed in
Windows](https://stackoverflow.com/q/8648386/9014308)

ウインドウハンドルが分かっていて、タイミングは気にしないなら、このAPIで取れるのでは？  
[GetWindowTextLengthW function](https://docs.microsoft.com/en-
us/windows/win32/api/winuser/nf-winuser-getwindowtextlengthw) /
[GetWindowTextW function](https://docs.microsoft.com/en-
us/windows/win32/api/winuser/nf-winuser-getwindowtextw)

* * *

**追記**  
他プロセスの場合はSendMessageでWM_xxxxを送る必要がありましたね。  
[他アプリのウインドウ内の文字列を取得するには](https://www.nishishi.com/blog/2006/04/wm_gettext.html)

[WM_GETTEXTLENGTH message](https://docs.microsoft.com/ja-
jp/windows/win32/winmsg/wm-gettextlength) / [WM_GETTEXT
message](https://docs.microsoft.com/ja-jp/windows/win32/winmsg/wm-gettext)  
ただし対象アプリがハングアップしていないかどうかは気を付ける必要があるようです。  
[他のウィンドウのテキストの取得](http://home.att.ne.jp/delta/hrymkt/PTIPS/GetOtrText.html)

他にこんな注意も。  
[SendMessageのWM_GETTEXTとWM_GETTEXTLENGTHで大幅に文字数が異なる](https://ja.stackoverflow.com/q/38214/26370)


CC BY-SA 4.0
2019-12-07T05:42:43.193
61197
2019-12-07T06:53:20.947
2019-12-07T06:53:20.947
26370
26370
61196
answer