link7100 link7101 link7102 link7103 link7104 link7105 link7106 link7107 link7108 link7109 link7110 link7111 link7112 link7113 link7114 link7115 link7116 link7117 link7118 link7119 link7120 link7121 link7122 link7123 link7124 link7125 link7126 link7127 link7128 link7129 link7130 link7131 link7132 link7133 link7134 link7135 link7136 link7137 link7138 link7139 link7140 link7141 link7142 link7143 link7144 link7145 link7146 link7147 link7148 link7149 link7150 link7151 link7152 link7153 link7154 link7155 link7156 link7157 link7158 link7159 link7160 link7161 link7162 link7163 link7164 link7165 link7166 link7167 link7168 link7169 link7170 link7171 link7172 link7173 link7174 link7175 link7176 link7177 link7178 link7179 link7180 link7181 link7182 link7183 link7184 link7185 link7186 link7187 link7188 link7189 link7190 link7191 link7192 link7193 link7194 link7195 link7196 link7197 link7198 link7199 link7200 link7201 link7202 link7203 link7204 link7205 link7206 link7207 link7208 link7209 link7210 link7211 link7212 link7213 link7214 link7215 link7216 link7217 link7218 link7219 link7220 link7221 link7222 link7223 link7224 link7225 link7226 link7227 link7228 link7229 link7230 link7231 link7232 link7233 link7234 link7235 link7236 link7237 link7238 link7239 link7240 link7241
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