Как послать клик в определенную точку окна

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
Vova_2581
Постоялец
Постоялец
 
Сообщения: 363
Зарегистрирован: 10.01.2010 (Вс) 18:08

Как послать клик в определенную точку окна

Сообщение Vova_2581 » 31.05.2023 (Ср) 20:12

Добрый день!
Начну с описания проблемы. У меня снова производственная необходимость. Есть учебная программа, на ней кнопки, мне нужно сделать свою программу, которая в определенное время будет посылать клик в определенную кнопку. Все бы ничего и решение простое, но... не все так просто. Кнопки эти не обычные, а как бы сказать нарисованные на форме учебного приложения. Я не знаю зачем так сделал разработчик, почему ему понадобилось именно рисовать кнопки, а не использовать обычные элементы управления, не знаю. Поэтому получить имя класса или надпись этих типа "кнопок" не представляется возможным. Уже пробовал... сканеры ничего не находят и возвращают только класс основного окна и все. Поэтому, если это возможно, сделать так: найти основное окно, а потом переместиться курсором в определенное место, где нарисована кнопка и послать клик в эту точку. Это возможно сделать?

Vova_2581
Постоялец
Постоялец
 
Сообщения: 363
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как послать клик в определенную точку окна

Сообщение Vova_2581 » 02.06.2023 (Пт) 7:06

Вот на С++ нашел вот такой код...
Код: Выделить всё
HWND wnd1 = FindWindowA("MSPaintApp",NULL);
            SendMessage (wnd1, WM_LBUTTONDBLCLK, 0, MAKELPARAM(123, 456));
            //SendMessage (wnd1, WM_LBUTTONDBLCLK, 0, MAKELPARAM(560, 425));

Но как интерпретировать MAKELPARAM на VB???

Vova_2581
Постоялец
Постоялец
 
Сообщения: 363
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как послать клик в определенную точку окна

Сообщение Vova_2581 » 02.06.2023 (Пт) 16:23

Эхэхэй! Тут есть кто живой??? Ау!!
Я уже сам накопал... но пока не проверил работает это или нет, не знаю.. ну, вроде на других форумах пишут, что так можно перевести...
Код: Выделить всё
Public Function LoWord(wParam As Long) As Integer
   If wParam And &H8000& Then
      LoWord = &H8000& Or (wParam And &H7FFF&)
   Else
      LoWord = wParam And &HFFFF&
   End If
End Function

Public Function MAKELPARAM(ByVal wLow As Long, ByVal wHigh As Long) As Long
        MAKELPARAM = LoWord(wLow) Or (&H10000 * LoWord(wHigh))
End Function

Или так...
Код: Выделить всё
Public Function MakeLParam(LoWord As Integer, HiWord As Integer) As Integer
        Return ((HiWord << 16) Or (LoWord And &HFFFF))
End Function

wLow - X; wHigh - Y

Осталось только проверить эти коды.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Как послать клик в определенную точку окна

Сообщение Mikle » 03.06.2023 (Сб) 9:20

Vova_2581 писал(а):Тут есть кто живой??? Ау!!

Есть!
Пойдёт такой вариант?
Код: Выделить всё
Option Explicit

Private Type TwoW
  W1 As Integer
  W2 As Integer
End Type

Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" (Destination As Any, Source As Any, ByVal Length As Long)
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Const WM_LBUTTONDOWN = &H201
Private Const MK_LBUTTON = &H1

Private Sub Command1_Click()
  SendMessage hwnd, WM_LBUTTONDOWN, MK_LBUTTON, MKDW(40, 50)
End Sub

Private Function MKDW(ByVal W1 As Integer, ByVal W2 As Integer) As Long
  Dim TwoW As TwoW, d As Long

  TwoW.W1 = W1
  TwoW.W2 = W2
  CopyMemory d, TwoW, 4
  MKDW = d
End Function

Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
  If Button = 1 Then
    Caption = Str(X) & Str(Y)
  End If
End Sub

Vova_2581
Постоялец
Постоялец
 
Сообщения: 363
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как послать клик в определенную точку окна

Сообщение Vova_2581 » 03.06.2023 (Сб) 9:39

Mikle
Оооо!! Спасибо за отклик, а то я думал тут вообще никого нет, сам с собой общаюсь. ) Да... Думаю проверю Ваш вариант на каком нибудь локальном окне, надеюсь все получится. Потом напишу... Спасибо!

Vova_2581
Постоялец
Постоялец
 
Сообщения: 363
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как послать клик в определенную точку окна

Сообщение Vova_2581 » 03.06.2023 (Сб) 9:55

