����� VI �������� � ������

����� 26 ������� ���������

� ���� ����� � ��������, ��� �������� ���������� �������� ��������� � Windows ������������� � ����������� � ����������� ���������������� ����������� ��� ��������� ���������� ���������� ������ � Windows 2000 � Windows 98, Microsoft ������������ ��� �������� ����

� ���������, ��� ���� ����� ������������ ���� ����� � 16-��������� Windows �������� ��������� � ���� ������ �������������� ��������� ����������� �� ����� ���������� ������, ���� ���� �� ���������� ���������� ��������� ������ ��� � ����� ��, ���� �� ��������� ��������� ����������� ���������� ����� ��� ���� ���� ���������, ���������� ����������� ������ ����������� � ������, ����� ��������� ��� ������� �� ������ ������������ �� ������������ � �����

��� ������������ ���� ��������� ������� ��� ������� ������������� �� Micro soft � ����� ���� ������� ������������� �������, ���������� ���� ��������� ����� ����� ������� � ���, ����� ��� �����, � �� �������, ������ Microsoft ������� ������ ����� �����

��� ������ ���������� ��������� ������� �������� ���� ������� � Windows ����� ������� �� 10 000 User-�������� ��������� ����� � �������, ��������, ���� ��� �������, ���� ������ ������-������������ � � � ����� ����� �� ������-���� �������� �������� �������, ��������� ���� �� ���� �������� ��������� ������ ��� �� �������� �������� �������, ���� ������� �����������, �� ��������� ������ ������ ����� �������, ������������ ������� ������ ��o �� ���� ������ ��� User ������a (���� � �������) ����������� ������ ���������� �� ������ � �����, ���� ����� ������� ���� ��� ������������� ������� � ����� �����������, ������������ ������� ������������� ���������� ���� ��� ������� �������

���� ������� �������������� ���� � ������� ���������� �� ������ ��������� ������������ ������� �� �������� ���������������� ���� ����� ��������� ����, ������ ������������ ��� ��� ��������� ������ ������ ������� �� ������� �� ������, ����� ������ ����, � ����� ��������� ������ ����� ��� ���� ��� �� ������� ��������� WM_DESTROY ��� WM_NCDESTROY, ������ ��� ����� ��� ���������� � ������������ ���������, ���������� ����� ����, ������ ������

��� ����� ��������, �� ������� ������, ���������� ���� �� ���� ����, ������� �������� ������� ���������, ������������ ��� �� ��������������� ����� ���� � �������� ����� �������� ��� ��������� ����� ������ ����� ����������� ���� ������� ��������� � ���� ����� �� �������� ����������, ��� ������������ �����

������� ��������� �������. � ���������, � ��������, ��� ��������� ���������� � ��� ������� � ��� ��� ����������� �� ���, � ����� ��������������.

������� ��������� ������

��� � ��� �������, ���� �� ������� ����� Windows � ������������ ���� ��������� �� ���������������� �����. ��� ����� ����� ����� ������ ����������� � ����� ��� ��, ��� �� ����� ������� ���� ������������. ������, � ������� ������ ������ ���� ������� ���������, ��������� ����������� �� ������ �������. ����� ����, ��� ��� ���� ������ ����� ������������� �����, ����������� ��� �������������� ��������� ������� ����� � ����������, �������������� ����, ����������� ���� � �. �

�������� �����-���� �����, ������� ������������, ��� �� �� ����� ����� ������ ��� � ��������� ����������������� ����������. ��� ��������� �������� ����� ���������� ��� ��������� ��������. ��, ��� ������ ����� ��������� � ��� ��� ���� GUI-������� (��������, ��� �������� ������� ��������� ��� �������� ����), ��� ���� ������������� ������� ��� �������������� �������, ����������� ��� ����� ����� �����, ��������� � ���������������� ����������� � ���� ����������, �� ��� ���� ������� ��������� THREADINFO � ������������ �� � ���� �������

�������� ���� ��������� ������������, ����� �������� ����� � ��������� ��� �������, ����� �� ����������� � �����, ������������� ������ ���. THREADINFO � ��� ���������� (�������������������) ���������, ���������������� ������� ���� ������� ��������� ������ (posted-message queue), ������� ���������� ��������� ������ (sent-message queue), ������� �������� ��������� (reply-message queue), ��� ���� ������������ ����� (virtualized input queue) � ����� ����������� (wakc flags), ��� ����� �������� ��� ������ ����������-������, ��������������� ��������� ��������� ����� ��� ������� ������ �� ��� 26-1 �������� ��������� THREADINFO, �������������� � ����� ��������.

��������� THREADINFO � ��������� ���� ���������� �������� ���������; �� ��� ��������� �������, ����� �� ������� ������������� �� ��� �����������.

������� ����������� ��������� � ������� ������

����� � ������� ����������� ��������� THREADINFO, �� �������� ���� ����� ����� ��� ���������. ���� ������� ������� ��� ������ � ��� ��� �������� ������� Create Window, �� � ������� �������� ��������� ����� ���� ��� ��������� �������� � ������� ����������� ��������� ������� ������� PostMessage:

