2017-07-10 6 views
-1

別のアプリケーションで静的コントロールのテキストを変更しようとしています。サブクラス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); 

。私が観察している何

は:

  1. SubclassWndProcが呼び出されます。
  2. たlParamの文字列が呼び出される関数の後
  3. (値は、ターゲットアプリによって変更された)常に空ですが、テキストは空のままである(ない「1234」)

質問:

  1. ターゲットアプリケーションはどのようにメッセージ値を変更しますか?
  2. 'DefWindowProc'静的コントロールのテキストを変更するために最も基本的なAPIプログラマが使用できますか?そうでない場合は、Staticコントロールのテキストを変更するにはどうすればよいでしょうか?

答えて

1

(SetWindowText関数、SetDlgItemText、WM_SETTEXTとのSendMessage、どちらの作品を試してみました)はいDefWindowProcは基本的に最低レベルが、ウィンドウdoes not have to use itあり、それは代わりに、直接WM_GETTEXTに答えることができます。

WM_GETTEXTWM_SETTEXTを直接DefWindowProcに転送してみてください。

関連する問題