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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Нажатие клавиши в определённое окно 
:(
    Опции темы
LawYard
Дата 15.2.2008, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я кажется придумал ешение, но мне надо коды всех клавиш в Бейсике, типа:

Код

Private Const VK_R As Integer = &H52


Или я произвольно выбираю то что стоит после равно??

Просто я могу сделать простое переобозначение rлавиш типа R = alt+R и тогда через сендмесседж можно будет просто посылать клавишу R. Но побелм а втом, что оно почему-то посылает символ R, а не клавишу. Тоесть я сделал через простую скриптовую программу переобозначение клавиш  и оно успешно работает если просто вручную нажимать R, но бейсиковская программа почему-то посылает именно символ а не клавишу О_О

Это сообщение отредактировал(а) LawYard - 15.2.2008, 19:30
PM MAIL   Вверх
I_Am_Rock
Дата 15.2.2008, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот файл с виртуальными кодами.

То, что СендМесседж посылает именно символ в принципе неудивительно, ведь посылается wm_char (char - символ)

А ты попробуй послать клавишу  через ивент... Может тогда будет посылаться именно клавиша...

Это сообщение отредактировал(а) I_Am_Rock - 15.2.2008, 21:32

Присоединённый файл ( Кол-во скачиваний: 9 )
Присоединённый файл  _______________________.rar 1,72 Kb
PM MAIL WWW   Вверх
LawYard
Дата 15.2.2008, 21:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А можно через сендмеседж послать именно клавишу а не символ?
ЗЫ: за таблицу спасибо)
PM MAIL   Вверх
LawYard
Дата 15.2.2008, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хммм... а есть же еще помимо wm_char такие вещи как  WM_KEYDOWN. Только я его вируальный код не могу найти.

ЗЫ: эх, нашел и добавил в програмку:
Код

Private Const WM_KEYDOWN As Integer = &H100

SendMessage(g, WM_KEYDOWN, VK_H, 0)