P.S. Знаете, недавно случайно прочел статью уже давнюю, где Майкрософт заявила о прекращении поддержки Visual basic в качестве языка и полностью переходит на C#. ((((((((( https://habr.com/ru/news/492158/
Просто капец! Нет слов! Очень неправильное решение от этой компании, очень неправильное! На Basic можно вполне с успехом решать 90% всех потребностей, а все эти C... сложные и запутанные. Даже анекдоты ходят насчёт языков: Программист C++ решит поставленную задачу за 5 часов, программист Delphi решит эту же задачу за 2 часа, а программист на Basic решит эту задачу за десят минут. И не с проста такой анекдот, есть доля правды. Жаль, что очень неправильное решение приняли в Майкрософт. Да и тут людей поубавилось, думал стали люди забывать такой хороший язык. (((((((

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16475
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как послать клик в определенную точку окна

Сообщение Хакер » 03.06.2023 (Сб) 21:18

Vova_2581 писал(а):P.S. Знаете, недавно случайно прочел статью уже давнюю, где Майкрософт заявила о прекращении поддержки Visual basic в качестве языка и полностью переходит на C#.

Так это речь о VB.NET, который только эксплуатирует раскрученный ранее бренд «Visual Basic». А сам Visual Basic в его классическом виде они давно забросили.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Mikle
Изобретатель велосипедов
Изобретатель велосипедов
Аватара пользователя
 
Сообщения: 4148
Зарегистрирован: 25.03.2003 (Вт) 14:02
Откуда: Туапсе

Re: Как послать клик в определенную точку окна

Сообщение Mikle » 03.06.2023 (Сб) 21:27

Хакер писал(а):А сам Visual Basic в его классическом виде они давно забросили.

Да. Но, с другой стороны, существуют вполне классические VBScript и VBA, которые даже веянию VB.NET не поддались. Их так просто не убить, не убив Windows вообще.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 363
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как послать клик в определенную точку окна

Сообщение Vova_2581 » 03.06.2023 (Сб) 23:25

Хакер писал(а):А сам Visual Basic в его классическом виде они давно забросили.

Очень жаль... Хороший язык, простой, доступный, легкий, удобный. Очень жаль, что его поддержку закрыли, обидно. :(
Может быть где-то уже с версии Windows, скажем, 12 или 15 уже исчезнут все нужные библиотеки, типа msvbvm60.dll или подобные и тогда все программы на VB просто перестанут работать. Нет слов! Обидно до слез. :cry:

Vova_2581
Постоялец
Постоялец
 
Сообщения: 363
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как послать клик в определенную точку окна

Сообщение Vova_2581 » 03.06.2023 (Сб) 23:40

Ладно... Что касается темы...
Проверил все варианты, набросал проект, с кликом на Picture и тут вот какая штука получается...
Если вместо MKDW или MAKELPARAM поставить просто "0", то Picture все равно принимает сообщения WM_LBUTTONDOWN и меняет свой цвет, как запрограммировано. И тут вопрос: так Picture получил Клик или он просто получил сообщение WM_LBUTTONDOWN и выполнил событие MouseDown ??? Что-то не совсем понятно. :roll:
Вложения
Click on Point.rar
(1.62 Кб) Скачиваний: 17

Хакер
Телепат
Телепат
Аватара пользователя
 
Сообщения: 16475
Зарегистрирован: 13.11.2005 (Вс) 2:43
Откуда: Казахстан, Петропавловск

Re: Как послать клик в определенную точку окна

Сообщение Хакер » 04.06.2023 (Вс) 13:11

Vova_2581 писал(а):типа msvbvm60.dll

Её всегда можно положить рядом с EXE. В век, когда программа для составления списка покупок весит 340 мб, а ёмкости накопителей измеряются терабайтами, лишние 1,5 мб это ничто.
—We separate their smiling faces from the rest of their body, Captain.
—That's right! We decapitate them.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 363
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как послать клик в определенную точку окна

Сообщение Vova_2581 » 04.06.2023 (Вс) 13:23

Ну... Хоть какое-то утешение.

The trick
Постоялец
Постоялец
 
Сообщения: 775
Зарегистрирован: 26.06.2010 (Сб) 23:08

Re: Как послать клик в определенную точку окна

Сообщение The trick » 04.06.2023 (Вс) 14:14

Vova_2581 писал(а):Может быть где-то уже с версии Windows, скажем, 12 или 15 уже исчезнут все нужные библиотеки, типа msvbvm60.dll или подобные и тогда все программы на VB просто перестанут работать. Нет слов! Обидно до слез. :cry:

Для чего им это делать? Они наоборот стараются по максимуму сохранить обратную совместимость. В новых ЯП есть куча улучшений и удобств и уже это высказывание:
Программист C++ решит поставленную задачу за 5 часов, программист Delphi решит эту же задачу за 2 часа, а программист на Basic решит эту задачу за десят минут.

уже неактуально, а даже наоборот. Поэтому ЯП нужно выбирать исходя из задачи. Для более низкоуровневых задач выбирать что-то из С подобных, а лучше Rust. Для высокоуровневых уже смотреть в сторону дотнета, java, Python и т.п. Если для себя пишешь то можно и на вб6 писать, тем более уже вышел TwinBasic - позиционирующий себя как 100% совместимый с VB6 (даже его баги типа Not Not там сохранены).
UA6527P

Vova_2581
Постоялец
Постоялец
 
Сообщения: 363
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как послать клик в определенную точку окна

Сообщение Vova_2581 » 04.06.2023 (Вс) 15:07

TwinBasic ??? Никогда не слышал, спасибо за информацию, как нибудь покопаю в этом направлении... Да... я думаю, что VB не дадут просто так умереть. Обязательно найдутся энтузиасты, которые будут разрабатывать и развивать этот язык и в дальнейшем. Мы ещё не раз услышим о новых версиях PowerBasic или того же Twin... и ему подобные!! Дай Бог!! Дай Бог!!

Что касательно темы...
Попробую проверить, как все будет работать на учебной программе, надеюсь получиться.

Teranas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 224
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: Как послать клик в определенную точку окна

Сообщение Teranas » 05.06.2023 (Пн) 12:45

The trick писал(а):
Vova_2581 писал(а):Может быть где-то уже с версии Windows, скажем, 12 или 15 уже исчезнут все нужные библиотеки, типа msvbvm60.dll или подобные и тогда все программы на VB просто перестанут работать. Нет слов! Обидно до слез. :cry:

Для чего им это делать? Они наоборот стараются по максимуму сохранить обратную совместимость. В новых ЯП есть куча улучшений и удобств и уже это высказывание:
Программист C++ решит поставленную задачу за 5 часов, программист Delphi решит эту же задачу за 2 часа, а программист на Basic решит эту задачу за десят минут.

уже неактуально, а даже наоборот. Поэтому ЯП нужно выбирать исходя из задачи. Для более низкоуровневых задач выбирать что-то из С подобных, а лучше Rust. Для высокоуровневых уже смотреть в сторону дотнета, java, Python и т.п. Если для себя пишешь то можно и на вб6 писать, тем более уже вышел TwinBasic - позиционирующий себя как 100% совместимый с VB6 (даже его баги типа Not Not там сохранены).


Спасибо за TwinBasic! Попробовал, с одной кнопкой, но VT всё равно немного срабатывает.
Изображение
С уважением, Андрей.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 363
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как послать клик в определенную точку окна

Сообщение Vova_2581 » 05.06.2023 (Пн) 17:46

Virus Total всегда будет срабатывать. Неважно какой файл. Тут нужно смотреть как бы в процентном отношении. Если 90% всех антивирусов в VT говорят, что все ок, то с большей вероятностью можно судить, что действительно все ок и нет причин для паники.

Teranas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 224
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: Как послать клик в определенную точку окна

Сообщение Teranas » 05.06.2023 (Пн) 22:31

Vova_2581 писал(а):Virus Total всегда будет срабатывать. Неважно какой файл. Тут нужно смотреть как бы в процентном отношении. Если 90% всех антивирусов в VT говорят, что все ок, то с большей вероятностью можно судить, что действительно все ок и нет причин для паники.


Разработчику пофиг, он знает, что его проект чистый, а вот пользователи истерику закатывают.
С уважением, Андрей.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 363
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как послать клик в определенную точку окна

Сообщение Vova_2581 » 05.06.2023 (Пн) 22:59

Teranas писал(а):Разработчику пофиг, он знает, что его проект чистый, а вот пользователи истерику закатывают.

Что верно, то верно! У меня мой локальный антивирус постоянно ругается на мои программы собственной разработки и хотя я то знаю, что вирусов не писал, но у него истерика, как только проект компилирую в исполнительный файл. ))

Teranas
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 224
Зарегистрирован: 13.12.2008 (Сб) 4:26
Откуда: Новосибирск

Re: Как послать клик в определенную точку окна

Сообщение Teranas » 06.06.2023 (Вт) 11:17

Vova_2581 писал(а):Что верно, то верно! У меня мой локальный антивирус постоянно ругается на мои программы собственной разработки и хотя я то знаю, что вирусов не писал, но у него истерика, как только проект компилирую в исполнительный файл. ))


Вот и не пользуюсь антивирусами, они меня бесят, хуже чем боёвка во Ведьмаке 2 :)
С уважением, Андрей.

Vova_2581
Постоялец
Постоялец
 
Сообщения: 363
Зарегистрирован: 10.01.2010 (Вс) 18:08

Re: Как послать клик в определенную точку окна

Сообщение Vova_2581 » 13.06.2023 (Вт) 10:11

Vova_2581 писал(а):Попробую проверить, как все будет работать на учебной программе, надеюсь получиться.

Все получилось успешно! Клик на нарисованной кнопке учебной программы срабатывает как часы!
Спасибо всем за участие! :D


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

    TopList