|
if(wParam == WM_LBUTTONDOWN)//왼쪽 클릭된 위치가 키보드의 화면이면 사용자 메세지를 키보드프로그램으로 보내고 아니면 그냥 통과
{
if(((LPMOUSEHOOKSTRUCT)lParam)->hwnd == hwndMain && ((LPMOUSEHOOKSTRUCT)lParam)->hwnd) // 키보드윈도우의 핸들과 같으면
{
if(GetForegroundWindow() != hwndPrevForeground && hwndPrevFocused)
{
SetForegroundWindow(hwndPrevForeground);
if(GetFocus() != hwndPrevFocused && hwndPrevFocused)
SetFocus(hwndPrevForeground);
}
PostMessage(hwndMain, WM_KEYBOARDCLICKED, wParam,lParam);//(WPARAM)lParam, (LPARAM)hwndPrevForeground);
// PostMessage(hMainMain, WM_KEYBOARDCLICKED, 0,0);
// PostMessage(hwndPrevForeground, WM_KEYBOARDCLICKED, (WPARAM)lParam, (LPARAM)hwndPrevForeground);
//Sleep(1);
return true;
}
else if(((LPMOUSEHOOKSTRUCT)lParam)->hwnd)
{
}
}
else if(wParam == WM_LBUTTONUP)
{
if(((LPMOUSEHOOKSTRUCT)lParam)->hwnd != hwndMain && ((LPMOUSEHOOKSTRUCT)lParam)->hwnd)
{
hwndTempForeground = GetForegroundWindow();
hwndTempFocused = GetFocus();
if(!hwndTempForeground || hwndTempForeground == hwndPrevForeground)
hwndTempForeground = GetForegroundWindow();
if(!hwndTempFocused || hwndTempFocused == hwndPrevFocused)
hwndTempFocused = GetFocus();
hwndPrevFocused = hwndTempFocused;
hwndPrevForeground = hwndTempForeground;
}
}
}
return CallNextHookEx(myhHookMouse, nCode, wParam, lParam);
}
소스는 가상키보드 DLL전역 후킹입니다.
만약 메모장을 띄우고 프로그램을 실행시켜서 가상키보드를 클릭했을때
메모장에 포커스가 유지되게 하려고합니다.
마우스 클릭하면 포커스가 가상키보드쪽으로 왓다가 메모장으로 다시 포커스가 잡힙니다.
혹여 메모장에 포커스를 계속 유지되게 할수있는 방법 아시나요
|