Mi rendo conto che è una domanda estremamente tecnica, ma chissà...

Dunque, che SetForegroundWindow non funga sempre, ma a volte renda solo lampeggianti i pulsanti delle applicazioni sulla ToolBar si legge spesso sul web, tanto che esistono listati che "dovrebbero" bypassare il problema:

http://vb.mvps.org/articles/ap199902.pdf

Ora, una mia piccola applicazione lavora in background tramite timer, controlla la pressione di un tasto e se il tasto è premuto pone una certa finestra in primo piano.

La cosa che mi sfugge è questa:

-se lancio il programma e premo il tasto, tutto funge perfettamente

-se clicco in una qualsiasi finestra aperta, poi clicco sul mio form e poi premo il tasto, tutto funziona perfettamente

-se lancio il programma, clicco in una qualsiasi finestra e premo il tasto... tutto quello che ottengo è un continuo lampeggiare del pulsante relativo alla finestra che vorrei lanciare

A questo punto la domanda non è tanto perché SetForegroundWindow non funzioni, ma come fare in modo, da codice, che il Sistema Operativo ritenga che l' ultima finestra cliccata sia la mia.

Ovviamente ho provato ad inserire nel codice un Me.Activate, un SetActiveWindow(Me.Handle) e un SetForegroundWindow(Me.Handle)... ma non serve a nulla.

Occorre fisicamente cliccare sul mio form (o chiudere il programma e rilanciarlo) perché poi la Sub che richiama il SetforegroundWindow funzioni senza problemi.

Ora, visto che vorrei lavorare in bakground, con icona sulla SySTray e form minimized, cliccare sul form diventa impossibile.

Come ingannare il SO e farglielo credere tramite codice? Spero di essermi spiegato