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

Поиск:

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


Шустрый
*


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

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



Здравствуйте мне необходимо отослать нажатие клавиши Q в окно с заголовком  Game
окно Game же может быть в как в свёрнутом так и развёрнутом режиме.
Наткнулся на тему в этом форуме но вней в основном написано о отправки сообшений , мне нужно нажать кнопку в другом окне 
помогите пожалуйста с кодом.
PM MAIL   Вверх
I_Am_Rock
Дата 3.2.2008, 20:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сейчас сделаю. Через минут 5-10 ждите...smile
PM MAIL WWW   Вверх
I_Am_Rock
Дата 3.2.2008, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сделал!..

Если что-то непонятно или не сработает (хотя должно - я проверял), то спрашивайте!

Если это Вам поможет, то, пожалуйста,(!) - попросите (прямо здесь, в теме) модератора повысить мне репутацию...

Код

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Const VK_Q = &H51
Const KEYEVENTF_KEYUP = &H2
Dim g As Long

Private Sub Command1_Click()
g = FindWindow(vbNullString, "Game")
SetWindowPos g, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
keybd_event VK_Q, 0, 0, 0
keybd_event VK_Q, 0, KEYEVENTF_KEYUP, 0
SetWindowPos g, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
End Sub

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


Шустрый
*


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

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



Респект спасиба тебе дружбан! 
Модер плюсани ему репутацию это Супер чел!

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

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


Инженер
****


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

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





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

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


Шустрый
*


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

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



И тебе плюсик

Добавлено @ 23:27
Я немнога апгрейднул код чтобы кагда етого окна небыло функция неработала:

Код

Private Sub Command1_Click()
g = FindWindow(vbNullString, "Game")
If g = 0 Then GoTo 1
SetWindowPos g, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
keybd_event VK_Q, 0, 0, 0
keybd_event VK_Q, 0, KEYEVENTF_KEYUP, 0
SetWindowPos g, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
1
EndSub


Но меня интересует один вопросик как добиться того чтобы при свернутом окне на рабочем столе невыполнялась эта функция а то когда окно сворвчивается кнопка жмется в окно Game нормально но вот если на рабочем столе буднт расплоложен ярлык или папка начинающаяся на символ Q например qoute или qip то тогда папка или ярлык выделяются что мешает работе при свёрнутом окне.

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


Опытный
**


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

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



Сейчас посмотрю, что можно сделать...
PM MAIL WWW   Вверх
I_Am_Rock
Дата 3.2.2008, 23:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот код...
У меня ярлыки при этом почему-то не загружаются, так что проверить на практике не смог - решена ли проблема или нет...

Но, в принципе, должно работать - ведь курсор перестает отображатся в момент "нажатия"...

Код

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Const VK_Q = &H51
Const KEYEVENTF_KEYUP = &H2
Dim g As Long
Private Declare Function ShowCursor Lib "user32" (ByVal bShow As Long) As Long

Private Sub Command1_Click()
g = FindWindow(vbNullString, "Game")
If g = 0 Then GoTo 1
ShowCursor 0
SetWindowPos g, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
keybd_event VK_Q, 0, 0, 0
keybd_event VK_Q, 0, KEYEVENTF_KEYUP, 0
SetWindowPos g, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
ShowCursor 1
1
End Sub

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


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


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

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



Код

If g = 0 Then GoTo 1

 smile а почему не
Код

If g <> 0 Then

и в условном блоке - выполняемый код?

PS. Использование GoTo вообще считается "грязным" стилем. Ну кроме On Error Goto ессно.


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

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


Опытный
**


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

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



У меня ярлыки и не выделяются даже...

Скажи, помог мой совет с "отключением" курсора?..

Если нет, то я еще кое-что попробую сделать...
PM MAIL WWW   Вверх
I_Am_Rock
Дата 4.2.2008, 01:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот ЭТОТ код, мне кажется, должен решить проблему...smile

Код

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2
Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
Const VK_Q = &H51
Const KEYEVENTF_KEYUP = &H2
Dim g, k As Long
Private Declare Function EnableWindow Lib "user32" (ByVal hwnd As Long, ByVal fEnable As Long) As Long

Private Sub Command1_Click()
g = FindWindow(vbNullString, "Game")
If g = 0 Then GoTo 1
k = FindWindow("Progman", vbNullString)
EnableWindow k, 0
SetWindowPos g, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
keybd_event VK_Q, 0, 0, 0
keybd_event VK_Q, 0, KEYEVENTF_KEYUP, 0
SetWindowPos g, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
EnableWindow k, 1
1
End Sub

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


Шустрый
*


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

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



Тоже самое =(
PM MAIL   Вверх
I_Am_Rock
Дата 4.2.2008, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Странно... Как может ярлык выделяться, если рабочий стол фактически Enable=False во время нажатия...

Буду еще думать...
PM MAIL WWW   Вверх
qweqwe
Дата 4.2.2008, 17:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Курсор неимеет к этому отношения ярлык или папка с именем начинающимся на Q выделяется как будто один раз щелкнуть на ярлык или папку а со второго срабатывания скрипта запускается.
PM MAIL   Вверх
I_Am_Rock
Дата 4.2.2008, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Это, да - ошибку свою я понял...

Но ведь в последнем коде был уже не курсор - я отключал сам рабочий стол...

Я понял в чем проблема - прога посылает q рабочему столу. Но не могу ничего с этим поделать!
Уж чего только не пробовал!..

Есть еще один способ - но он уж слишком кардинальный... сделать так, чтобы на время "нажатия" ярлыки, начинающиеся на q переименовывались (например, Question -> WQuestion) - а потом обратно... Но не знаю - смогу ли я...smile
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

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

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

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

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


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

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


 




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


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

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