BOOL PostMessage( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

��� ������ ���� ������� ������� ����������, ����� ������� ������� ����, ���� ������������ ���������� hwnd, ����� ������� �������� ���� ������, ��������� � ��� ��������� ��������� � ���������� ���� ���� � ������� ����������� ������ ��� ������� ������. ����� ����, ������� ������������� ���� ����������� QS_POST MESSAGE (� ��� � ���� �����). ������� �� PostMessage ���������� ����� ����� ����, ��� ��������� ���������� � �������, ������� ���������� ����� �������� � ������ ���, ���������� �� ��� ���������� ���������������� ���� �� ����� ���� ������ ��������, ��� ���� ���� �� ������� ��� ��������� ����� ��������, ���� �����, ��������� ��� ����, ���������� �� ����, ��� ���������� ��� ��������� �� ����� �������.

rihter26-1.jpg

���. 26-1. ��� ������ � ��������������� �� ��������� THREADINFO

��������� ����� ��������� � ������� ����������� ��������� ������ � ���� ��� PostThreadMessage:

BOOL PostThreadMessage( DWORD dwThreadId, UINT uMsg, WPARAM wParam, LPARAM lParam);

NOTE
����� ����� ������ ����, ����� ���������� � ������� GetWindowThreadPro cessId:

DWORD GetWindowThreadProcessId( HWND hwnd PDWORD pdwProccssId);

��� ���������� ���������� ������������� ������������� ������, �� ����� ������ ����, ������������ ���������� hwnd. ������� ����� ������� ��� ���� DWORD � ��������� pdwProcessId, ����� �������� � ���������� ������������� ������������� ��������, �������� ����������� ���� �����. �� ������ ����� ������������� �� �����, � �� ������ �������� NULL

������ ����� ���������������� ������ ����������, dwThreadId. ����� ���� ����� �������� � �������, ������� hwnd ��������� MSG ��������������� ��� NULL. ����������� ��� �������, ����� ���������� ��������� ����� �� ������ ��������� � �������� ����� ������� ��������� ������, � � ���� ������ �� ������� ���, ��� �� ����� ������� ��������� �������� GetMessage (��� PeekMessage) ��� � ����� ��������� hwnd � NULL �, �������� ��� ����� ������ ���������, ��� ��������� ��� ����� �������� msg ��������� MSG. ���� ����� ���������, ��� ��������� �� ���� ������ ������-���� ����, DispatchMessage �� ����������, � ���� ��������� � ����� �� ���������� ���������.

��� � PostMessage, ������� PostThreadMessage ���������� ���������� ����� ����� ����, ��� ��������� ���������� � ������� ������ � ����� ���������� ����� ���� ���� � ��������� � ���������� ������ ���������

�, �������, ��� ���� �������, ����������� ��������� ��������� � ������� ���� ������� ��������� ������:

VOID PostOuitMessage(int nExilCode);

��� ���������� ��� ����, ����� ��������� ���� ������� ��������� ������ �� ����� ���������� ������

PostThreadMessage(GetCurrentThreadId(), WM_OUIT, nExitCode, 0);

�� � ���������������� PostQuitMessage �� �������� ��������� �� � ���� �� ��� ����� ��������� THREADINFO. ��� ������� ������ ������������� ���� ����������� QS_QUIT (� ��� � ���� �������� ���� �����) � ������� nExitCode ��������� THREAD INFO. ��� ��� ��� �������� �� ����� ������� ������, ������� PostQuitMessage �� ���������� ������� �������� (VOID).

������� ���������� ��������� ����

������� ��������� ����� ��������� ��������������� ������� ��������� ������� SendMessage:

LRESULT SendMessage( HWNO hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

������� ��������� ���������� ���������, � ������ �� ��������� ��������� ������� SendMessage ������ ����������. ��������� ����� �� ���������� ������� ����, ��� PostMessage ��� PostThreadMessage ��� �������� � ���������� ��������� ���� �� ���� �����, ��������� SendMessage, ����� ���� ������, ��� ��������� ��� ���� ������.

��� ��� �������� SendMessage ���� ����� �������� SendMessage ��� ������� �� ������� ����, ���������� �� ��, �� ������� ������ ���������� � ������� ����� ���� ���������������� ���� ��� � ������������. �������� ���������, ������� ��� ������ �������� ������� SendMessage ����� ��������, � �� ���������� ��� �������� �� ������.

������, ���� ����� �������� ��������� ����, ���������� ������ �������, ��� �����, ����������� �������� SendMessage, ����������� �����������. Windows �������, ����� ������� ��������� �������������� �������, ��������� ����. ����� ��, ���� ������� SendMessage ��� �������� ��������� ����, ���������� � ������ ��� ����� �, �����������, ������ �������, ��� ����� �� ������ ���������� ��� ������ ��� � ���� �� �� �������� � �������� ������������ ������ ��������, � ������ �� ����� ������� � ���� � ������ ��������������� ������� ���������. � ����������� ��, ��� ����� ������������������, ���� ������ ����� ������������ ���������. �� �����, ����� ���� ����� ��� ��������� ��������� ����, ���������� ������ ���� ���, ������� ������ ��������� ��������� ��������.

��-������, ���������� ��������� �������������� � ������� ��������� ���� ��-���������, � ���������� ���� ��� ����� ������ ��������������� ���� QSSEND MESSAGE. ��-������, ���� �����-�������� � ������ ������ ��������� �����-�� ��� � �� ������� ��������� (����� ����� GetMessage, PeekMessage ��� WaitMessage), �� �������� ��������� ���������� �� ������� � ������� �� ������� ������ ������ ��� ����������� ��������� ���������. �� ����� �����-�������� ���� ���������, �� ����� ������� ���������, ���������� �� ���� ����������� QS_SENDMESSAGE, �, ���� ��, ������������� ������� ���������� ���������, ��������� ������ �� ���. � ��� ���� ����� ���������� ����� ������ ��������� ������, ��������� ������� ���� �������� ������� ��������� ������ � ���� �� ����. ����� ������� ������ ������ ��� ��������� � ������� ���������� ��������� ������.

����, ����� ����� ���� ���������, ������� ��������� �� ������� ���������� ��������� ������ � �������� ��� �� ��������� ������ ������� ��������� ���� ����� ��������� ������ ���, ���� QS_SENDMESSAGE ������������. ���� �����-��� ����� ������������ ���������, �����, ����������� ��������� ����� SendMessage, �����������, ������ ��������� ��������� � ������� �������� ��������� �� ���� ����� ��������� ��������, ������������ ������� ����������, ���������� ����� ����� � ������� �������� ��������� ������-����������� ������ �� ���������� � �������� ���������� �������� �� ��������� ���������. ������ ��� �������� � �� ��� ����������� ������ SendMessage C ����� ������� �����-����������� �������� ���� ������ � ������� ������

������ �������� ���������� �������� SendMessage, ����� � �������� ������� ����. �� ���-��� �� ����� ��������, ���� ������ ����� �������� ��������� ����, ���������� ������ (���������) �������, ������� ��� �� ������������ ��� ���� �����, �� ���������, ����� ����� ������� GetMessage, PeekMessage ��� WaitMessage

��������� Windows ������������ ����������� ��������� ��������� ���� �������, ��� ����� ����� ��������� ��������, � ������, �������������� ������� ��� ���������, ������� "�����", ��-�� �������� ����� ������ � ����������� ���� ��� �� ���������� � �������, ��������� SendMessage? ������������ �� �����-������ ��� ����������? ������ �� ���, ��� ������ � ����� ���������� ��������� ������? ����� � ��!

��� ����� ���� � ��� ������, ���� ��� ������ ����������� ������ ��������

�������� �������� �������� ��������� ������ �������, � ������ �� ��� � SendMessageTimeout

LRESULT SendMessageTimeout( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam, UINT fuFlags, UINT uTimeout, PDWORD_PTR pdwResult);

��� ��������� �������� ������� �������, � ������� �������� �� ������ ����� ������ �� ������� ������ �� ���� ��������� �� ������ ������ ��������� ������� �� ���������� ������� SendMessage. � ��������� fuFlags ����� ���������� ����� SMTO_NORMAL (0), SMTO_ABORTIFHUNG, SMTO_BLOCK, SMTO_NOTIMEOUTIFNO THUNG ��� ���������� ���� ������.

���� SMTO_ABORTIFHUNG ���������� SendMessageTimeout ���������, �� ����� �� ����� ��������^, �, ���� ��, ���������� ������� ���������� ���� SMTO_NOTIME OUTIFNOTHUNG �������� �������, ��� ��� ������ ������������ ����������� �� �������, ���� �����-�������� �� �����. ���� SMTO_BLOCK ������������� ������� �� ���������� ������� ����� ������ ���������� ��������� �� �������� �� Send MessageTimeout, ���� SMTO_NORMAL ��������� � ����� WinUser.h ��� 0, �� ������ ������ � ��� ������, ���� �� �� ������� ������ �����

� ��� �������, ��� �������� ������� ��������� ��������� ����������� ���� ����� ����� ���� �������� ��� ��������� ������� ����������� ���������. ���� SMTO_BLOCK ������������� ����� ���������� �� �����������, ������ ���� �����, ������ ��������� ��������� ������ ���������, �� � ��������� ������������ ��� ��� ���������� ���������. ���� ���� ������ �������� � �������� ���������� �� ����� �� ����� �������� ���, ���� ��� ����� �������� ��������� �������, � ���� ����� ������� ��������� ������, �� ���� �� ��� �� ������ ���������� ���������, � ��� ��������

�������� uTimeout ���������� ������� ����� (� �������������), � ������� �������� �� ������ ����� ��������� ���������. ��� �������� ���������� ���� ��� ���������� TRUE, � ��������� ��������� ��������� ���������� no ������, ��� ������� � ��������� pdwResult,

������, �������� ���� ������� � ������������ ����� WinUser.h �������. ���� ��� ��������� �� ���������� ��� ������������ �������� ���� BOOL, ��������� �������� ���� LRFSULT �� ����� ���� ������������ ����� �� �������� ��� ������� ������������ ��������, ��� ��� SendAlebbageTimeout ������ FALSE, ���� �� ������ ���� �������� ��������� ���� ��� ���� ���������� �������� ������ ��������. ���� �������� ������ ������ ������� ���������� ���������� ������� � ������� GetLast Error. ��������� ������ 0 (ERROR_SUCCESS), ���� ������ ������� � ���������� �� ����� ��������. � ���� ������� � �������� ���������, GetLastError ���� ��� 1400 (ERROR_INVALID_WINDOW_HANDLE).

���� �� ����������� � SendMessageTimeout ��� ������� ��������� ����, ������ ���� ���������� �������, ������� ������ �������� ������� ���������, ������� ������������ �������� � pdwResult. ��-�� ����� ���, ������������� �� �������

������������ ������� ������� ����� ��������, ���� �� ���������� ��������� ������ ��� ����� ��� �� 5 ������.

SendMessageTimeout, �� ����������� �� ��� ���, ���� �� ������������� ��������� ���������, � ���� ��� ��� �������� �������������� ����� �������.

������ ���������� ������ �������, ��������������� ��� �������� �������� ������������:

BOOL SendMessageCallhack( HWND hwnd, UINT uHsg, WPARAM ������, LPARAM lParam, SENDASYNCPROC pfnResultCallBack, ULONG_PTR dwOata);

� ����� ������ ������ ��������� ��������� ���������� ������� SendMessage ��� ������ ����� ������� SendMessageCallback ���������� ��������� � ������� ���������� ��������� ������-��������� � ��� �� ���������� ���������� ������ ����� (� e ������) ������ �������� ��������� ���������, �����-�������� ���� ������ ���������� ���� ��������� � ������� �������� ��������� ������ ������. ����� ������� �������� ��� ����� �� ����, ������ ���������� ���� �������; � ��� ������ ���� ��������� ��������,

VOID CALLBACK ResultCallBack( HWND hwnd. UINT uMsg, ULONG_PIR dwData, LRESULT lResult);

����� ���� ������� ��������� ������ ���������� SendMessageCallback � ��������� pfnResultCallBack � ��� ������ ResultCallBack � ������ ���� ���������� ���������� ��������� ����, ������������ ������������������, � ��� (��������) ������ ���� �����. �������� dwData ������� ResultCallBack ������ �������� ��������, ������� ��� SendMessageCallback � ����������� ���������. (������� ������ ����� ��, ��� ������� ���, � �������� ����� ������� ResultCallBack) ��������� �������� ���� ��� ResultCallBack �������� ��������� ��������� ���������, ���������� �� ���� ��� ���������

��������� SendMessageCallback, ��������� ��������� ������� ������, �������� �� ���������� ����������, ResultCallBack ���������� ����� ��������� ��������� �������-���������� �� �����, � � ���������. ������� �����-�������� ���������� ������ ��������� � ������� �������� ��������� ������-����������� ����� ��� ������ �� ������ �������-������������ ����� �� ������� GetMessage, PeekMessage, WaitMessage ��� ����� �� Send-������� ��������� ����������� �� ������� �������� ���������, � ���� ����� ���������� ���� ������� ResultCallback.

���������� � ������ ���������� ������� SendMessageCallback � Windows ��� ��������� �����, ����������� ��������� ��������� ���� ��������������� ����� (overlapped windows) � �������; �� ������� � ���, ��� �� ��������� SendMessage � � ��������� hwnd ��������� �� HWND_BROAUCAST (������������ ��� -1) ���� �� ��� ������� ������ ��� ����������������� �������� ���������, ������������ �������� ������� ��� �� ����������, ��������� ������� �������� ������� ���� ���� ��������, LRESULT. ��, ��������� SendMessageCallback, ����� �������� ������ ���� ��������� "������������������" ��������� �� ������� ����������� ���� ���� ������� SendMessageCallback ����� ���������� � ����������� ��������� ���� ����� �� ������� �� ����� ����.

���� SendMessageCallback ���������� ��� �������� ��������� ����, ���������� ���������� �������, ������� ���������� �������� ������� ���������, � ����� ��������� ��������� � ������� ResultCallBack, ����� �������� �� ResultCallback ���������� ���������� �� ������, ��������� �� ������� SendMessageCallback.

������ �������, ��������������� ��� �������� ����������� ���������:

BOOL SendNotifyMessage( HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

�������� ��������� � ������� ���������� ��������� ������-���������, ��� ���������� ���������� ���������� ����������� ������. ���. ����� ���� � PostMessage, �������? �� ��� ������� SendNotifyMessage �� PostMessage ��� �� ����.

��-������, ���� SendNotifyMessage �������� ��������� ����, ���������������� �������, ��������� ������� ����������� ��������� ���� ���������� �������� ��� ���������, ����������� � ������� ������-��������� ����� �������, ���� �����, ���������� � ������� � ������� SendNolifyMessage, ������ ����������� �� ������� ���������, ������������ ����� PostMessage,

��-������, ���� ��������� ���������� ����, ���������� ���������� �������, SendNotifyMessage �������� ����� ��� ��, ��� � SendMessage, �. e �� ���������� ����� ����� �� ��������� ��������� ���������

����������� ���������� ��������� ���������� ���� ��� ����������� � ��� �� �������� ��� �� ��������� ��������� � ����� ��� ���-�� ������������� �� ���, ������ ��� �� ���������� ���� ������. ��������, WM_ACTIVATE, WM_DESTROY, WM_ENABLE, WM_SIZE, WM_SETFOCUS, WM_MOVE � ������ ������ ��������� - ��� ������ �����������, ���������� �������� ���� � ����������, � �� ����������� ������. ������� ������� �� ��������� ���� ������ ������ ���� ����, ����� ���� ��� ��������� ����� �� ����������. ����� ��������������� ������ ���� �������� ��������� WM_CREATE � ����� ������� ����, ����� ���� �������� ��� ���������. ���� ���������� �������� -1, ������, ���� �� �������.

�, �������, ��������� �������, ��������� � ���������� ����������� ���������:

BOOL ReplyMessage(LRESULT lResult);

��� ���������� �� ���� ��������� ����. � �� ����� ��� Send-������� �������� ���� ���������� ��������� ������� ��� ������ ���� �� ���������, ReplyMessage ���������� �������, ����������� ������� ��������� ������ ��, ����� ��� �� ������� �������, ��� �� ��� ������� ��������� ��������� ��������� � ��� ���� �� ������� ����� ��������� � ���������� ��������� � ������� �������� ��������� ������-����������� ��������� ������ �����������, �������� ��������� � ������� ���� ������.

�����, ���������� ReplyMessage, �������� ��������� ��������� ��������� ����� �������� lResult ����� ������ ReplyMessage ���������� ������-����������� ����� ���������, � �����, ������� ���������� ���������, ���������� ��� ���������. �� ���� �� ������� �� ������������������ � ��� ��������, ��� ������. ����� �����, �������������� ���������, ������ �� ����� ������� ���������, ����� �������� ���� �������� ������ ������������.

��������: ReplyMessage ���� �������� �� ������� ���������, ���������� ���� �����, �� �� �� ������, ���������� ���� �� Send-�������. �������, ����� �������� "���������� �� ���������" ���, ������� �������� ��� ������ SendMessage ��������

����� �� ���� Send-������� � �� ���������� �� ��, ��� ������� ��������� ����� �������� ������ ReplyMessage.

������ �����, ��� ����� ReplyMessage ��� ��������� ���������, ���������� ���� �� �������, �� ������ ������� ��������. �� ��� � ��������� ��������, ������������ ReplyMessage- TRUE. � ��� ��������� ������������ ��������� � FALSE � ��� ����� �� ������ ������� ��� ��������� ��������������� ���������.

���� ��� ����������, �������� �������������� ��������� �������������� ��� �����������, �������� ������� InSendMessage:

BOOL InSendMessage();

��� ���� ������� �� ������ ����� ������������� ����, ��� ��� ������ � ������� ��������� �� ������ ������, ������� ������ ���������� TRUE, ���� ����� ������ ������ ���������� ���������, � FALSE � ��� ��������� �� ������������ ������ ���. �� ��� �� ���. ��� ���������� TRUE, ���� ����� ������������ ����������� ��� ������� ���������, � FALSE � ��� ��������� �� ��������������� ��������� (��� �������� ��� ������������). ������������ �������� ������� lnSendMessage ReplyMessage ���������.

���� ��� ���� �������, ����������� ���������� ��� ���������, ������� ���� ���������� ����� ������� ����������:

DWORD InSendMessageEx(PVOID pvReserved);

������� ��, �� ������ �������� NULL � ��������� pvReserved. ������������ ��� ����� ��������� �� ��� ��������������� ���������. �������� ISMEX_NOSEND (0) ������� � ���, ��� ����� ������������ �������������� ���������� ��� �������� ��� ���������. ��������� ������������ �������� ������������ ����� ���������� ������� ������, ��������� � ��������� �������

����

��������

ISMEX_ SEND

����� ������������ ����������� ���������� ���������, ��������� ����� SendMessage ��� SendMessageTtmeout; ���� ���� ISMEX REPLIED �� ����������, �����-����������� ����������� � �������� ������

ISMEX_NOTIFY

����� ������������ ����������� ���������� ���������, ��������� ����� SendNotify Message, �����- ����������� �� ���� ������ � �� ����� ������

ISMEX_CALLBACK

����� ������������ ����������� ���������� ���������, ��������� ����� SendMessageCallback; �����- ����������� �� ���� ������ � �� ��� ��������

ISMEX_REPLIED

����� ������������ ����������� ���������� ��������� � ��� ��� ��� ReplyMessage; �����-����������� �� �����������

����������� ������

����� ����� �������� GetMessage ��� WaitMessage � ������� ��������� ��� ���� ��� ��������� �� ���� ���, ������� ����� ������������� ���������� ������, � ����� �� ��� �� �������� ������������ ����� ��� ������ ������ ����� ���������� ���� ������ ��� ����������� ���������, ������� ��������� ���� �����������, ������� ����, ��� ������ ����� ������ �������� ������������ ����� � ���������� ������ ��� ���� ������������ ������ �� �������� �� ���������� � �� ������� ����, �� ���� �� � ����� ��������������� ������� ��������� ����� �� ���������� � ��� ������, ��� ����������� ������� � ������� �� �������� ������������ �����.

����� ��������� �������

�� ����� ���������� ����� ����� �������� ��������� ����� �������� ������� GetQueueStatus:

DWORD GetQueueStatus(UINT fuFlags);

��������� fuFlags � ���� ��� ������ ������, ������������ ��������� ������� �� OR, �� ��������� ��������� �������� ��������� ����� ����������� (wake bits) ���������� �������� ������ � �� ����� ������� � ��������� �������.

����

��������� �������

QS_KEY

WM_KEYUP,WM_KEYDOWN, WM_SYSKEYUP ��� WM_SYSKEYDOWN

QS_MOUSEMOVE

WM_MOUSEMOVE

QS_MOUSEBTITTON

WM_?BUTTON* (��� ���� ������� �������� ����� L, � ��� R, � ��������� � DOWN, UP ��� DBLCLK)

QS_MOUSE

�� ��, ��� QS_MOUSEMOVE | QS_MOUSEBUTTON

QS_INPUT

�� ��, ��� QS_MOUSE | QS_KEY

QS_PAINT

WM_PAINT

QS_TIMER

WM_TIMER

QS_HOTKEY

WM_HOTKEY

QS_POSTMESSAGE

����������� ��������� (�������� �� ������� ����������� �����), ���� ���� ��������� QS_ALLPOSTMESSAGE � ��� ����� ������, ��� ������������ ��� ���������� ����������� ������ ��� � ��������� �������� ������� ���������

QS_ALLPOSTMESSAGE

����������� ��������� (�������� �� ������� ����������� ��� ��); ���� ���� ��������� QS_POSTMESSAGE � ��� �����������, ��� ������������ ���� ��� ������ ���������� �����-���� ���� ������� ��������� (��� ����������� �� ������� ���������)

QS ALLEVENTS

����, ��� QS_INPUT | QS_POSTMESSAGE | QS_TIMER | QS_PAINT | QS_HOTKEY

QS_QUIT

�������� � ������ PostQuitMessage, ���� ���� �� ������������� ���, ��� ��� � WinUser.h, � �� ������������ ����� ��������

QS_SENUMESSAGE

���������� ���������, ��������� ������ �������

QS_ALLINPUT

�� ��, ��� QS_ALLEVENTS | QS_SENDMESSAGF

��� ������ GetQueueStatus �������� fuFlags �������� �������, ������� ����� ����� ��������� � ������� ������� ���������. ��� ������ ��������������� QS_* ���������� ��������� ��������� OR, ��� ������� �������������� ����� ��������� ���������� � ������� ����� ��������, ������������� ��������. ������������ �� ��� ������ ������ ������������ ����� ������������ ���� ������, ������� �� ��� ������ �� �������. ��������, ���� �� ������� ����� �����.

BOOL fPaintMsgWaiting = HIWORD(GetQueueStatus(QS TIMER)) & OS_PAINT;

� �������� fPaintMsgWaiting ������ ����� ����� FALSE ���������� �� ������� � ��� ���� ��������� WM_PAINT, ��� ��� ���� QS_PAINT ������� �� �������

������� ����� ������������� �������� �������� ���� ���������, ������� �������� � �������, �� �� ���������� � ������� ���������� ������ GetQueueStatus, GetMessage ��� PeekMessage.

�� ��� ����� ����������� �������������� �������� ��������� ���� QS_MOUSE MOVE ���������������, ���� � ������� ���� �������������� ��������� WM_MOUSE

MOVE. ����� GetMessage ��� PeekMessage (� ������ PM_REMOVE) ��������� ��������� ��������� WM_MOUSEMOVE, ���� ������������ � �������� � ����� ���������, ���� � ������� ����� ����� �� �������� ��������� WM_MOUSEMOVE. ����� QS_KEY, QS_MOUSEBUTTON � QS_HOTKEY ��������� ��� ��������������� ���������� ��� �������� �������.

���� QS_PAINT �������������� �����. �� ���������������, ���� � ����, ��������� ������ �������, ������� ����������������, ��������� ����������� ������� ����� �������, ������� ����� ������, ���������� ����� �������, ���������� ����������� ��� (������ � ���������� ������ ValidateRect, ValidateRegion ��� BeginPaint), ���� QS_PAINT ������������. ��� pay ���������: ������ ���� ������������, ������ ���� ���������� ��������������� ��� ����, ������������� ������. ����� GetMessage ��� PeekMessage �� ���� ���� ����������� �� ������.

���� QS_POSTMESSAGE ���������������, ����� � ������� ����������� ��������� ������ ���� ������� ���� ���������. ��� ���� �� ����������� ���������� ���� �����, ����������� � ������� ������������ ����� ������. ���� ���� ������������ ����� ��������� ���� ��������� �� ������� ����������� ���������

���� QS_TIMER ��������������� ����� ������������ ������� (���������� ���� ���). ����� ���� ��� ������� GetMessage ��� PeekMessage ������ WM_TIMER, ���� ������������ � �������� � ����� ���������, ���� ������ ����� �� ���������

���� QS_SENDMESSAGE ���������, ��� ��������� ��������� � ������� ������� ��� ���������. �� ������������ �������� ��� ������������� � ��������� ����� ������ ���������� ���������, � ��� �������������� ���������� ��������� �� �����������. �� ������ ��������� ���� QS_SENDMESSAGE, �� ������������� � ��� ��������� ������ �����. � �� ���� �� ����� ��� �� � ����� ����������.

���� ��� ���� (�������������������) ���� ��������� ������� � QS_QUIT. �� ��������������� ��� ������ ������� PostQuitMessage. ��������� WM_QUIT ��� ���� �� ����������� � ������� ��������� � ������, ��� GetQueueStatus �� ���������� ��������� ����� �����

�������� ������� ��������� �� ������� ������

����� ����� �������� GetMessage ��� PeekMessage, ������� ��������� ����� ������ ��� �������� ������ � ����������, ����� ��������� ���� ���������� (��� 26-2)

1. ���� ���� QS_SENDMESSAGE ����������, ������� ���������� ��������� ���� ����������� ������� ��������� GetMessage PeekMessage ������������ ������� ��������� � �� �������� ���������� ������ ����� ����� ����, ��� ������� ��������� ���������� ���������, ������ ����� ��� ������� ���� ���������� ���������.

2. ���� ������� ����������� ��������� ������ �� �����, GetMessage Peek Message ��������� ���������� �� ��������� MSG � ���������� ���������� ���� ������� ��������� (������������� � ������) � ���� ������ ������ ���������� � DispatchMessage, ����� ��������������� ������� ��������� �� �������� ���������.

3. ���� ���� QS_QUIT ����������, GetMessage PeekMessage ���������� ������ ��� WM__QUIT (�������� wParam �������� �������� ��������� ��� ������� ���) � ���������� ���� ����.

4 ���� � ������� ������������ ����� ������ ���� �����-�� ���������, GetMessage PeekMessage ���������� ���������, ��������� � ���������� ������.

5. ���� ���� QS_PAINT ����������, GetMessage PeekMessage ���������� ���� ����� WM_PAINT ��� ���������������� ����

6 ���� ���� QS_TIMER ����������, GetMessage PeekMessage ���������� ���� ����� WM_TIMER.

rihter26-2.jpg���. 26-2 �������� ������� ��������� �� ������� ������

���� � ������ � ��� ��������, �� ��� ������ ������� ���� ���� �������. �������, �� ���� �������� Microsoft, ������������ ��������� ��������, � ���������� ���� �� ��������� ������������, � ������ ��� �������� (� ����������� � �����) ����� ���� ����������, �������� ������� ����������� ����� ������� � ����������, ���� �������� ����� ������ ������ ����, ��� �������� � ��������� ������������������ ������������ �������. � ��������� ��������� ��������� �������, ���������� ��������� ��������� � ������� ������

���, ������� ������ ���� ����� �� ��������� ����, ������� ������������ ���� ����� WM_LBUTTONDOWN, ������� ��� ����������� ��������� ������ ����� ��������� ��� ��� ����������� ������� ��������� � ���������� ����������� ���� ���, ������� ������������ �� �� ����, ��� ��������� ����� ���������� �������, ������������ �������������. � ������ ������� ������� ����������� ��������� ����������� ������ ������� ������������ �����

���������� ������ ����� ������������������ ������� � ����� ������� Trans lateMessage, �����������, �� ���� �� ������� �� ������� ����� ��������� WM_KEY DOWN ��� WM_SYSKEYDOWN. ���� ���� �� ���� ��������� �������, ������� ��� ������, ����� �� ������������� ���������� � ����������� ������� � ���������� ����������. ���� ��� ��������, TranslateMessage �������� PostMessage, ����� ����� ���� � ������� ����������� ��������� WM_CHAR ��� WM_SYSCHAR ��� ������ ��� ������ GetMessage ������� ��������� ���������� ������� ����������� ���� ����� �, ���� � ��� ���� ���������, ��������� ��� � ���������� ������. ���������� �� ���� WM_CHAR, ���� WM_SYSCHAR. ��� ��������� ������ GetMessage ������� ������������, ��� ������� ����������� ��������� ����� ����� ��� ��������� ��� ���� �����, ��� � ������� ��������� WM_(SYS)KEYUP; ������ ��� � ������������ �������� GetMessage.

��������� ������� �������� ���, � �� �����, ������������������ ���������� �� �����:

WM_KEYDOWN
WM_KEYUP

���������� ��������� ������������������ ��������� ��� ������� ��������� (��� ���� ��������������, ��� ���������� � ����������� ������� ����� ������������� � �� ���������� ����������):

WM_KEYDOWN
WM_CHAR
WM_KEYUP

�������� � ����, ��� ������� ������, ��� �� ��������� ������ ������� ������� GctMessage ��� PeekMessage. ���������� ������� ����������� ���������, �������, ������ ��� ������� � �������� ������� ������������ �����, ��������� ���� QS_QUIT ��������� ���� ���� ���������������, ����� ����� �������� PostQuitMessage. ����� PostQuitMcssage ���� �������� �� �� ������, ��� � ����� PostMessage, ������� ���� ���� ��������� � ����� ������� � ��� ����� ���������� ������������ ��� �� ��� ����� ������� ����� ��� ������ �� PostQuitMessage ������������� ���� ������ ����, ����� ��������� WM_QUIT � ������� ���������? �� �� ���� ��� �������.

��-������, � �������� �������� ������ ����� ���������� ���, ��� ����������� ��������� �� ������� ��������� � ������� ��, ���� ���������� ����� �����������, ��� ������ ����������� � ��� ����� ��� �������� ������. ������ ������� � ���, ��� ���� ���� ��������� ������ ��������� ��������� ��������� ����������� ���� ����� �� ���������� ��� ����� ������� ���������. ������� � ��������� �������

�� ���� ��������� WM_USER ����� ��������� �� WM_QUIT, ���� ���� WM_USER ���� ������ �������� � ������� ����� ������ PostQuitMessage.

case WM_CLOSE:

PostQuitMessage(0);
PostMessage(hwnd, WM_USER, 0, 0);

� ������ � ��������� ���� ����������: WM_PAINT � WM_TIMER. ��������� WM_PAINT ����� ������ ���������, ��� ��� ���������� ������ � �������� �� �� ��� �������. ���� �� ��� ��������� ���������� ������ ���, ����� ���� ���������� ����������������, �������������� ������� ��������� �� ������ �������. �� �� ����� WM_PAINT ����� ����� � ����������, ������� �������� ������� �������. �� ������, �� ���� ����� ������� �����-������ �������, ����������� ���������� ����, ������� � ��� ���-��, ������ ������� Enter � � ��������� ��� ��� ���� �� ����, ��� ���� �������� �� ������. ���������� ������ ������� �������, �� ��������� �� ������, ��� ��������� �� �� ������� ����������� ������, ��� ���� ������� �� �� ������� WM_PAINT. � ����� �� ��������� ������� Enter, ����������� ��� ����� �������� ����������, ��������� � ���������� ����, ������� ��������� ���� � ���� ������ ���� QS_PAINT

��������� WM_TIMER ��� ����, ��� WM_PAINT. ������? ��������, �����-�� ��������� ��������� ���� ���� ������ ���, ����� �������� ��������� WM_TIMER. ���� �� ��� ��������� ������� �����, ��������� ������ �� ������ �� ��������� ���� ���� �� ��������� ��������� WM_PAINT �������������� �� WM_TIMER, ����� �������� �� ���������.

NOTE
������� GetMessage PeekMessage ��������� ����� ����������� ������ ��� ����������� ������. ��� ������, ��� ������ ������� �� ������ ������� ���� ����� �� �������, �������������� � ������� ������, ������� ��������� ��� ������� ���� �� ��������.

����������� ������ � �������������� �������� ���� ��� ������ ��������� �������

������� GetMessage PeekMessage ���������������� ����� �� ��� ���, ���� ��� �� ����������� ��������� �����-������ ������, ��������� � ���������������� ����� ������. ������ �� �� ����� ���� �� ������ � ��� ��������� ������ �����. ��� ����� ����� ������ ���-�� �������� � ���������� ��������, �� ����������� � �������� ��������� ����������.

����� ����� ���� ����������� ���������, �������� ������� MsgWaitForMultiple Objects ��� MsgWaitForMultipleObjectsEx:

DWORD MsgWaitForMultipleOb]ects( DWORD nCount, PHANDLE phOb]ects, BOOL fWaitAll, DWORD dwMilUseconds, DWORD dwWakeMask);

DWORD MsgWaitForMultipleObjectsEx( DWORD nCount, PHANDLE phObjects, DWORD dwMilUseconds,DWORD dwWakeMask, DWORD dwFlags);

��� ������� ���������� WaitForMultipleObjects (�� ����� 9). ������� � ���, ��� ��� �� ������������� ����� ���������� �����������, ����� ������������� ����� ������ �� ��������� �������� ���� ��� ����� ������� ��������� ����� ��������� ����, ���������� ���� �������.

��������� ������� ������ ��������� ������ ���� "�������" � ������ ���������� ���� �������� dwWakeMask �������� �������, � ����� ������ ������-������� ��� ��� ���������� R ��������� ���������. ��� ���������� �������� ��������� ���, ������� ����� ���������� � ������� GetQueueStatus.

WaitForMultipleObjects ������ ���������� ������ �������������� ������� (� ��� ������ �� WAIT_OBJECT_0 �� WAIT_OBJECT_0 + nCount - 1). ������� ��������� dwWa keMask ����������� ���������� ��� ������ ��������� ��� ���������� �������, ������������� ������ �����������,MsgWaitForMullipleObjects(Ex) ���������� ����� ��� WAIT_OBJECT_0 + nCount.

��� ������ ������ MsgWaitForMultipleObjects

MsgWaitForMultipleObjects(0, NULL, TRUE, INFINITE, QS_INPUT);

��������� ���������������� �������� � ���� ��������� �� ���������� � �� ������� nCountphObjects ����� �������������� 0 � NULL. �� ��������� ������� ����� ������������ ���� �������� �� � ���������������� ����� ���� ���� ������, � � ��� �� ������� ��������� fWaitAll ����� ���� �� ��������� �������� FALSE. �� ����� ��������, ��� ����� ����� � ������� �� ������� ��� �� ����������� � ���� ����� � ������� ����� ������ ��������� �� ���������� ��� ����.

����� ������������ �������� MsgWaitForMultipleObjects � ����� ����������, �� ������ �������, ��� ��� ������ ������ ������ �������. ��� ������ Microsoft ��� ����� ������� ����� ����������� ������� MsgWaitForMultipleObjectsEx, ������� �� ������� ������ � ��������� dwFlags ����� ���������� ��������� ������.

����

��������

MWMO_WAITALL

������� ���� ������������ ���� �������� ���� � ��������� � ������� ������ ��������� ��������� (��� ����� ����� ���� ��� ���� ������������ ������ �� �������� ���� ��� ������ ��� � ������� ������ �� ��������� ���������)

MWMO_ALERTABLE

������� ���� � ���������� ���������

MWMO_INPUTAVAILABLE

������� ���� ��������� � ������� ������ ������ �� ������ ��� ���������

���� ��� �� ����� ��� �������������� �����������, ��������� � dwFlags ���� ��� ��������.

��� ������������� MsgWaitForMultipIeObjects(Ex) ����������, ���.

��������, ��� � ��������� ����������� ���� ������� � �� ����� �������� ��� ���� ��� ������ �������������. ������� ������� ������ ��������, � ������� �� ���� ��������� ��� ��������� � ������� ������. ���� ������ ������� MsgWaitForMul tipleObjects(Ex) � ������ � dwWakeMask �������� QS_INPUT, ����� ����������, ����� ��� �� ������� ������ ��������� � ���������� ��� �� �� ��������� ����� MsgWait ForMultipleObjects(Ex) ����� ����� �� ����������� � ���� ����� ��������� � ����� �� ���.

���� �������� ������ ������� ������� �������������, ��� Microsoft �������� �������� � MsgWaitForMultipleObjectsEx ��������� ����� MWMO_INPUTAVATLABLE

��� ��� ���� ������ ���� ������� ��������� ��� ������������� MsgWaitForMul tipleObjectsEx

BOOL fQuit = FALSE; // ���� �� ��������� ����?

while (!fQuit)
{

// ����� ������������ ��� ������������ ������� ���� ���
// ��� ��������� ��������� �� ����������������� ����������

DWORD dwResult = MsgWaitForMultipleObjectsEx(1, &hEvent, INFINITE, QS_ALLEVENTS, MWMO_INPUTAVAILABLE);

switch (dwResult}
{

case WAIT_OBJECT_0:

// ������������ �������
break;

case WAIT_OBJECT_0 + 1:

// � ������� ��������� ���������
// ��������� ��� ��������� MSG msg;

while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE))
{

if (msg.message == WM_QUIT)
{

// ��������� WM_QUIT - ������� �� �����
fQuit = TRUE;

}
else
{

// ����������� � ���������� ���������
TranslateMessage(&msg);
DispatchMessage(&msg);

}

}

// ���� ������� �����
break;

}

}

