No hay maneras agradables para hacer esto, pero uno de los enfoques que pueden funcionar para usted es para conectar la aplicación en cuestión usando SetWindowsHookEx (...) para añadir un GetMsgProc, que se basa en la superposición respuesta a los mensajes WM_PAINT. La idea básica es que estés dibujando TUS gráficos justo después de que la aplicación termine su propio dibujo.
En su aplicación principal:
....
HMODULE hDllInstance = LoadLibrary("myFavoriteDll");
HOOKPROC pOverlayHook = (HOOKPROC)GetProcAddress(hDllInstance, "OverlayHook");
SetWindowsHookEx(WH_GETMESSAGE, pOverlayHook, hDllInstance, threadId);
apagado en una DLL en alguna parte:
LRESULT CALLBACK OverlayHook(int code, WPARAM wParam, LPARAM lParam)
{
//Try and be the LAST responder to WM_PAINT messages;
//Of course, if some other application tries this all bets are off
LRESULT retCode = CallNextHookEx(NULL, code, wParam, lParam);
//Per GetMsgProc documentation, don't do anything fancy
if(code < 0) return retCode;
//Assumes that target application only draws when WM_PAINT message is
//removed from input queue.
if(wParam == PM_NOREMOVE) return retCode;
MSG* message = (MSG*)lParam;
//Ignore everything that isn't a paint request
if(message->message != WM_PAINT) return retCode;
PAINTSTRUCT psPaint;
BeginPaint(message->hwnd, &psPaint);
//Draw your overlay here
...
EndPaint(message->hwnd, &psPaint);
return retCode;
}
Esto es todo lo que su Win32 C# código será p/invocar pesado y correspondientemente bastante feo. Su DLL no debe ser administrado también (si tiene la intención de inyectarlo en un proceso que no sea el suyo), lo que lo convierte en una solución aún más desagradable.
Esto resolvería su problema con los problemas de z-order y clipping, ya que está renderizando en la ventana misma. Sin embargo, si la aplicación a la que se dirige hace que cualquier dibujo fuera del WinProc que responda a WM_PAINT se desmorone; esto no es una ocurrencia completamente inusual.
¿Puede ser más específico en cuanto a lo que quiere hacer? No hay una manera elegante de poner texto en la ventana de otra aplicación y conseguir que permanezca allí, solo maneras feas. Pero es posible que pueda lograr lo que desee de otra manera, dependiendo de su situación específica. –
imagen agregada para demostrar lo que quiero hacer – s5804