Модераторы: 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   Вверх
qweqwe
Дата 4.2.2008, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



осьаточно хобы сделать так чтобы перед началом точка добавлялась =)

Сможешь -)
PM MAIL   Вверх
I_Am_Rock
Дата 4.2.2008, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Разницы нет - точка или символ... Главное до ярлыков добраться! smile Этого я никогда не пробовал... Вот этим вечером (может ближе к ночи) и попробую...

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


Опытный
**


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

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



Решение найдено!
Слава Богу, обошлось без переименовывания ярлыков (возможно, это и не помогло бы)...
Главное, об этом (SetForegroundWindow) уже писали на 1 странице темы...

Напиши, как проверишь. Мне, интересно - у тебя будет работать или нет. По идее, должно... У меня ведь работает - больше ярлыки не выделяются...

Код

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 SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long

Private Sub Command1_Click()
g = FindWindow(vbNullString, "Game")
If g = 0 Then GoTo 1
SetForegroundWindow g
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
End Sub

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


Инженер
****


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

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



I_Am_Rock, qweqwe, написали бы темку для FAQ'а чтоли, раз столько работы проделано...  smile 


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

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


Шустрый
*


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

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



Да с ярлыками всё нормал но я заметил что если открыть пуск в то он сворачивается , ф также нажатие неотрпавляется в свёрнутое окно.
Ты молодца smile  но кодик надо ещё доработать.
PM MAIL   Вверх
I_Am_Rock
Дата 5.2.2008, 21:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



С пуском понял, а вот со свернутым окном не очень - у меня посылается даже если оба окна (и с этим кодом и окно-цель) свернуты...

Но я, конечно, буду еще думать...

Кстити, в моем-то коде символ посылается через нажатие Command1... Чтобы проверить со свернутыми окнами я вставляю этот код в Timer1... А ты как делаешь?..

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


Опытный
**


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

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



