Windowsは他のプロセスのEditコントロールの内容を取得します

1987 ワード

最近のMFCプロジェクトでは、他のプロセスでEditコントロールの内容を取得する需要があり、簡単な問題だと思っていたが、何度も繰り返して時間を費やし、ブログを記録した.
最初にこの問題を手に入れたばかりで、自然とGetDlgItemText()を思い浮かべました.
UINT GetDlgItemText(

  HWND hDlg,       // handle to dialog box

  int nIDDlgItem,  // control identifier

  LPTSTR lpString, // pointer to buffer for text

  int nMaxCount    // maximum size of string

);

The GetDlgItemText function retrieves the title or text associated with a control in a dialog box. 
APIの記述は実装するニーズと同様に自然に用いられるが,いずれにしてもこのAPIは常に呼び出しに失敗し,コンテンツが得られないことが分かった.コードのどこが問題なのかと思っていたので、長い間デバッグしていました.その後、GoogleはCSDNフォーラムで古い投稿を見つけ、このAPIがWindows 2 K以前のシステムでしかプロセスをまたいで使用できないことを知り、あきらめた.
 
そこで調べたらもう一つGetWindowText()
int GetWindowText(

  HWND hWnd,        // handle to window or control

  LPTSTR lpString,  // text buffer

  int nMaxCount     // maximum number of characters to copy

);

The GetWindowText function copies the text of the specified window's title bar (if it has one) into a buffer. If the specified window is a control, the text of the control is copied. However, GetWindowText cannot retrieve the text of a control in another application.
説明には他のプログラムには使えないとはっきり書いてあり、また失敗しました.
PS:ツッコミを入れて、なぜGetDlgItemText()にこの言葉を書かないのか、私の時間を無駄にします.╮(╯▽╰)╭
 
解決方法:SendMessage()を使用してプロセスにWM_を送信GETTEXTメッセージ取得.
  SendMessage(handle,message,Wparam,lparam);
Handleはウィンドウハンドルで、
Messageはメッセージタイプで、
wparamとlparamはメッセージパラメータである.
  WM_GETTEXT    An application sends a WM_GETTEXT message to copy the text that corresponds to a window into a buffer provided by the caller.
 
実はこのメッセージを使うのはGetwindowText()を使うのと同じです...