// ����� ����� while

�������� ������ ����� ���������

����� �� �������, ��� ������� ������������ �������� ������ ����� ���������� � ������� ��������� � ��������� ������� ���������� �������� lParam ������ ����� ����� ������. ��������, ��������� WM_SETTEXT ���������� lParam ��� ��� ������ �� ������ (� ������� �������� � �����), ���������� ����� ����� ��� ����. ���������� ����� �����:

SendMessage(FindWindow{NULL, "Calculator"), WM_SETTEXT, 0, (LPARAM) "A Test Caption" );

����� �� ��� ���������� ��������� ������������ ��������� ���� Calculator � �������� ������� �������� ��� ��������� �� �A Test Caption�. �� ����������� � ����, ��� ��� ����������

lParam ���������� ����� ������ (� ����� ����������), ������������� � ����� ��� ������������ ������ ��������. ������� ��� ���������, ������� ��������� ��������� Calculator ����� lParam � �������� �������������� ���-��, ���, ��� �� ������", �������� ���������� �� ������ � ����� ����������.

�� ����� � lParam ��������� �� ������ � �������� ������������ ������ ������ ��, � �� ��������� Calculator ��� ��� � ������������ ������������ � ��������� ������� � ������. �� ���� �� ��� �� ��������� ���������� ����� ������, ��� ����� �������� ���������. ��� �� ����������5