Что-то не пойму!..:(

У меня не возникает проблем ни с пуском, ни со свернутыми окнами...
Символ посылается всегда...
PM MAIL WWW   Вверх
qweqwe
Дата 6.2.2008, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Ну незнаю быть может у меня китайская англофицированая винда....
PM MAIL   Вверх
qweqwe
Дата 6.2.2008, 17:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Я пишу программу для онлайн игры где спомощью неё можно автоматизировать AFK.
PM MAIL   Вверх
I_Am_Rock
Дата 6.2.2008, 22:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Понятно. Ну, других способов, кроме выбранного тобой, предложить не могу...:(
PM MAIL WWW   Вверх
LawYard
Дата 12.2.2008, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ребят, может есть где-то тема, но я не нашел. Интересует следующая вещь:

Нажатие сочетания клавиш (напр. alt+R) в окне с названием например WINDOW и клики по заданным точкам этого приложения при нажатии кнопки.  С одной кнопко вроде что-то понятно и с кликом мыши просто по экрану, но надо чтобы кликало и нажималось по свернотому приложению с определенным заголовком.  Сможете помочь?
PM MAIL   Вверх
I_Am_Rock
Дата 12.2.2008, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


Опытный
**


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

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



Alt+R...

Код

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Const VK_R = &H52
Const VK_MENU = &H12
Const KEYEVENTF_KEYUP = &H2

keybd_event VK_MENU, 0, 0, 0
keybd_event VK_R, 0, 0, 0
keybd_event VK_R, 0, KEYEVENTF_KEYUP, 0
keybd_event VK_MENU, 0, KEYEVENTF_KEYUP, 0



...чтобы это делалось в окне WINDOW

Код

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Dim g

g = FindWindow(vbNullString, "WINDOW")
SetForegroundWindow g



С нажатием мыши должно помочь это...

Код

Private Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)
Const MOUSEEVENTF_LEFTDOWN = &H2
Const MOUSEEVENTF_LEFTUP = &H4
Const MOUSEEVENTF_MIDDLEDOWN = &H20
Const MOUSEEVENTF_MIDDLEUP = &H40
Const MOUSEEVENTF_MOVE = &H1
Const MOUSEEVENTF_ABSOLUTE = &H8000
Const MOUSEEVENTF_RIGHTDOWN = &H8
Const MOUSEEVENTF_RIGHTUP = &H10

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


Новичок



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

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



Что-то с комбинацией клавиш не оч выходит. Забил вот это:

Код

Public Class Form1
    Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
    Dim g
    Const VK_R = &H52
    Const VK_MENU = &H12
    Const KEYEVENTF_KEYUP = &H2


    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        g = FindWindow(vbNullString, "WINDOW")
        SetForegroundWindow(g)
        keybd_event(VK_MENU, 0, 0, 0)
        keybd_event(VK_R, 0, 0, 0)
        keybd_event(VK_R, 0, KEYEVENTF_KEYUP, 0)
        keybd_event(VK_MENU, 0, KEYEVENTF_KEYUP, 0)
    End Sub
End Class


тобишь при нажатии на кнопку жолжно посылать в окно WINDOW комбинацию клавиш. Однако ничего не происходит. Вообще. Если убать Альт, а посылать просто R, то оно посылается только, если окно WINDOW развернуто на экране, если же оно свернуто, то ничего не посылается ((

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


Опытный
**


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

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




Попробуйте временно вывести окно на передний план (см. самый верхний код на этой странице)...

Код

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
Private Const HWND_TOPMOST = -1
Private Const HWND_NOTOPMOST = -2
Private Const SWP_NOSIZE = &H1
Private Const SWP_NOMOVE = &H2

'Здесь идет SetForegroundWindow g
SetWindowPos g, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
'Здесь "нажатие" клавиш
SetWindowPos g, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE

PM MAIL WWW   Вверх
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   Вверх
LawYard
Дата 14.2.2008, 17:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да, если изменить на Long, вместо Any? то посылает клавишу даже в свернутое! Но пробелм а в том, что без "Edit1" н епосылает. То есть ему надо обязательно указать конкретное место куда отправить, а я не могу узнать как идентифицируется в моей программе место ввода текста =\ Ни одной из программ котоыре я пробовал оно не обнаруживается. 
PM MAIL   Вверх
I_Am_Rock
Дата 14.2.2008, 19:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Очень хочу помочь, но не знаю - как...(

Т.е. прогу эту сюда никак нельзя прикрепить (как я прикрепил архив)?..
PM MAIL WWW   Вверх
LawYard
Дата 14.2.2008, 19:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Да оно весит слишком много ( >1 Гб). А есть какие-нить еще программы для этого дела или способы как-то узнать ID чат-бокса в этом приложении?
PM MAIL   Вверх
I_Am_Rock
Дата 14.2.2008, 19:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот прога.
Находишь окно с помощью кнопки "Найти мышью". Можно родительское, можно попробовать сразу дочернее.
Чтобы узнать - тот ли объект, нажимай Скрыть и Показать. Если он прячется и появляется, это он.
У дочерних могут быть свои дочерние. В общем, между род. и дочерними переходи с помощью "Опред. дочерний" и "опред. родительский". Там еще есть копки "->" и "<-" для перехода по объектам своего уровня.
Если что не разберешься - спрашивай.
Написана мной. Прошу над ней не смеяться...smile

Присоединённый файл ( Кол-во скачиваний: 18 )
Присоединённый файл  UpravlenieObjectami.rar 17,47 Kb
PM MAIL WWW   Вверх
LawYard
Дата 14.2.2008, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Программа нашла окошко моего приложения, но дочерних окон у нео нет, а поиск по объектам одного уровня выдал мне все мои запущенные приложения другие + какие-то безкоординатные другие без названий кучу, которые никак вроде бы не реагировали на скрыть\показать ((((
ЗЫ: программа клевая ;)
ЗЫЫ: для примера - программка http://val-uopilot.narod.ru/uopilot.rar позволяет нажимать кнопки в неактивном окне. Но она не посылает нормально комбинации, точнее она их вообще что-то не посылает, хотя в поисании написано что она это должна делать нормально через команду 

sendex @{R}

Может знаешь на каком принципе эта весчь работает?

Update: кажись у меня что-то вышло! Я просто удалил строчку из твоего кода и сделал код как почти в первой версии что ты мне предложил! Он стал посылать даже в свернутое, хотя раньше этого не делал. Сейчас пойду потестю с комбинацией и отпишу тебе!  smile 
Update2: не очень вышло с комбинацией Alt+R. Надо чтобы это посылалось через SendMessage что-то итпа "нажать альт потом R потом отпустить альт". Через ивенты это ясно, а через сендмеседж? Что-то не оч выходит. 

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


Опытный
**


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

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



Странно, что дочерние окна не найдены. Может, защита какая-то стоит...
У меня лишь однажды была такая ситуация - не мог найти дочерние окна. Эта прога Gimp - прога под Линукс - версия для Windows. Поэтому и не шла...
Еще моя прога не находит "Найти мышью" неактивные (заблокированные) элементы, но находит их просмотром одноуровневых...

А какую строчку из кода ты удалил?

Буду думать, как сделать комбинацию через СендМесседж...

З.Ы. Не спеши удалять прогу, может еще пригодится. Например, в правом нижнем углу можно посылать сообщение и если тебе нужно будет знать как реагирует объект на "посылку" клавиши, не надо будет писать код в VB...

uopilot сейчас посмотрю...
PM MAIL WWW   Вверх
I_Am_Rock
Дата 14.2.2008, 21:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В uopilot есть функция sendex <список клавиш> но я не знаю как вводить эти клавиши - пробовал, не получалось.
В справке написано, что альт надо вводить как "@", а как R - не понятно...
PM MAIL WWW   Вверх
LawYard
Дата 14.2.2008, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я просто тупо убрал строчку

Код

k = FindWindowEx(g, 0, "", vbNullString)


И все. Хотя раньше в таком же варинте, но написанная мной программа не работала, а та что ты мне прислал пашет норм. Не пойму почему. 

ЗЫ: R там вводить тупо как {R} или просто R:

Код

Sendex @{R}


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


Опытный
**


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

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



В справке написано, что в фигурн. скобках...

Ты вот убрал строку, а не пробовал после этого добавить комбинацию через ивенты? Может, пойдет...
PM MAIL WWW   Вверх
LawYard
Дата 14.2.2008, 22:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не хочет, только через SendMessage.
PM MAIL   Вверх
I_Am_Rock
Дата 14.2.2008, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Я тут подумал...
Вот открой блокнот.
Проследи, чтобы была вкл. русская раскладка клавы.
Нажми по очереди "Альт", "ф", "о"
Принцип понятен?

Получается, что если через SendMessage их по очереди послать, то произойдет тоже самое...
Проблема в том, что я не знаю коды вирт. клавиш для рус. клавы.
НО если та прога, в которую ты хочешь послать сочетание клавиш, англоязычна, то проблем быть не должно...
PM MAIL WWW   Вверх
LawYard
Дата 14.2.2008, 23:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Та нет, пробовал. Нужно именно сымитировать нажатние Альт, потом R, потом отпускание Альт.
PM MAIL   Вверх
I_Am_Rock
Дата 15.2.2008, 00:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хмм... Может, я неправильно объяснил...smile

Ведь эта Alt+R прикреплена к какому-то пункту меню! И до него можно добраться нажатиями на "подчеркнутые" клавиши...

Ты все-таки попробуй сделать с блокнотом, как я говорил в предыдущем посте...

З.Ы. Ответ прочту завтра. Удачи! smile
PM MAIL WWW   Вверх
LawYard
Дата 15.2.2008, 00:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Дык пробовал, с блокнотом работает, но мне нужно именно комбинацией воспользоваться. Чтобы одновременно две кнопки нажались, тк там Альт не вызывает меню.
PM MAIL   Вверх
I_Am_Rock
Дата 15.2.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Жаль... Не знаю - что же еще можно придумать.:(
PM MAIL WWW   Вверх
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   Вверх
I_Am_Rock
Дата 16.2.2008, 14:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



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


Новичок



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

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



В моем приложении не работал. Хм.. сейчас порпобую с твоим.. мне все же кажется что-то с моим бейсиком не то)
PM MAIL   Вверх
I_Am_Rock
Дата 16.2.2008, 15:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А как он не работал - выдавал ошибку что ли?

Добавлено через 2 минуты и 24 секунды
В коде, который ты нашел...
При нажатии на кнопку "эмулируется" нажатие на форму. В окне Immediate пишется "50, 50" - координаты произошедшего якобы нажатия. Ты можешь и по-настоящему нажимать на кнопки - так же будут записываться координаты...
PM MAIL WWW   Вверх
LawYard
Дата 16.2.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Нет, ничегопросто не происходит(

Вот смотри, листинг программки:
Код

Option Strict Off
Option Explicit On
Friend Class Form1
    Inherits System.Windows.Forms.Form
    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 Declare Function SendNotifyMessage Lib "user32" Alias "SendNotifyMessageA" (ByVal hwnd As Integer, ByVal msg As Integer, ByVal wParam As Integer, ByVal lParam As Integer) As Integer
    Private Declare Function FindWindow Lib "user32"  Alias "FindWindowA"(ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
    Private Declare Function FindWindowEx Lib "user32"  Alias "FindWindowExA"(ByVal hWndParent As Integer, ByVal hWndChildAfter As Integer, ByVal lpClassName As String, ByVal lpWindowName As String) As Integer
    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
    Dim g, k As Object
    
    Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
        'находим системную панель
        'UPGRADE_WARNING: Couldn't resolve default property of object g. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"'
        g = FindWindow("Shell_traywnd", vbNullString)
        'находим кнопку Пуск
        'UPGRADE_WARNING: Couldn't resolve default property of object g. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"'
        'UPGRADE_WARNING: Couldn't resolve default property of object k. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"'
        'k = FindWindowEx(g, 0, "Button", vbNullString)
        'нажимаем ее
        'UPGRADE_WARNING: Couldn't resolve default property of object k. Click for more: 'ms-help://MS.VSCC.v90/dv_commoner/local/redirect.htm?keyword="6A50421D-15FE-4896-8A1B-2EC21E9037B2"'
        SendNotifyMessage(g, WM_LBUTTONDOWN, 0&, MakeDWord(31, 17))
        SendNotifyMessage(g, WM_LBUTTONUP, 0&, MakeDWord(31, 17))
    End Sub
End Class


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


Опытный
**


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

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



Вот в том-то и суть, что ты кликаешь по НЕМ, т.е. по системной панели... И нажатие это делается как бы сквозь другой объект...
Попробуй делать нажатие для "k" - самой кнопки, выбрав в качестве координат, допустим, 15,15...
PM MAIL WWW   Вверх
LawYard
Дата 16.2.2008, 15:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А как сделать чтобы клик шел просто в выбранном окне? Просто задал окно и пусть в нем кликается по координатам? Кинь плиз код, у меня не выходит... пробовал и так и сяк.
PM MAIL   Вверх
I_Am_Rock
Дата 16.2.2008, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хорошо, сейчас буду писать код...

Хочу лишь заметить, что раз в том окне, в которое ты хочешь их посылать нет дочерних окон (ведь так?), то их следовательно и не надо искать - "кликать" надо по нему самому...
PM MAIL WWW   Вверх
LawYard
Дата 16.2.2008, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ну я так и делал. Вот упрощенный код:

Код

 g = FindWindow("ОКНО", vbNullString)

SendNotifyMessage(g, WM_LBUTTONDOWN, 0&, MakeDWord(31, 17))
SendNotifyMessage(g, WM_LBUTTONUP, 0&, MakeDWord(31, 17))


И оно не кликает таким образом. Я тестил на Пеинте тоже - не хочет кликать по точкам в окне пеинта.
PM MAIL   Вверх
I_Am_Rock
Дата 16.2.2008, 16:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Так в Пеинте надо кликать как раз по дочернему...

См. прикрепленный файл...

Там помимо проектного файла есть exe-шник, куда удобно слать нажатия.
Запусти его и понажимай на форме. Ты увидишь красные кружки...
Затем запусти проектный файл - введи заголовок моего окна ("Форма для нажатий"), и укажи координаты - X и Y (например, 40 и 40)...

Экзешник я делал наспех и кружки стираются если окно свернуть (и при разворачивании).
Говорю это на случай, если ты подумаешь, что посылать мышиные нажатия в свернутое окно нельзя.
Хотя так делать (в свернут. окно) не пробовал - может, нельзя, может, можно...

Присоединённый файл ( Кол-во скачиваний: 5 )
Присоединённый файл  MouseKoordinat.rar 3,69 Kb
PM MAIL WWW   Вверх
LawYard
Дата 17.2.2008, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Не было интернета. Сейчас скачаю и потестю)
PM MAIL   Вверх
LawYard
Дата 17.2.2008, 19:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



СТранно. В Форму кликает нормально, если ее сделать неактивной, ну на заднем плане. А в мое приложение не кликает. Или приложение на ТАКОЙ клик не отвечает. Щас порпобую поэкспериментировать ,но есть подозрение, что нужно через следующий алгорит: переместить мышь на заданные координаты - потом клик.
PM MAIL   Вверх
I_Am_Rock
Дата 17.2.2008, 20:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да, действительно странно...(
Попробуй сделать, перемещая мышь.
PM MAIL WWW   Вверх
LawYard
Дата 18.2.2008, 19:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я что-то хм.. не нашел как переместить мышь в конкретно-выбранном приложении)) Попробовал и так и так, что-то не перемещаетсо, а ток ошибки выдает Т_Т
PM MAIL   Вверх
I_Am_Rock
Дата 18.2.2008, 19:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Чуть попозже выложу код...)
PM MAIL WWW   Вверх
I_Am_Rock
Дата 18.2.2008, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Если честно, я не знаю, как перемещать курсор относительно какого-то окна...
Можно, конечно, попробовать перемещать курсор по формуле (ПоложениеКурсораX + ПоложениеОкнаX, ПоложениеКурсораY + ПоложениеОкнаY). В этом случае, по идее, курсор будет ориентироваться не относительно экрана, а относительно окна...
Но я советую просто - перед перемещением курсора переместить окно-цель в левый верхний угол.

З.Ы. В проектном файле - 1) перемещение курсора, 2) перемещение окна в левый верхний уровень.

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


Новичок



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

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



Хм нет, нужно именно в свернутое окно))

Сейчас пробую обуздать WM_SETCURSOR :

Код

Private Const WM_SETCURSOR As Integer = &H20

PostMessage(g, WM_SETCURSOR, 0, MakeDWord(CShort(Text2.Text), CShort(Text3.Text)))


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


Опытный
**


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

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



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


Новичок



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

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



Возникла проблема с  GetCursorPos. Не получается описать функцию О_О

Код

Private Type POINTAPI
        x As Long
        y As Long
End Type

Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long

Private Sub Command1_Click()
Dim p As POINTAPI
GetCursorPos p
MsgBox p.x, , p.y
End Sub


Этот код в свое время кажется тебе дали. Но у меня бейсик ругается на Type. Говорит мол сейчас так не прописываются переменные, нужна другая структура.  
PM MAIL   Вверх
I_Am_Rock
Дата 18.2.2008, 22:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Хорошо. Сейчас посмотрю - в чем проблема...

Послушай!
А почему бы не развернуть окно на время "нажатия".
Ты даже не почувствуешь (визуально), что окно разворачивалось...
Вот примерный код

Код

Private Const SW_SHOWMAXIMIZED = 3
Private Const SW_SHOWMINIMIZED = 2
Private Const HWND_TOPMOST = -1

flags = SWP_NOSIZE Or SWP_DRAWFRAME

ShowWindow g, SW_SHOWMAXIMIZED 'Делаем во весь экран. (Можно просто развернуть, но так, мне кажется, лучше)
SetForegroundWindow(g)
SetWindowPos(g, HWND_TOPMOST, 0, 0, 1, 1, flags) 'Перемещаем в левый верхний угол
'Здесь перемещаем курсор и производим нажатие...
ShowWindow g, SW_SHOWMINIMIZED 'Сворачиваем окно
'Здесь можно "убрать" эффект HWND_TOPMOST, но это уже необязательно...


З.Ы. Я, кстати, не очень уверен, что перемещение курсора поможет с нажатием - ведь, при самом нажатии (через PostMessage) указываются координаты. Зачем же еще... Да и в моем примере (там где "красные кружки") это ведь не требовалось...

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


Новичок



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

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



Просто задумка в том, чтобы сперва изменить положение курсора, затем считать новые координаты и задать их через Постмесседж. Или может знаешькак клик сделать просто как ивент? Ну послать клик в окно без координат, просто по той точке где сейчас курсор? 
ЗЫ: чуток позже проверю твой вариант. Спасибо. 
ЗЫЫ: насчет что не поможет перемещение - на скриптовых языках у меня клик удавался хорошо если предварительно переместить, а не сразу клик по х,у.

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


Опытный
**


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

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



Я сейчас проверил твой код (где GetCursorPos) - у меня все нормально сработало... У меня шестая версия Бейсика... Может у тебе другая и поэтому... Если так, то тебе следует зайти в Глав. меню (через пуск) и в ветке, где устан. Бейсик и найти API Text Viewer... И там посмотреть, как нужно делать именно в твоей версии...
PM MAIL WWW   Вверх
I_Am_Rock
Дата 18.2.2008, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А зачем тебе нужно посылать именно в свернутое окно?

Если лишь для того, чтобы оно не было видно на экране, то можно сделать окно прозрачным...
Не на 100% так как оно в этом случае станет "дырявым" и на нем нельзя будет "кликать",
а на процентов 90-95, чтобы его было почти не видно, но все работало как обычно...

Посмотреть, как работает прозрачность ты сможешь в той моей проге ("Управление объектами")

З.Ы. У меня, кстати, днюха сегодня...)

Добавлено через 3 минуты и 1 секунду
Не 18 - 19... ) У меня др. часовой пояс...
PM MAIL WWW   Вверх
LawYard
Дата 18.2.2008, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ооо, ну тогда поздравляю! Побольше бы таких отзывчивых людей)