Я на H забиндил комбинацию клавиш в сторонней прогармме. Только он с WM_KEYDOWN не отсылает вообще ничего(((


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


Опытный
**


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

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



Честно, не знаю...(

Можешь попробовать еще вот это.
Вместо СендМесседж используй...

Код

Private Declare Function SendNotifyMessage Lib "user32" Alias "SendNotifyMessageA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Const WM_IME_CHAR = &H286

SendNotifyMessage g, WM_IME_CHAR, &H52, 0



По крайней мере, у меня буковку R в Блокнот посылает...) Может она это делает как с клавишей, а не как с символом...

Добавлено через 2 минуты и 38 секунд
Цитата(LawYard @ 15.2.2008,  23:07)
Хммм... а есть же еще помимо wm_char такие вещи как  WM_KEYDOWN. Только я его вируальный код не могу найти.

Да я обратил внимание на wm_keydown но я не знаю как с ней работать...( Я покапаю инфу в сети насчет нее
PM MAIL WWW   Вверх
LawYard
Дата 15.2.2008, 23:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



через 

Код

SendNotifyMessage g, WM_IME_CHAR, &H52, 0


не хочет посылать в приложение ничего(

Хотя он и в блокнот не хочет послытьа О_О есть версия что что-то не правильно я сделал. 

Вот то что у меня вышло в итоге:



Это сообщение отредактировал(а) LawYard - 15.2.2008, 23:19

Присоединённый файл ( Кол-во скачиваний: 8 )
Присоединённый файл  nemoe.rar 29,83 Kb
PM MAIL   Вверх
I_Am_Rock
Дата 15.2.2008, 23:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В файле то, что я сам тебе посылал (через СендМесседж)
PM MAIL WWW   Вверх
LawYard
Дата 15.2.2008, 23:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Кажись вышло!! Щас отпишу!
PM MAIL   Вверх
I_Am_Rock
Дата 15.2.2008, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Может, ты забываешь объявлять константы?

Ведь, допустим, WM_IME_CHAR - условное выражение. Оно лишь заменяет собой значение. И его надо обяз. объявлять - 

Код

Private Const WM_IME_CHAR = &H286


и так со ВСЕМИ константами....
PM MAIL WWW   Вверх
LawYard
Дата 15.2.2008, 23:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Вот он и код программки, хехехе:

Код

keybd_event(VK_MENU, 0, 0, 0)
SendMessage(g, WM_SYSKEYDOWN, VK_R, 0)
keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0)


То есть я зажимаю альт просто в Wndows и во всехприложения, а R уже посылаю направленно в нужное ОКНО!! Как все по детски просто, хех!

Теперь осталось сделать цикл с анализом цвета в точке и нажатием мышкой по заданным Точкам. Хм.. а с мышкой могут возникнуть такие же проблемы? Клики по заданным координатам в свернутом окне??
PM MAIL   Вверх
I_Am_Rock
Дата 15.2.2008, 23:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я искренне рад! smile

С мышью... Ну, может быть. В любом случае, ты всегда можешь рассчитывать на мою помощь.

Вот, может пригодится:

Код

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


Хотя кажется, можно и по-другому...

Добавлено через 1 минуту и 4 секунды
Пойду дрыхнуть )

Если что - спрашивай здесь, завтра почитаю...

Добавлено через 2 минуты и 54 секунды
С анализом цвета  в точке (если возникнут трудности) я скорее всего смогу тебе помочь - там полегче.
PM MAIL WWW   Вверх
LawYard
Дата 15.2.2008, 23:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нет, через ивент не пойдет, надо все же опять посылатьч ерез Сенд или что-то в этом роде!

ЗЫ: Модераторы, можете поднять уважаемому I_Am_Rock  репутацию?? Он мне очень помог, посмотрите сколько мы страниц нафлудили! Это даже можна в фак, если надо оформлю)
ЗЫЫ: да насчет помощи - я читал твой топик про клики в неактивное окно, но ты атм не дал часть кода который в итоге получил. Так что я не очень понял как это дело реализовать((( 

Это сообщение отредактировал(а) LawYard - 16.2.2008, 00:00
PM MAIL   Вверх
LawYard
Дата 16.2.2008, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нашел в зарубеже код для клика мышью в окно, но что-то он не пашет:

Код

Private Const WM_LBUTTONDOWN As Long = &H201
Private Const WM_LBUTTONUP As Long = &H202
Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
 
Private Function MakeDWord(LoWord As Integer, HiWord As Integer) As Long
    MakeDWord = (HiWord * &H10000) Or (LoWord And &HFFFF&)
End Function
 
Private Sub Command1_Click()
    PostMessage Me.hwnd, WM_LBUTTONDOWN, 0&, ByVal MakeDWord(440, 407)
    PostMessage Me.hwnd, WM_LBUTTONUP, 0&, ByVal MakeDWord(440, 407)
End Sub
 
Private Sub Form_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
    Debug.Print ScaleX(X, vbTwips, vbPixels) & "," & ScaleY(Y, vbTwips, vbPixels)
End Sub 


Я его записал как:

Код

 Private Declare Function PostMessage Lib "user32.dll" Alias "PostMessageA" (ByVal hwnd As Long, ByVal    wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
 Private Function MakeDWord(ByVal LoWord As Integer, ByVal HiWord As Integer) As Long
  MakeDWord = (HiWord * &H10000) Or (LoWord And &HFFFF&)
 End Function

Private Const WM_LBUTTONDOWN As Integer = &H201
Private Const WM_LBUTTONUP As Integer = &H202

 PostMessage(g, WM_LBUTTONDOWN, 0&, MakeDWord(400, 271))
 PostMessage(g, WM_LBUTTONUP, 0&, MakeDWord(400, 271))


Мой вариант не работает, а их вариент, в котором
PostMessage Me.hwnd, WM_LBUTTONDOWN, 0&, ByVal MakeDWord(440, 407)
он ругается на то что я выделил красным. 

Это сообщение отредактировал(а) LawYard - 16.2.2008, 13:27
PM MAIL   Вверх
I_Am_Rock
Дата 16.2.2008, 14:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот пример, как нажать мышаком по кнопке (можно по любому объекту; и неважно - родительскому или дочернему).
На всякий случай прикрепил проект.

Код

Private Declare Function SendNotifyMessage Lib "user32" Alias "SendNotifyMessageA" (ByVal hwnd As Long, ByVal msg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As Long, ByVal hWndChildAfter As Long, ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const WM_LBUTTONDOWN = &H201
Private Const WM_LBUTTONUP = &H202
Dim g, k

Private Sub Command1_Click()
'находим системную панель
g = FindWindow("Shell_traywnd", vbNullString)
'находим кнопку Пуск
k = FindWindowEx(g, 0, "Button", vbNullString)
'нажимаем ее
SendNotifyMessage k, WM_LBUTTONDOWN, 0, 0
'по сути - отжимаем ее. Но я заметил, что это не всегда требуется...
SendNotifyMessage k, WM_LBUTTONUP, 0, 0
End Sub


Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  NazhimaemMouse.rar 1,33 Kb
PM MAIL WWW   Вверх
LawYard
Дата 16.2.2008, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нет нет, мне опять же нужно по координатам. Забыл, что там нет никаких кнопок?) Надо клик именно по координатам в заданном окне) С координатами не знаешь как сделать? А то из того что я выложил что-то ничего не работает, а люди там откоментили что все норм.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

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

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

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

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


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

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


 




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


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

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