� ���� � ���, ��� ������� ����������� ��������� WM_SETTEXT � ������������ �� �� ���, ��� ����������� ������ ���������. ��� ������ SendMessage ���������� ��� ������� ���������, �� ��������� �� �� ������� ��������� WM_SETTEXT. ���� ��� ���, ������� �������� ������ �� ������ ��������� ������������ � �������� ����� � ������ ��� ��������� ������� ��������. ����� ��������� ���������� ���� �� ������� ��������. ����� �����-�������� ����� � ��������� WM_SETTEXT, �� �� �������� ����� ����� �������� ����� (���������� ����� ������) � �������� ��� ��������� ������ �������� ��������� lParam ������������� �������� ������ ����� ������, � WM_SETTEXT ������������ ������ ������� ���������. ����� ��������� ����� ���������, �������� ����� ������������ �� ������� �� ��� ���������, �?

� �������, ����������� ��������� �� ������� ����� ��������� � ��� �������� ������, ������ ���� ��������� ���������� ������� ��������. (��������: ��������� ��������� ����������� � ��� ������ ���������, ��������� wParam ��� lParam �� ������ �������� ��������� �� �����-���� ��������� ������ )

� ��� ������ ������, ����� �� ������� ��������� ������ ���������, � ��������� WM_GETTEXT. ��������, ���� ��������� �������� ���:

char szBuf[200];

SendMessage(FindWindow(NULL, "Calculator"), WM_GETTEXT, Sizeof(szBuf), (LPARAM) szBuf);

WM_GETTEXT �������, ����� ������� ��������� ��������� Calculator ������� �� � �����, �� ������� ��������� szBuf, ��������� ������ ����. ����� �� ��������� ��� ��������� ���� ������� ��������, ������� ������ �� ����� ���� ������� ��� ���������. ������� � WM_GETTEXTLENGTH ������� ��������� ���������� ����� �������� � ������ ��������� ����. ��� �������� ������� ���������� ��� �������� �������� �����, ����������� ����� ����������,

������ �������� �����, ������� �������� ��� cro ���������� ��������� WM_GET TEXT ����� ������������� ������� �� �������, ������ ��������� ������� SendMes-

sage, �������� ������ �� ����� �������� ����� � �����, �� ������� ��������� szBuf, � ���������� SendMessage ������� ����������

��� �, ��� ������, ���� �� ��������� ���������, ��������� ������� � ���� �� ��������� ����������� ��������� (WM_USER + x), ��������� ��������� ��� ���� ������� ��������? ������� �� �������, ��� ��� ����� ����� �������� ����� ��� ������������� ���������� ��� �� ���������. �� ����� ���� � ��� ��������� WM_COPYDATA:

