пишу нечто вроде экранной клавиатуры, вот собственно код реализации посыла сообщения о нажатии кнопки "A"
Код | #define ID_COUNT 1 #define ID_EXIT 2 #include <windows.h> LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM); char szProgName[]="VKeyboard"; HINSTANCE hInstance; int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInstance, LPSTR lpszCmdLine, int nCmdShow) { HWND hWnd; MSG lpMsg; hInstance=hInst; WNDCLASS w; w.lpszClassName=szProgName; w.hInstance=hInst; w.lpfnWndProc=WndProc; w.hCursor=LoadCursor(NULL, IDC_ARROW); w.hIcon=LoadIcon(NULL, IDI_APPLICATION); w.lpszMenuName=0; w.hbrBackground=CreateSolidBrush(RGB(0,0,0)); w.style=0; w.cbClsExtra=0; w.cbWndExtra=0; if(!RegisterClass(&w)) return 0; hWnd=CreateWindow(szProgName,"VKeyboard",WS_OVERLAPPEDWINDOW|WS_VISIBLE | DS_SETFONT | DS_MODALFRAME | DS_3DLOOK | DS_FIXEDSYS |WS_CAPTION | WS_SYSMENU,80,100,360,250,(HWND)NULL,(HMENU)NULL, hInstance, (LPSTR)NULL); ShowWindow(hWnd, nCmdShow); UpdateWindow(hWnd); while(GetMessage(&lpMsg, NULL, 0, 0)) { TranslateMessage(&lpMsg); DispatchMessage(&lpMsg); } return((int)lpMsg.wParam); }
LRESULT CALLBACK WndProc(HWND hWnd, UINT messg, WPARAM wParam, LPARAM lParam) { HDC hdc; PAINTSTRUCT ps; switch(messg) { case WM_CREATE: CreateWindow("button", "Буква a", WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON, 50,180,120,30, hWnd, (HMENU)ID_COUNT, hInstance, NULL); CreateWindow("button", "Выход", WS_CHILD|WS_VISIBLE|BS_DEFPUSHBUTTON, 175,180,120,30, hWnd, (HMENU)ID_EXIT, hInstance, NULL); break; case WM_COMMAND: switch(LOWORD(wParam)) { case ID_EXIT: DestroyWindow(hWnd); return 0; break; case ID_COUNT: keybd_event(VK_MENU, 0, 0 ,0); keybd_event(VK_TAB, 0, 0 ,0); keybd_event(VK_TAB, 0, KEYEVENTF_KEYUP,0); keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP,0); keybd_event('A', 0,0,0); keybd_event('A', 0,KEYEVENTF_KEYUP,0); break; } break; case WM_DESTROY: PostQuitMessage(0); break; default: return(DefWindowProc(hWnd, messg, wParam, lParam)); } return 0; }
|
вопрос простой - как добиться средствами только WinApi смены фокуса на любое приложение(блокнот и др), при нажатии на соответствующие кнопки этой самой экранной клавиатуры, без извращения с предварительным посланием события нажатия Alt+Tab (как у меня сделано) ? |