On 22 avr, 18:36, Altaïr <altair_...@hotmail.com> wrote:
> > SetForegroundWindow() a des limitations à contourner (KB97925 :
> > AttachThreadInput(), SPI_SETFOREGROUNDLOCKTIMEOUT)
> > Sinon, SwitchToThisWindow() marche généralement.
>
> Merci pour ta réponse Christian.
>
> A propos de AttachThreadInput():
> Jusqu'à présent j'obtenais le HWND de la seconde application à son
> lancement par une fonction Labwindows. Mais je me suis rendu compte
> qu'en appliquant GetWindowThreadProcessId() avec cette valeur,
> j'obtenais le même Id que pour ma première application...
J'ai du mal à comprendre...
Si je lance une autre appli, comme Notepad par ex :
ShellExecute(NULL, "", "notepad", "", "", SW_SHOW);
Et si je fais :
HWND hWndNotepad = FindWindow("Notepad",NULL );
DWORD dwProcessID;
DWORD dwThreadId = GetWindowThreadProcessId(hWndNotepad,
&dwProcessID);
dwThreadId ne peut pas être égal à GetCurrentThreadId()
Si on veut mettre au premier plan Notepad, on peut faire :
SwitchToWindow(hWndNotepad);
avec :
void SwitchToWindow(HWND hWnd)
{
if (IsIconic(hWnd))
ShowWindow(hWnd, SW_RESTORE);
HWND hWndLastActivePopup = GetLastActivePopup(hWnd);
void (FAR STDAPICALLTYPE * pSTTW)(HWND hWnd, BOOL bAltTab);
HINSTANCE hInst = LoadLibrary("USER32.DLL");
if (hInst)
{
(FARPROC&)pSTTW = GetProcAddress(hInst, "SwitchToThisWindow");
if (pSTTW != NULL)
pSTTW(hWndLastActivePopup, TRUE);
FreeLibrary(hInst);
}
}