ЗЫ: насчет прозрачности  - оно не подходит, приложение тупо виснет))

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


Опытный
**


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

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



Жаль, что не могу больше ничего посоветовать...(
Ну, если будут у тебя какие-то другие вопросы - буду также искать решение проблем...)
PM MAIL WWW   Вверх
LawYard
Дата 19.2.2008, 10:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



У меня стоит 2008ой бейсик, поставил вот щас свой старый 6-ой. Буду тестить с перемещением через POINTAPI.  
  Вопрос: а у окна на заднем фоне тот же статус что и у свернутого?
PM MAIL   Вверх
I_Am_Rock
Дата 19.2.2008, 13:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(LawYard @ 19.2.2008,  10:39)
Вопрос: а у окна на заднем фоне тот же статус что и у свернутого?

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


Новичок



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

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



Ну как бы у свернутого окна свое состояние, описываемое какой-нить переменной,  у окна на заднем плане свое, у активного свое и тп.
PM MAIL   Вверх
I_Am_Rock
Дата 19.2.2008, 16:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тогда да - состояние одно - если я, конечно, правильно понял...
PM MAIL WWW   Вверх
LawYard
Дата 19.2.2008, 16:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Я что-то в тупике... кстати та программка что ты дал с кликами + прогарммка для проверки кликов - она работает походу только на эту програмку для кликов. Я взял стороннюю программу произвольную и там нашел координаты кнопки одной в окне этой программы, задал через твою прогу координаты и название окна, а оно не кликнуло. Ты не проверял ее на других приложениях? Может быть оно не кликает в мое приложение не тк приложение такое, а тк написано что-то не так?
PM MAIL   Вверх
I_Am_Rock
Дата 19.2.2008, 18:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Да нет - и с другими прогами тоже работает.
Например, запусти Сапер, а в моей проге укажи:
заголовок - Сапер
X - 100
Y - 100
Нажатие происходит (открывается "квадратик").
Если в той проге, в которую ты хочешь слать нажатия, нет дочерних объектов (как в Сапере), то нажатия должны по идее работать. Насколько я помню, ты говорил, что в той программе нет доч. объектов...
PM MAIL WWW   Вверх
LawYard
Дата 19.2.2008, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Хм... а попробуй запустиьт например дебаг этой проги, и выбрать там чтоб он кликал в окно бейсика по кнопке стоп например. Он не кликает у меня. По саперу норм кликает. А в окно бейсика и напрмиер пеинта не хочет.
PM MAIL   Вверх
I_Am_Rock
Дата 19.2.2008, 20:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



