別のアプリケーションで静的コントロールのテキストを変更しようとしています。サブクラスprocでStaticのテキストを設定するには?
プログラムからWM_SETTEXTを使用してテキストを変更できません。 (ターゲットアプリにはこれを防ぐためのメカニズムがいくつかあります)
私はターゲットアプリケーションにライブラリを挿入します。ライブラリでは、静的コントロールをサブクラス化します。私は私がSubclassWndProcでプログラムブレークすることができ、デバッグしていたときに、静的にテキストを設定するには、ウィンドウの探偵を使用し
WNDPROC wndProcOrig;
LRESULT CALLBACK SubclassWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
switch (uMsg) {
case WM_SETTEXT:
DefWindowProc(hWnd, uMsg, wParam, (LPARAM)"1234");
return TRUE;
case WM_USER + 5003:
return TRUE;
}
return CallWindowProc(wndProcOrig, hWnd, uMsg, wParam, lParam);
}
wndProcOrig = (WNDPROC)SetWindowLongPtr(textHandle, GWLP_WNDPROC, (LONG_PTR)SubclassWndProc);
。私が観察している何
は:
- SubclassWndProcが呼び出されます。
- たlParamの文字列が呼び出される関数の後
- (値は、ターゲットアプリによって変更された)常に空ですが、テキストは空のままである(ない「1234」)
質問:
- ターゲットアプリケーションはどのようにメッセージ値を変更しますか?
- 'DefWindowProc'静的コントロールのテキストを変更するために最も基本的なAPIプログラマが使用できますか?そうでない場合は、Staticコントロールのテキストを変更するにはどうすればよいでしょうか?