Этот пример показывает как можно отслеживать -
с какими окнами в системе работает
пользователь. То есть при нажатии на Титле бар ,
минимизации, закрытии окна
СКАЧАТЬ (~4Kb)
Собственно сам исходничек :) |
#define STRICT
#include
#include "resource.h"
const char *pszTitle = "Descriptor Systems Mouse Capture Example";
// internal function prototypes
LRESULT CALLBACK WndProc ( HWND hwnd, UINT iMsg
, WPARAM wParam, LPARAM lParam );
int PASCAL WinMain ( HINSTANCE hInstance, HINSTANCE hPrevInstance
, LPSTR lpszCmdLine, int nCmdShow )
{
HWND hwnd; // window handle
WNDCLASS wndclass; // class structure
MSG msg; // msg data structure
// register only if this is the first instance
if (!hPrevInstance)
{
wndclass.style = CS_HREDRAW | CS_VREDRAW;
wndclass.lpfnWndProc = WndProc;
wndclass.cbClsExtra = 0;
wndclass.cbWndExtra = 0;
wndclass.hInstance = hInstance;
wndclass.hIcon = LoadIcon ( hInstance
, MAKEINTRESOURCE ( IDI_MYICON ));
wndclass.hCursor = LoadCursor ( 0, IDC_ARROW );
wndclass.hbrBackground = (HBRUSH)GetStockObject ( WHITE_BRUSH );
wndclass.lpszMenuName = MAKEINTRESOURCE ( IDM_MENU );
wndclass.lpszClassName = "Template";
// attempt to register -- exit if we can't
if ( !RegisterClass ( &wndclass ) )
return 0;
}
// create a window based on the class we just registered
hwnd = CreateWindow (
"Template" // class name
, pszTitle // window caption (title)
, WS_OVERLAPPEDWINDOW // style
, CW_USEDEFAULT // initial x
, CW_USEDEFAULT // initial y
, CW_USEDEFAULT // initial cx
, CW_USEDEFAULT // initial cy
, 0 // no parent
, 0 // no menu
, hInstance // instance handle
, NULL ); // no create parameters
if ( hwnd == 0 )
return 0;
// show the window and force it to paint
ShowWindow ( hwnd, nCmdShow );
UpdateWindow ( hwnd );
// enter the event loop -- remain in loop until window closes
while ( GetMessage ( &msg, NULL, 0, 0 ) != FALSE )
{
DispatchMessage ( &msg );
}
return msg.wParam;
}
//**********************************************************
LRESULT CALLBACK WndProc ( HWND hwnd, UINT iMsg
, WPARAM wParam, LPARAM lParam )
{
switch ( iMsg )
{
case WM_DESTROY:
PostQuitMessage (0);
return 0;
case WM_COMMAND:
{
switch ( LOWORD ( wParam ) )
{
case IDM_CHOOSE:
{
MessageBox ( hwnd, "Click on any window"
, "Choose a window"
, MB_OK | MB_ICONINFORMATION );
SetCapture ( hwnd );
}
break;
}
}
return 0;
case WM_LBUTTONUP:
{
if ( GetCapture () == hwnd )
{
POINT pt;
// retrieve the mouse coordinates
pt.x = (short)LOWORD ( lParam );
pt.y = (short)HIWORD ( lParam );
// convert to screen units
ClientToScreen ( hwnd, &pt );
// determine handle of window under the click
HWND hwndClick = WindowFromPoint ( pt );
// display the window's text
if ( hwndClick != 0 )
{
char szText[255];
GetWindowText ( hwndClick, szText
, sizeof szText );
MessageBox ( hwnd, szText, "You clicked on"
, MB_OK | MB_ICONINFORMATION );
}
// release the mouse capture
ReleaseCapture ();
}
}
case WM_PAINT:
{
PAINTSTRUCT ps;
BeginPaint ( hwnd, &ps );
RECT rc;
GetClientRect ( hwnd, &rc );
DrawText ( ps.hdc
, "Select \"Choose Window\" from the menu"
, -1, &rc
, DT_SINGLELINE | DT_CENTER | DT_VCENTER );
EndPaint ( hwnd, &ps );
}
return 0;
default:
return DefWindowProc ( hwnd, iMsg, wParam, lParam);
}
}
|