По кнопке бейсика он и не должен кликать! Для этого нужно сначала найти кнопку (ее хэндл). Сейчас покажу код...
PM MAIL WWW   Вверх
LawYard
Дата 19.2.2008, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Смотри что я нашел:

The WM_MOUSEACTIVATE message is sent when the cursor is in an inactive window and the user presses a mouse button. The parent window receives this message only if the child window passes it to the DefWindowProc function.

WM_MOUSEACTIVATE = &H21
Public Enum 
WM_MOUSEACTIVATE As Integer
MA_ACTIVATE = 1
MA_ACTIVATEANDEAT = 2
MA_NOACTIVATE = 3
MA_NOACTIVATEANDEAT = 4
End Enum

Сейчас буду тестить.

Добавлено через 3 минуты и 54 секунды
Не вышло(

Добавлено через 7 минут и 48 секунд
А вот еще:

The return value specifies whether the window should be activated and whether the identifier of the mouse message should be discarded. It must be one of the following values. 

MA_ACTIVATE                           Activates the window, and does not discard the mouse message. 
MA_ACTIVATEANDEAT               Activates the window, and discards the mouse message. 
MA_NOACTIVATE                       Does not activate the window, and does not discard the mouse message. 
MA_NOACTIVATEANDEAT             Does not activate the window, but discards the mouse message. 

Я так понимаю нам надо
MA_NOACTIVATE    - "Не активизирует окно, и не отказывается от сообщения мыши."

А как задать параметр этот для WM_MOUSEACTIVATE ?

Добавлено через 11 минут и 55 секунд
Да, кстати я не очень понял как мне задать это 

Код

Public Enum 
WM_MOUSEACTIVATE As Integer
MA_ACTIVATE = 1
MA_ACTIVATEANDEAT = 2
MA_NOACTIVATE = 3
MA_NOACTIVATEANDEAT = 4
End Enum


Точнее ГДЕ. И не оченьпонял как дать моему WM_MOUSEACTIVATE параметр MA_NOACTIVATE?
PM MAIL   Вверх
I_Am_Rock
Дата 19.2.2008, 21:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Сейчас посмотрю....

Архив 1 - для кнопки бейсика
Архив 2 - для Пеинта (сначала выбери в Пеинте Карандаш, а лучше Кисть, чтобы заметно было)

Присоединённый файл ( Кол-во скачиваний: 4 )
Присоединённый файл  1_2.rar 2,81 Kb
PM MAIL WWW   Вверх
I_Am_Rock
Дата 19.2.2008, 21:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Наверное вот это...

Код

Public Enum 
WM_MOUSEACTIVATE As Integer
MA_ACTIVATE = 1
MA_ACTIVATEANDEAT = 2
MA_NOACTIVATE = 3
MA_NOACTIVATEANDEAT = 4
End Enum


лучше сделать Private (Как функции) и размещать вверху (ну, где объявл. АПИ-функции)

Код

Private Enum 
WM_MOUSEACTIVATE As Integer
MA_ACTIVATE = 1
MA_ACTIVATEANDEAT = 2
MA_NOACTIVATE = 3
MA_NOACTIVATEANDEAT = 4
End Enum

Это лишь мои предположения...

Добавлено через 1 минуту и 21 секунду
Архив опять зачем-то разместился...(

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

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


Новичок



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

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



Насчет того что ты дал: я проверял именно ТУ прогармму ожидая от нее, что она будет кликать в пределах выбранного оукна по ЛЮБОЙ его части, будь то кнопка или текстовое поле и тп. То есть чтобы оно не зависело от дочерних объектов. Например, чтобы я задал только хендл окна - Пеинт, не задавая где конкретно я хочу клинуть ,только координаты, никаких дочерних объектов и полей. Тогда она не работает.

Добавлено через 1 минуту и 38 секунд
на 

Код

Private Enum 
WM_MOUSEACTIVATE As Integer
MA_ACTIVATE = 1
MA_ACTIVATEANDEAT = 2
MA_NOACTIVATE = 3
MA_NOACTIVATEANDEAT = 4
End Enum


Тоже ругается. Конкретно на  Private Enum . Выделяет это красным цветом.
PM MAIL   Вверх
I_Am_Rock
Дата 19.2.2008, 21:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Тогда можно ораганизовать поиск перед нажатием через WindowFromPoint

Код

Private Declare Function WindowFromPoint Lib "user32" Alias "WindowFromPoint" (ByVal xPoint As Long, ByVal yPoint As Long) As Long


Она определяет хэндл объекта под курсором мышака - вне зависимости дочерн. объект или родительский.
Примечание: координаты X и Y вводятся относительно экрана, а не относительно окна, поэтому перед этим желательно загнать окно в левый верхний угол (как я говорил ранее - с помощью SetWindowPos)
PM MAIL WWW   Вверх
LawYard
Дата 19.2.2008, 21:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Ммм, а что это даст? Я что-то не уловил мысли...

Добавлено через 27 секунд
ЗЫ: здесь больше в бейсике что никто не шарит???  Кто бы еще чтоль помог нам...
PM MAIL   Вверх
I_Am_Rock
Дата 19.2.2008, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



WindowFromPoint - то, что нужно, потому что позволяет сделать так, чтобы "кликать в пределах выбранного оукна по ЛЮБОЙ его части, будь то кнопка или текстовое поле и тп."
PM MAIL WWW   Вверх
LawYard
Дата 19.2.2008, 22:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



А как его юзать? У меня что-то бошка не варит... целый день перебирал различные функции\константы\ивенты.... голова забита.
PM MAIL   Вверх
I_Am_Rock
Дата 19.2.2008, 23:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Вот код - "нажатия" лишь по координатам.

Тестил с кнопками Калькулятора и Пуском - работает. А вот с Пеинтем почему-то не хочет...

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  dddd.rar 1,67 Kb
PM MAIL WWW   Вверх
LawYard
Дата 20.2.2008, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



В моем приложении тож не нажимается. Видать та же фигня что и с пеинтом(( Приду с инста подумаю как еще можно организовать нажатие в окошко. Надо искать обходные пути значит(
PM MAIL   Вверх
XOXOJI
Дата 20.9.2008, 18:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Блин, от незадача, пытаюсь послать в окно F5, но он его не передает, испробовал на блакноте, передает t  smile 
PM MAIL   Вверх
I_Am_Rock
Дата 20.9.2008, 18:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(XOXOJI @  20.9.2008,  18:38 Найти цитируемый пост)
Блин, от незадача, пытаюсь послать в окно F5, но он его не передает, испробовал на блакноте, передает t  

Может, вы перепутали код клавиши? 
PM MAIL WWW   Вверх
XOXOJI
Дата 20.9.2008, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(I_Am_Rock @ 20.9.2008,  18:48)
Цитата(XOXOJI @  20.9.2008,  18:38 Найти цитируемый пост)
Блин, от незадача, пытаюсь послать в окно F5, но он его не передает, испробовал на блакноте, передает t  

Может, вы перепутали код клавиши?

неа, код точный F5- &H74

а посылает t
PM MAIL   Вверх
I_Am_Rock
Дата 20.9.2008, 18:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



А попробуйте послать t - вдруг пошлет Ф5... smile
PM MAIL WWW   Вверх
XOXOJI
Дата 20.9.2008, 18:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



получается что по keyCode он не понимает, а берет из Ascii

если посылаю код t, то пишет большею T

Это сообщение отредактировал(а) XOXOJI - 20.9.2008, 18:59
PM MAIL   Вверх
I_Am_Rock
Дата 20.9.2008, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(XOXOJI @  20.9.2008,  18:57 Найти цитируемый пост)
получается что по keyCode он не понимает, а берет из Ascii

если посылаю код t, то пишет большею T

Странно... А код можете показать? Если прога небольшая, то лучше целиком...
PM MAIL WWW   Вверх
XOXOJI
Дата 20.9.2008, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(I_Am_Rock @ 20.9.2008,  19:12)
Цитата(XOXOJI @  20.9.2008,  18:57 Найти цитируемый пост)
получается что по keyCode он не понимает, а берет из Ascii

если посылаю код t, то пишет большею T

Странно... А код можете показать? Если прога небольшая, то лучше целиком...

покожу на примере с блокнотом, у него по F5 должна дата вставляться

Код

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 = &H74
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


в основе ваш пример, с блокнотом, изменен только код кнопки VK_R

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


Опытный
**


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

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



Через тот код действительно че-то не работает...

Вот другой... Он работает... smile

Код

Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const VK_R = &H74
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 KEYEVENTF_KEYUP = &H2
Dim g As Long

Private Sub Command1_Click()

g = FindWindow(vbNullString, "Безымянный - Блокнот")

SetWindowPos g, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
keybd_event VK_R, 0, 0, 0
keybd_event VK_R, 0, KEYEVENTF_KEYUP, 0
SetWindowPos g, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
End Sub

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


Шустрый
*


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

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



неа, тоже не хочет (((

Добавлено @ 19:54
попробовал через sendkeys срабатывает редко, но иногда все же срабатывает 

Это сообщение отредактировал(а) XOXOJI - 20.9.2008, 19:57
PM MAIL   Вверх
I_Am_Rock
Дата 20.9.2008, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(XOXOJI @  20.9.2008,  19:50 Найти цитируемый пост)
неа, тоже не хочет (((

Не может такого быть... У меня все работает...

Попробуйте - проект в прикрепл. файле...

И еще проверьте, чтобы заголовок запущенного блокнота был изначальный - "Безымянный - Блокнот"

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  aaa.rar 1,35 Kb
PM MAIL WWW   Вверх
XOXOJI
Дата 20.9.2008, 20:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Честно, не работает, должно печататься всеря и дата, а они не выходят (
PM MAIL   Вверх
I_Am_Rock
Дата 20.9.2008, 20:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(XOXOJI @  20.9.2008,  20:14 Найти цитируемый пост)
Честно, не работает, должно печататься всеря и дата, а они не выходят ( 

:( Ну, не знаю тогда, у меня все работает...

Добавлено через 1 минуту и 25 секунд
Посмотрите еще здесь...
http://forum.vingrad.ru/topic-4340.html
PM MAIL WWW   Вверх
XOXOJI
Дата 20.9.2008, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Даже не знаю в чем может быть разница, то что SP у винды могут быть разные, не думаю что влияет (( а sendkeys раза с 10-го срабатывает (
PM MAIL   Вверх
XOXOJI
Дата 21.9.2008, 07:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Спасибо почитал ту тему, вот такой код пошел, без всяких проблем
Код

Const WM_KEYDOWN = &H100
Const VK_F2 = &H71
Private Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Const VK_R = &H74
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 KEYEVENTF_KEYUP = &H2
Dim g As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Private Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long


Private Sub Command1_Click()
g = FindWindow(vbNullString, "Безымянный - Блокнот")
SetWindowPos g, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
ShowWindow g, 3
Call PostMessage(g, WM_KEYDOWN, VK_F2, 1)
SetWindowPos g, HWND_NOTOPMOST, 0, 0, 0, 0, SWP_NOSIZE Or SWP_NOMOVE
End Sub



Модератор, поставь от меня плюсик, не могу еще сам (


Это сообщение отредактировал(а) XOXOJI - 21.9.2008, 07:22
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

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

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

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

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


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

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


 




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


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

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