COPYDATASTRUCT cds;

SendMessage(hwndReceiver, WM_COPYDATA, (WPARAM) hwndSender, (LPARAM) &cds);

COPYDATASTRUCT ���������, ������������ � WinUser.h:

typedef struct tagCOPYDATASTRUCT
{

ULONG_PTR dwData;
DWORD cbData;
PVOID lpData;

} COPYDATASTRUCT;

����� ��������� ������ ���� ������� ��������, ����� ������� ������������ ���� ��� ���������. ������� dwData ������������� ��� ������������� � ����� ��� ������ � ���� ����������� ���������� ����� ��������. ��������, ��������� � ��� ��� ������� ������, � ���� �������� ����� ��������� ��� ������

������� cbData ������ ����� ������, ������������ � ������ �������, a lpData ��������� �� ������ ���� ������ �����, ���������������� ��������� lpData, �� �������, ������� ��, � �������� ������������ �����������

������, ��� �� ��������� ��������� WM_COPYDATA, SendMessage ������� ����� ��� ����� �������� cbData ������ � �������� ������ �� ��������� ������������ ����� ��������� � ��� ��������. ����� ���������� ��������� ����-��������� ��� ��������� ����� ��������� ����������� ������� ���������� �������� lParam ��������� �� ��������� COPYDATASTRUCT, ������� ��������� � �������� �������� ���� ��������-��������� ������� lpData ���� ��������� ��������� �� �������� ����� � �������� ������������ ��������-���������.

