Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Низкоуровневое программирование > Win Api
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 29.06.2010, 12:48   #1
Vic65
Пользователь
 
Регистрация: 28.07.2008
Сообщений: 15
По умолчанию WM_LBUTTONDOWN нажимает не туда

Посылаю сообщение WM_LBUTTONDOWN окну Сапёра в точку с координатами (3, 4) (как мне кажется):

Код:
Private Declare Function FindWindow Lib "user32" _
  Alias "FindWindowA" ( _
  ByVal lpClassName As String, _
  ByVal lpWindowName As String) As Long

Private Declare Function SendMessage Lib "user32" _
  Alias "SendMessageA" ( _
  ByVal hWnd As Long, _
  ByVal wMsg As Long, _
  ByVal wParam As Long, _
  lParam As Any) As Long
 
Private Const WM_COMMAND = &H111
Private Const BM_CLICK = &HF5
Private Const WM_MOUSEMOVE = &H200
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Private Const MK_LBUTTON = &H1

Public Sub ClikСапёр()
    Dim hWnd As Long
    Dim lParam As Long
'    shell "winmine.exe", vbNormalFocus
    hWnd = FindWindow(vbNullString, "Сапер")
Let lParam = MakeDWord(3, 4)
'    MsgBox hWnd & " " & HiWord(lParam) & " " & LoWord(lParam)
e = SendMessage(hWnd, WM_LBUTTONDOWN, 0, lParam)
End Sub
      Function MakeDWord(LoWord As Integer, HiWord As Integer) As Long
         MakeDWord = (HiWord * &H10000) Or (LoWord And &HFFFF&)
      End Function
   Function LoWord(DWord As Long) As Integer
      If DWord And &H8000& Then ' &H8000& = &H00008000
         LoWord = DWord Or &HFFFF0000
      Else
         LoWord = DWord And &HFFFF&
      End If
   End Function

   Function HiWord(DWord As Long) As Integer
      HiWord = (DWord And &HFFFF0000) \ &H10000
   End Function
Клик доходит до окна, но в точку с непонятными координатами.
MS Spy++ говорит, что это точка с xPos:-2676 yPos:19
Причём не имеет значение какие координаты указаны в строке:
Код:
lParam = MakeDWord(3, 4)
Клик всегда в волшебную точку -2676;19

Как попасть куда хочется?

Спасибо.
Изображения
Тип файла: jpg СапёрSpy.jpg (8.0 Кб, 93 просмотров)
Vic65 вне форума
Старый 06.07.2010, 11:06   #2
Vic65
Пользователь
 
Регистрация: 28.07.2008
Сообщений: 15
По умолчанию Проблема решена.

Подсказали товарищи...
Неправильный тип параметра lParam в декларации функции SendMessage.
Было - lParam As Any.
Исправлено на - ByVal lParam As Long.
Так всё работает.
Подсказали здесь:
http://sql.ru/forum/actualthread.aspx?bid=22&tid=772091
Тему можно закрывать.
Vic65 вне форума
Закрытая тема


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Данные не туда заносятся... panuta Microsoft Office Excel 3 06.06.2010 05:19
Зацените кому не лень сайт и напишите что туда можна еще добавить Антон112 Помощь студентам 8 27.03.2010 09:09
из Delphi Записать строку в Word полсе чего вставить туда картинку. Maddy Помощь студентам 4 29.01.2010 15:00
скрипт каторый нажимает на клавишу? Genie JavaScript, Ajax 1 04.11.2009 15:31