C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Программное нажатие кнопки мыши, Имитация мыши
DarkStar
Отправлено: 03.10.2004, 16:42


Ученик-кочегар

Группа: Участник
Сообщений: 20



Искал на форуме такой вопрос
Ответы были что надо послать сообщение.
Плиз, если кому не трудно напишите как это делается, сообщение никогда не посылал. Например как программно послать сообщение системе нажатие левой кнопки мыши. Заранее спасибо.
olegenty
Отправлено: 04.10.2004, 08:01


Ветеран

Группа: Модератор
Сообщений: 2412



QUOTE
The PostMessage function places (posts) a message in the message queue associated with the thread that created the specified window and then returns without waiting for the thread to process the message. Messages in a message queue are retrieved by calls to the GetMessage or PeekMessage function.

BOOL PostMessage(

   HWND hWnd, // handle of destination window
   UINT Msg, // message to post
   WPARAM wParam, // first message parameter
   LPARAM lParam  // second message parameter
  );


Parameters

hWnd

Identifies the window whose window procedure is to receive the message. Two values have special meanings:

Value Meaning
HWND_BROADCAST The message is posted to all top-level windows in the system, including disabled or invisible unowned windows, overlapped windows, and pop-up windows. The message is not posted to child windows.
NULL The function behaves like a call to PostThreadMessage with the dwThreadId parameter set to the identifier of the current thread.


Msg

Specifies the message to be posted.

wParam

Specifies additional message-specific information.

lParam

Specifies additional message-specific information.



Return Values

If the function succeeds, the return value is nonzero.
If the function fails, the return value is zero. To get extended error information, call GetLastError.

Remarks

Applications that need to communicate using HWND_BROADCAST should use the RegisterWindowMessage function to obtain a unique message for inter-application communication.
If you send a message in the range below WM_USER to the asynchronous message functions (PostMessage, SendNotifyMessage, and SendMessageCallback), make sure that the message parameters do not include pointers. Otherwise, the functions will return before the receiving thread has had a chance to process the message and the sender will free the memory before it is used.

See Also

GetMessage, PeekMessage, SendMessageCallback, SendNotifyMessage
olegenty
Отправлено: 04.10.2004, 08:41


Ветеран

Группа: Модератор
Сообщений: 2412



PostMessage
DarkStar
Отправлено: 04.10.2004, 19:57


Ученик-кочегар

Группа: Участник
Сообщений: 20



Я понимаю что мы все гении, когда касается разговоров на темы которые знаем.
Теперь на русском языке. Пожалуйста, если не трудно примерчик как послать сообщение системе нажатие левой кнопки мыши.
Извиняюсь за мою навязчивость, но если бы я нашел то не спрашивал бы.
Gedeon
Отправлено: 05.10.2004, 12:15


Ветеран

Группа: Модератор
Сообщений: 1742



QUOTE (DarkStar @ 04/10/2004, 20:59)
Пожалуйста, если не трудно примерчик как послать сообщение системе нажатие левой кнопки мыши.

biggrin.gif
CODE

System->LeftMouseButtonPress();


Сообщение Вы можете послать какому-либо окну, а не системе.
CODE

PostMessage(          HWND hWnd,
                               UINT Msg,
                               WPARAM wParam,
                               LPARAM lParam
);

или
CODE

LRESULT SendMessage(          HWND hWnd,
                                               UINT Msg,
                                               WPARAM wParam,
                                               LPARAM lParam
);

Чем они отличаются читать в MSDN, а так же в зависимости от задачи читать все, что написано рядом.

hWnd — Handle окна, которому отправляется сообщение.
Msg — определяет какое именно сообщение отправляем в нашем случае может интересовать: WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK.
Дальше привожу цитату из MSDN по нижним параметрам
QUOTE

Parameters

wParam
Indicates whether various virtual keys are down. This parameter can be one or more of the following values.
MK_CONTROL
The CTRL key is down.
MK_LBUTTON
The left mouse button is down.
MK_MBUTTON
The middle mouse button is down.
MK_RBUTTON
The right mouse button is down.
MK_SHIFT
The SHIFT key is down.
MK_XBUTTON1
Windows 2000/XP: The first X button is down.
MK_XBUTTON2
Windows 2000/XP: The second X button is down.
lParam
The low-order word specifies the x-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.

The high-order word specifies the y-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.


А если и так не понятно пишите, что конкретно хотите сделать, нажмем. smile.gif
DarkStar
  Отправлено: 05.10.2004, 18:23


Ученик-кочегар

Группа: Участник
Сообщений: 20



Пасибо. Все что я хотел. Нормальным доступным языком.
DarkStar
Отправлено: 05.10.2004, 19:47


Ученик-кочегар

Группа: Участник
Сообщений: 20



Как послать сообщение какому нибудь окну я понял и у меня все получилось. А как определить над каким объектом находиться мышь. и нажать именно на тот обект который под нею.
Я не очень назойлив biggrin.gif
olegenty
Отправлено: 06.10.2004, 07:05


Ветеран

Группа: Модератор
Сообщений: 2412



PostMessage(HWND_BROADCAST,WM_LBUTTONDOWN, ..., ...);

это будет широковещалка, и поймает её то окно, что будет находиться непосредственно под мышью...
DarkStar
Отправлено: 08.10.2004, 00:39


Ученик-кочегар

Группа: Участник
Сообщений: 20



Ок, а какое значение должно передаваться в качестве lParam?
olegenty
Отправлено: 08.10.2004, 07:25


Ветеран

Группа: Модератор
Сообщений: 2412



Всё-таки лень тебе самому справку читать.
вот самое ценное оттуда:

fwKeys = wParam; // key flags
xPos = LOWORD(lParam); // horizontal position of cursor
yPos = HIWORD(lParam); // vertical position of cursor


более подробно -
QUOTE

The WM_LBUTTONDOWN message is posted when the user presses the left mouse button while the cursor is in the client area of a window. If the mouse is not captured, the message is posted to the window beneath the cursor. Otherwise, the message is posted to the window that has captured the mouse.

WM_LBUTTONDOWN  
fwKeys = wParam;        // key flags
xPos = LOWORD(lParam);  // horizontal position of cursor
yPos = HIWORD(lParam);  // vertical position of cursor

Parameters

fwKeys

Value of wParam. Indicates whether various virtual keys are down.
This parameter can be any combination of the following values:

Value Description
MK_CONTROL Set if the CTRL key is down.
MK_LBUTTON Set if the left mouse button is down.
MK_MBUTTON Set if the middle mouse button is down.
MK_RBUTTON Set if the right mouse button is down.
MK_SHIFT Set if the SHIFT key is down.

xPos

Value of the low-order word of lParam. Specifies the x-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.

yPos

Value of the high-order word of lParam. Specifies the y-coordinate of the cursor. The coordinate is relative to the upper-left corner of the client area.
[B][/B]

Вернуться в Вопросы программирования в C++Builder