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

Поиск:

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


Новичок



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

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



А без вывода окна в активный режим никак нельзя? Просто мне как раз и нужно чтоб окно было свернуто и туда команды посылались. Например я хочу запустиь ругое полноэкранное приложение, а если это развернется, то другое приложение повиснет или в нем произодйут нежелательные изненения) Если делать активным, то это можно написать и на скриптовом каком-нить языке, а мне надо именно в свернутое окошко(
PM MAIL   Вверх
I_Am_Rock
Дата 13.2.2008, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так оно, по-моему, и будет оставаться свернутым... Оно просто будет как диспетчер задач - тот поверх всех окон, но ведь может быть и свернутым...
PM MAIL WWW   Вверх
LawYard
Дата 13.2.2008, 00:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ок, завтра попробую, сейчас уже не успею. Спасибо, отпишусь как только попробую.
PM MAIL   Вверх
LawYard
Дата 13.2.2008, 09:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не вышло. Две проблемы:

1. Он все равно не посылает в свернутое окно;
2.  Он не посылает комбинацию нужную. Букву R отдельно он посылает, и то только в развернутое активное окно. 
PM MAIL   Вверх
I_Am_Rock
Дата 13.2.2008, 13:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Понятно.
Есть еще один способ послать клавишу - через SendMessage. Правда, когда я раньше пробовал его использовать - он почему-то не работал...
Попробую чуть попозже...
PM MAIL WWW   Вверх
I_Am_Rock
Дата 13.2.2008, 16:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот - как и обещал.
Символ посылается и в свернутое окно и в раскрытое. При использовании только этого способа, SetForegroundWindow скорее всего уже не нужен, но я бы все-таки советовал его оставить.
Одно не понятно - как делать сочетания клавиш. Вероятно, стоит попробовать совместить и SendMessage и предыдущий способ - т.е. "зажать" Alt с помощью keybd_event, затем нажать этим способом R, затем "отжать" Alt... Но я не пробовал - лишь предпологаю...

Код

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 VK_R = &H52
Private Const WM_CHAR = &H102

'g находим как раньше
SendMessage g ,WM_CHAR, &H52, 0

PM MAIL WWW   Вверх
LawYard
Дата 13.2.2008, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



При нажатии на кнопку у меня идет код:

Код

  g = FindWindow(vbNullString, "ro")
        SetForegroundWindow(g)
        keybd_event(VK_MENU, 0, 0, 0)
        SendMessage(g, WM_CHAR, &H52, 0)
        keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0)


Пробовал и просто

Код

  g = FindWindow(vbNullString, "WINDOW")
        SetForegroundWindow(g)
        SendMessage(g, WM_CHAR, &H52, 0)


Не шлет ничего. Попробуй потестить на том же блокноте. Или я что-то не так сделал?
PM MAIL   Вверх
I_Am_Rock
Дата 13.2.2008, 21:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот именно на блокноте я и проверял.
Тут есть одна тонкость - сейчас напишу код и выложу... И объясню...)
PM MAIL WWW   Вверх
I_Am_Rock
Дата 13.2.2008, 21:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Буквы-то, в данном случае, надо посылать не окну, а объекту находящемся на нем...
Просто этот объект "растянут" на все окно Блокнота.
Чтобы понять принцип, зайди в VB и, выбрав TextBox, "нарисуй" его от верхнего левого края формы до правого нижнего. ТекстБокс занял всю форму, но согласись - печатая в ТекстБоксе, ты печаешь именно в ТекстБоксе, а не в форме... Надеюсь не слишком запутанно объяснил...)

Вот код для Блокнота...

Код

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 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 hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Const VK_R = &H52
Private Const WM_CHAR = &H102
Dim g, k As Long

Private Sub Command1_Click()
'Находим родительское окно по заголовку
g = FindWindow(vbNullString, "Безымянный - Блокнот")
'Находим дочерний объект по классу
k = FindWindowEx(g, 0, "Edit", vbNullString)
'Нажимаем клавишу
SendMessage k, WM_CHAR, VK_R, 0
End Sub


Чтобы находить дочерние (ну, и родительские) объекты на диске с VB (по крайней мере, у меня) есть прога spy++ Но я ей не пользуюсь - мне больше нравится сканер окон в проге InqSoft Sign 0f Misery. Ты легко найдешь ее в инете...

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


Новичок



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

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



У меня есть InqSoft Window Scanner но он не находит никаких объектов в данном приложении. Не идентифицирует ни кнопки ни поле текстовое.  То есть его индинтификатор я не знаю(
PM MAIL   Вверх
I_Am_Rock
Дата 13.2.2008, 22:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В каком? - В Блокноте?..

Если ты имеешь ввиду другое приложение, то, если у него небольшой объем, - выложи, я сам посмотрю...

Или поищи spy++ на диске с VB. (Просто сделай "Поиск" файла с названием "spy++" на диске)

Но ведь тот код, который я разместил, у тебя работает? Да?
PM MAIL WWW   Вверх
LawYard
Дата 14.2.2008, 00:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нет, код, что ты дал не работаету меня при открытом\свернутом блокноте(((

И еще он ругается на строчку:

Код

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


Ему не нравится "as Any" в конце. 

ЗЫ: да приложение большое довольно-таки(
PM MAIL   Вверх
cardinal
Дата 14.2.2008, 01:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Инженер
****


Профиль
Группа: Экс. модератор
Сообщений: 6003
Регистрация: 26.3.2002
Где: Германия

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



Цитата(LawYard @  13.2.2008,  23:05 Найти цитируемый пост)
Ему не нравится "as Any" в конце. 

Поменяй на
Код

As Long

чисто первое что в голову пришло... smile 


--------------------
Немецкая оппозиция потребовала упростить натурализацию иммигрантов
В моем блоге: Разные истории из жизни в Германии

"Познание бесконечности требует бесконечного времени, а потому работай не работай - все едино".  А. и Б. Стругацкие
PM   Вверх
LawYard
Дата 14.2.2008, 08:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Дык пробовал - не работает все равно программка. Даже на блокнот не пашет. Не знаю в чем и дело(
PM MAIL   Вверх
I_Am_Rock
Дата 14.2.2008, 16:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Посмотри вот это архив и скажи - работает или нет...

Присоединённый файл ( Кол-во скачиваний: 11 )
Присоединённый файл  rtyytr.rar 1,45 Kb
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

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

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

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

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


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

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


 




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


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

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