2017-07-10 1 views
-1

Ich versuche den Text eines statischen Steuerelements in einer anderen Anwendung zu ändern.Wie setze ich Text für Static in Unterklasse proc?

Ich kann seinen Text nicht ändern, indem Sie WM_SETTEXT aus meinem Programm verwenden. (Die Ziel-App hat einige Mechanismen, um dies zu verhindern)

Also spritze ich eine Bibliothek in die Ziel-App. In der Bibliothek unterlasse ich die statische Kontrolle.

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); 

Ich benutze das Fenster Detective den Text zum Statisch zu setzen, wenn ich mich das Debuggen kann das Programm bricht in SubclassWndProc.

Was ich beobachtet habe:

  1. Die SubclassWndProc aufgerufen.
  2. Die Kette von lParam ist immer leer (der Wert von Ziel-App geändert wird)
  3. Nach Aufruf der Funktion ist der Text immer noch leer (nicht 1234)

Fragen:

  1. Wie ändert die Ziel-App den Nachrichtenwert?
  2. Ist 'DefWindowProc' der am meisten zugrunde liegende API-Programmierer verwenden können, um Text einer statischen Kontrolle zu ändern? Wenn nicht, was ist der beste Weg, um den Text eines statischen Steuerelements zu ändern? (Versuchte SetWindowText, SetDlgItemText, Sendmessage mit WM_SETTEXT, weder Werke)

Antwort

1

Ja DefWindowProc ist im Grunde das niedrigste Niveau, aber ein Fenster does not have to use it, es WM_GETTEXT stattdessen direkt beantworten kann.

Versuchen Sie, WM_GETTEXT und WM_SETTEXT direkt an DefWindowProc zu übergeben.

Verwandte Themen