Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нажатие мышью через SendMessage 
:(
    Опции темы
I_Am_Rock
Дата 1.2.2008, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 523
Регистрация: 18.1.2008

Репутация: 12
Всего: 15



Всем привет.
Мне нужно, чтобы по нажатию на Command1, "окно" разблокировалось и происходило так, как будто по нему нажали мышью... Здесь g - хэндл окна...
Что мне надо здесь добавить (или убавить)?

Заранее спасибо!

Код

Private Sub Command1_Click()
EnableWindow g, 1
Call SendMessage(g, WM_MOUSEACTIVATE, 0&, ByVal 0&)
End Sub


Это сообщение отредактировал(а) I_Am_Rock - 1.2.2008, 16:57
PM MAIL WWW   Вверх
I_Am_Rock
Дата 1.2.2008, 23:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 523
Регистрация: 18.1.2008

Репутация: 12
Всего: 15



Вот еще вопрос - скажите, кто знает, - чем DefWindowProc отличается от SendMessage и что мне предпочесть в своей программе?..
PM MAIL WWW   Вверх
Dexx
Дата 2.2.2008, 00:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 13.6.2005

Репутация: 5
Всего: 7



Цитата

The DefWindowProc function calls the default window procedure to provide default processing for any window messages that an application does not process. This function ensures that every message is processed. DefWindowProc is called with the same parameters received by the window procedure. 

Код

LRESULT DefWindowProc(

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

 
 

Цитата

The SendMessage function sends the specified message to a window or windows. The function calls the window procedure for the specified window and does not return until the window procedure has processed the message. The PostMessage function, in contrast, posts a message to a thread's message queue and returns immediately. 

Код

LRESULT SendMessage(

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

читай и смотри в чем разница!


--------------------

PM   Вверх
I_Am_Rock
Дата 2.2.2008, 01:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 523
Регистрация: 18.1.2008

Репутация: 12
Всего: 15



Спасибо, Dexx - сейчас буду вчитываться...smile

Ну, может, все таки подскажешь? (см. первое сообщение)

Добавлено через 6 минут и 50 секунд
Уважаемый модератор!

Я хочу поднять репутацию уважаемому Dexx' у, но у меня нет 100 постов для этого... Вы не могли бы сделать также, как и в соседней ветке (т.е. поднять репутацию за меня)?..

Заранее спасибо.
PM MAIL WWW   Вверх
Dexx
Дата 2.2.2008, 01:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 13.6.2005

Репутация: 5
Всего: 7



Эт, конечно, не ответ, а так информация к размышлению.


--------------------

PM   Вверх
Dexx
Дата 2.2.2008, 03:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 13.6.2005

Репутация: 5
Всего: 7



Может это тоже поможет

Как сэмулировать нажатия определенных клавиш 

Для имитации нажатия на клавишу мыши служит API-функция mouse_event 

Код

Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)

dwFlags - означает, какое событие в данный момент должно происходит
dx,dy - величины, характеризующие перемещение курсора от текущего положения курсора
dx - перемещение по горизонтали (если значение положительное - перемещение идет вправо, если отрицательно - влево)
dy - перемещение по вертикали (если значение положительное - перемещение идет вниз, если отрицательно - вверх).

Пример использования функции: неоходимо переместить курсор из текущей точки нахождения курсора в точку с координатами (851,143) и в этой точке имитировать нажатие левой клавиши мыши

Код

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
Private Type POINTAPI
x As Long
y As Long
End Type
Dim z As POINTAPI
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10
Private Sub Form_Load()
GetCursorPos z 'получить текущее значение местоположения курсора
zx = (851 - z.x) / 2 'необходимо разделить полученное значение на 2.  С чем это связано, я не знаю. А вы?
zy = (143 - z.y) / 2
mouse_event MOUSEEVENTF_MOVE, zx, zy, 0&, 0& 'перемещение курсора
mouse_event MOUSEEVENTF_LEFTDOWN, 0&, 0&, 0&, 0& 'нажатие на левую клавишу мыши
mouse_event MOUSEEVENTF_LEFTUP, 0&, 0&, 0&, 0& 'отпускание левой клавиши мыши
End Sub 

'Примеры использования

Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10

'Имитация клика:
mouse_event MOUSEEVENTF_LEFTDOWN, lpPoint.x, lpPoint.y, 0&, 0&
mouse_event MOUSEEVENTF_LEFTUP, lpPoint.x, lpPoint.y, 0&, 0&



--------------------

PM   Вверх
Dexx
Дата 2.2.2008, 04:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 13.6.2005

Репутация: 5
Всего: 7



Не знаю то тебе надо было или нет.

Создаю первое стандартное  приложение с таким вот кодом

Код


Private Sub Form_Click()
MsgBox "OK"
End Sub

Private Sub Form_Load()
Me.Enabled = False
End Sub





Потом делаю второе приложение.

С таким вот кодом.

Код


Option Explicit

Private Declare Function EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long
Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Private Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Type RECT
        Left As Long
        Top As Long
        Right As Long
        Bottom As Long
End Type

Private Type POINTAPI
        x As Long
        y As Long
End Type


Private Const MOUSEEVENTF_LEFTUP = &H4 '  left button up
Private Const MOUSEEVENTF_LEFTDOWN = &H2 '  left button down

Private Sub Command1_Click()
Dim g As Long
Dim r As RECT
Dim r1 As POINTAPI

g = ?????? ' тут хендел окна  первой проги
'Ну как добыть хендл окна наверное знаешь - FindWindow

EnableWindow g, 1

GetCursorPos r1
GetWindowRect g, r

SetCursorPos r.Left + 50, r.Top + 50 'эти +50 тупо чтоб на заголовок формы не попасть,  ну а если форма будет очень маленькой то ни чего не получится, короче,  сам думай в какое место формы кликать

mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0&, 0&
mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0&, 0&

SetCursorPos r1.x, r1.y  'глупо малеха курсор туда, курсор сюда, но работает

End Sub






запускаю первую прогу.

Нажимаю кнопку во второй проге, в первой выскакивает msgbox с океем!

Вроде то что надо, окно разблокируется и на нем кликается мышью!




Это сообщение отредактировал(а) Dexx - 2.2.2008, 04:51


--------------------

PM   Вверх
Dexx
Дата 2.2.2008, 04:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 292
Регистрация: 13.6.2005

Репутация: 5
Всего: 7



Конечно это не sendmessage. 

Если читать название темы - "Нажатие мышью через SendMessage"
Как не пробовал с SendMessage, и PostdMessage, и тд (всякие там ..Ex) ни чего не получилось!(фигня какая-то получалась, хотя работать должно было).
И зачем это тебе надо вообще на форме так кликать?

Ну эт тоже должно потянуть.



Это сообщение отредактировал(а) Dexx - 2.2.2008, 04:44


--------------------

PM   Вверх
bom
Дата 2.2.2008, 09:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 329
Регистрация: 22.2.2004
Где: Казахстан, Алматы

Репутация: 4
Всего: 6



Код

Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Sub Command1_Click()
    'KPD-Team 1999
    'URL: http://www.allapi.net/
    'E-Mail: [email protected]
    'Set this window to the foreground
    SetForegroundWindow g
End Sub

PM MAIL   Вверх
I_Am_Rock
Дата 2.2.2008, 12:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 523
Регистрация: 18.1.2008

Репутация: 12
Всего: 15



Спасибо. Буду сейчас разбираться...

Dexx, а почему тебе модератор репутацию не повысил, как я просил?..
PM MAIL WWW   Вверх
I_Am_Rock
Дата 2.2.2008, 14:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 523
Регистрация: 18.1.2008

Репутация: 12
Всего: 15



Еще раз спасибо, Dexx.

Попробовал - получилось...
Может, правда, через SendMessage это происходило бы "аккуратнее"... (например, нажатие происходило бы и с минимизированными "окнами")...

Я где-то в Сети встретил вот это:

wm_mouseactivate
...
Use VB
None. ......


Я так подумал - может, просто в VB это в принципе невозможно...

Спасибо и Удачи, Dexx!
PM MAIL WWW   Вверх
Akina
Дата 2.2.2008, 15:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Советчик
****


Профиль
Группа: Модератор
Сообщений: 20581
Регистрация: 8.4.2004
Где: Зеленоград

Репутация: 34
Всего: 454



Цитата(I_Am_Rock @  2.2.2008,  02:19 Найти цитируемый пост)
Я хочу поднять репутацию уважаемому Dexx' у, но у меня нет 100 постов для этого... Вы не могли бы сделать также, как и в соседней ветке (т.е. поднять репутацию за меня)?..

Сделано 

Цитата(I_Am_Rock @  2.2.2008,  13:40 Найти цитируемый пост)
Dexx, а почему тебе модератор репутацию не повысил, как я просил?.. 

Ну, скажем, потому, что модератор тоже человек, и не сидит на форуме 24 часа в сутки, включая выходные и праздники.


--------------------
 О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума.

PM MAIL WWW ICQ Jabber   Вверх
I_Am_Rock
Дата 2.2.2008, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 523
Регистрация: 18.1.2008

Репутация: 12
Всего: 15



Я нашел способ! (путем долгих испытаний smile

Нажатие надо делать так:

1) Использовать не SendMessage, а SendNotifyMessage
2) Сначала послать WM_LBUTTONDOWN
3) А потом WM_LBUTTONUP (иногда почему-то "нажимается" и без этого шага)



Но этого результата я, разумеется, не смог достичь без помощи Dexx' а, так что можете ему еще раз репутацию повысить smile
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.1055 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.