Vamos a ver una cosa.
¿Es realmente necesario el uso de AttachThreadInput?
El código que utilizas lo usé yo en otro contexto: el de evitar que una
aplicación se ejecute más de una vez simultáneamente.
En ese caso fue necesario por la siguiente razón (al menos es lo que creo entender):
El código de activación (el que usa AttachThreadInput) se ejecuta en la primera instancia de la aplicación en un momento en que ésta no tiene el foco (el foco lo tiene la segunda instancia). Dicho de otra forma, es un código que se ejecuta desde un hilo distinto al que tiene el foco.
En tu caso, según entiendo, es distinto-- el código de activación se ejecuta desde tu aplicación que es la que tiene el foco. En ese caso siento que no deberías tener problemas con métodos más sencillos de activación.
El siguiente código lo acabo de probar y activa correctamente tanto IE como en MSWord:
Código:
var
AppHandle: HWnd;
begin
AppHandle := FindWindow(nil, AppName);
if AppHandle <> 0 then
if IsIconic(AppHandle)
then ShowWindow(AppHandle, SW_RESTORE)
else SetForegroundWindow(AppHandle);
Claro que tú estás obteniendo el "Handle" de las aplicaciones de otra forma pero eso no afecta.
Pruébalo así a ver si te sirve.
// Saludos
pd: Esto sólo lo he probado en Windows 2000