Вопрос: Как сделать ,чтобы мое приложение всегда было в фокусе?
Ответ :
Можно так:
code:
--------------------------------------------------------------------------------
void BringToFrontWindow(HWND hWnd)
{
HWND hCurrWnd;
int iMyTID;
int iCurrTID;
hCurrWnd = ::GetForegroundWindow();
iMyTID = GetCurrentThreadId();
iCurrTID = GetWindowThreadProcessId(hCurrWnd,0);
AttachThreadInput(iMyTID, iCurrTID, TRUE);
SetForegroundWindow(hWnd);
AttachThreadInput(iMyTID, iCurrTID, FALSE);
}
--------------------------------------------------------------------------------
здесь hWnd Handle окна приложения которое д.б. активным.
Можно сделать постоянным фокус на окне и с помощью CBT_Hook.
Правда для этого придётся слепить DLL.
Приведу лишь сам отработчик для WH_CBT, из проверенного в работе примера.
code:
--------------------------------------------------------------------------------
LRESULT CALLBACK CBTProc(
int nCode, // hook code
WPARAM wParam, // depends on hook code
LPARAM lParam // depends on hook code
)
{
if (nCode<0) return CallNextHookEx(HookData->hHook,nCode,wParam,lParam);
if(nCode==HCBT_ACTIVATE)
{
if(HookData->hWnd !=(HWND)wParam)SetForegroundWindow(HookData->hWnd);
}
if(nCode==HCBT_SYSCOMMAND)return 0;
if(HookData->hWnd ==(HWND)wParam)return 0;
else return 1;
}
--------------------------------------------------------------------------------
(c) 2003 Borland X Portal
|