��� ������� ������� � ���� ������ �����, ��������� � ���������� WM_COPY DATA

DATA � ��������� COPYDATASTRUCT � Microsoft Visual �++ ������ 1 52 �� �� �������� ��� �������� �������� �� ����������� �������������.

// �������� ���� ��� � ���� 16-��������� Windows-���������
#define WM_COPYDATA 0x004A

typedef VOID FAR* PVOID;

typedef struct taqCOPYDATASTRUCT
{

DWORD dwData;
DWORD cbDdta;
PVOID lpData;

} COPYDATASTRUCT, FAR* PCOPYDATASTRUCT;

��������� WM_COPYDATA � ������ ����������, ����������� ������������� ��������� ����� ������� ��� ������� ������� ����� ����� ���������� � ����� ����, ��� ����������� ��� ������� ��������� ������� ��� ���������, ���������� �� ���������-������ LastMsgBoxInfo �� ����� 22

���������-������ CopyData

��� ���������, �26 CopyData.exe� (��. ������� �� ��� 26-3), ������������� ����� ����� ��������� WM_COPYDAIA ��� ��������� ����� ������ �� ����� ��������� � ������ ����� ��������� ���� � �������� ���� ��������� ��������� � �������� 26 CopyData �� �������-�����, ����������� � ����� ����� ������� ��������� CopyData � ��������, ��������� ������� ��� �� �����, ��� ���� ������ ����� ��������� ��� ������� ����, ���������� ����

rihter26-3.jpg

���� �� ������ ����������, ��� ������ ���������� �� ������ ���������� � ��� ���, �� ������� �������� ���������� ����� Datal � Data2 ����� �������� ���� �� ���� ������ Send Data* To Other Windows ��������� �������� ������ ���� ����� ������ ����������� CopyData, � � �� ����� �������� ����� ������

� ������ ������� ������� ������ ���������. ������ ����� �� ���� ������ �������� �.

  1. ������������� �������� dwData ��������� COPYDATASTRUCT ������� ��� ������ (���� ������� ������ Scnd Datal To Other Windows) ��� �������� (���� ������� ������ Send Data2 To Other Windows)
  2. �������� ����� ��������� ������ (� ��������) �� ���������������� ���� � ����������� �������, ����� ������ ������� ������ � ����� ���������� ��� �� �������� ������������� � ���������� ������ ���������� �� sizeof(TCHAR), � ��������� ������������ � ������� cbData ��������� COPYDATASTRUCT
  3. ������ _alloca, ����� �������� ���� ������, ����������� ��� �������� ���� �� � ������ ��������� �������� ������� ����� ����� ����� ������������ � ������� lpData ��� ��� �� ���������
  4. ����������� ������ �� ���� � ���������� ���� ������

������ ��� ������ ��� ��������� � ������ ���� ����� ����������, ����� ����� ������� �������� ��������� WM_COPYDATA, ��������� �������� FindWindowEx � �������� ��������� ������ ����������� ���� - ��������� ����� ������������� ���� �� ������ ���������� ������ ���������. ����� ���� ���� �����������, ��������� ���������� �� ��������� WM_COPYDATA, ��� ���������� �� �������� ���������� ����� �����.

CopyData

 

��� Windows ������������ � ANSI/Unicode-��������� � ��������

WINDOWS 98
Windows 98 ������������ ������ � ��������� ���� ������ � ������� ANSI

���������� ����� ����� ����, �� ������ �������� ������� ����� ������� ����� ����, ������� �������� �� ��������� ��������� ��� ����� ������. � ��������� ���� ������ (��������, WM_SETTEXT) �������� lParam �������� ���������� �� ������. ��� ���������� ��������� ��������� ������� ������ ������� �����, � ����� ������� ������� ��������� ��������� ������ � ANSI ��� Unicode.

������� ���������� ������� ��� ����������� ������ ����, �� ��������� ��� ���� ������, ���������� ��� ����� ������� ��������� ���� �� �������� ������� �� WNDCLASS � ��������� RegisterClassA, ������� �������, ��� ��������� ������� ������������� ANSI-������ � ������� � ����������� ������ ���� ����� R�gister ClassW �������� ������� ��������, ��� ��������� ����� Unicode. �, ������� ��, � �� ��������� �� ����, ��������� �� UNICODE ��� ���������� ������ ��������� ����, ������ RegisterClass ����� ������� ���� � RegisterClassA, ���� � RegisterClassW

���������� ���������� ����, �� ������ ��������, ����� ������ �������� � ����� ������� ������� ��������� ��� ����� �������� �������:

BOOL IsWindowUnicode(HWND hwnd);

���� ������� ��������� ������� �������� ������ ������ � Unicode, ��� ������� ���������� TRUE, � ���� ������ � FALSE.

���� �� ������������ ANSI-������ � ��������� ��������� WM_SETTEXT ����, ��� ��������� ��������� ������ Unicode-������, �� ������� ����� �������� ���� ����� ������������� ����������� ��� � ������ ������. ��� ��� ������������� � ������ lsWindowUnicode ��������� �������

������� ������������� ��������� ��� �������������� � ��� �������� ������� ca ����. ��������, ��� ��� ���������� ������ ���� ����� ������� ��������� ����� �� �������� �������� � ����� � Unicode ����� ����, ���-�� � ��������� �� �������� ���� ����� � �������� ������� ���������, �������

LONG_PTR SetWindowLongPtrA( HWND hwnd, int nlndex, LONG_PTR dwNewLong);

���

LONG_PTR SetWindowLongPtrW( HWND bwnd, int nIndGx, LONG_PTR dwNewLong);

��� ���� �� ��������� � ��������� nlndex �������� GOLP_WNDPROC, � � ���� ����� dwNewLong � ����� ����� ��������� ���������. �� ��� �����, ���� ���� ��� ������ ������� �������� �������� � ����� � ������� ANSI? B ��������, ��� ����� �� ����������. ������� ����������, ��� ��������������� ������ � ������� � ���� ������� �� �������, ��������� ���� ��� �������� ��������� ��������� SetWmdow LongPtrA, �� ��������� Windows, ��� ����� ������� ��������� (������ ���������) ��������� ������ � ������� ������ � ANSI. (������ IsWindowUnicode ����� SetWin dowLongPtrA, �� �������� �� FALSE, ��� ��� ����� ��������� �� ��������� ������ � ������� � Unicode.)

�� ������ � ��� ����� ��������: ��� ������� ���, ����� �������� ��������� ���� ���� ������� � ������ � ����� �������? ��� ����������� �������������� ������� ����� ����� ��� ����. ��-������, ������� ������ �������� � �����. ��� ������� ��� �� �������������, ������� ���� �� ���� ������� � CallWindowProcA ��� CalWin dowProcW

LRESULT CallWindowProcA( WNDPROC wndprcPrev, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

LRESULT CallWindowProcW( WNDPROC wndprcPrev, HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

��� �������� �������� ������� ��������� ANSI-����� ��������� ��������� ��� ��� �������� CalWindowProcA, � ��� �������� Unicode-����� � CallWtndowProcW

������, � ��� ������ ����� �������, � ��� �������� � �����, ��������� ����� ��� ������� ���������� ������� �������� ��� ���������� �� ������ ���� ����� ����. ����� �� ��������� SetWindowLongPtrA ��� SetWindowIongPtrW, ������� ����� ����, �������� �� �� ANSI-�������� Unicode-��������� ���� ��� ��������. ���� ��� �������� ��������� ��� ����� �� ��������, SetWindowLongPtr ������ ���������� �� ��� �������� ���������. � ���� ������ SetWmdowLongPtr ������ ����� ������ ��� ������� ��������� ���������� ��������� ������.

��� ��������� �������� ����� �������� ������� ��������� � ��������, ������� ��������� �� ��������� �� ������ ����� ��� ������ CallWindowProc ������� ��� ������, ��� �� ��������� � ����� ������� ��������� ��� ��������� ���������� ��������� ������. � ������ ������ ������� ����� ���������� � �������� ������� ���������, ��� ��� ������� �������������� �� ���������, � �� ������ ������ ����� �� ������� ����������� ������� � ������ � ��������������� ��������� � ������ ����� �������� �������� ������� ���������.