powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / при обнаружении окна
35 сообщений из 35, показаны все 2 страниц
при обнаружении окна
    #38546779
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как сделать чтобы при обнаружении окна нажать энтер или кликнуть, только надо чтобы это окно не было видно или только чтобы мигнуло, можно такое ?
...
Рейтинг: 0 / 0
при обнаружении окна
    #38547254
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ильшат190,

Не совсем понятно, что именно требуется, тем не менее.

При помощи вот этой функции можно получить handler окна:

Код: vbnet
1.
2.
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _
                 ByVal lpWindowName As String) As Integer



Вот эта функция может отправлять команду окну, например, закрыть:

Код: vbnet
1.
2.
Public Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Integer, Msg As Long, _
wParam As Long, lParam As Long) As Boolean
...
Рейтинг: 0 / 0
при обнаружении окна
    #38547386
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidy,

спасибо большое, а можно сделать ожидание окошка, и так чтобы все нажатия произошли так что вводимое окошко ели мигнуло, или вообще лучше чтобы не было
...
Рейтинг: 0 / 0
при обнаружении окна
    #38547429
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ильшат190,

Можно вызывать функцию поиска окна каждые 15,6 миллисекунд, при помощи таймера, указанного ниже, но решение задачи, с помощью постоянных опросов, получения handle окна и его закрытия, выглядит иррациональным. Чтобы найти более оптимальный подход, необходимо знать почему возникла необходимость работать с окнами таким образом.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
Option Explicit

Public Declare Function SetTimer Lib "user32" _
(ByVal hWnd As Long, _
ByVal nIDEvent As Long, _
ByVal uElapse As Long, _
ByVal lpTimerFunc As Long) As Long
 
Public Declare Function KillTimer Lib "user32" _
(ByVal hWnd As Long, _
ByVal nIDEvent As Long) As Long

Private m_TimerID As Long
 
Public Sub StartTimer(ByVal Duration As Long)
    If m_TimerID = 0 Then
        If Duration > 0 Then
            m_TimerID = SetTimer(0, 0, Duration, AddressOf TimerEvent)
            If m_TimerID = 0 Then
                MsgBox "Timer initialization failed!"
            End If
        Else
            MsgBox "The duration must be greater than zero."
        End If
    Else
        MsgBox "Timer already started."
    End If
End Sub
 
Public Sub StopTimer()
    If m_TimerID <> 0 Then
        KillTimer 0, m_TimerID
        m_TimerID = 0
    Else
        MsgBox "Timer is not active."
    End If
End Sub
 
Public Property Get TimerIsActive() As Boolean
    TimerIsActive = (m_TimerID <> 0)
End Property
 
Private Sub TimerEvent()
    Debug.Print "Timer event fired: "; Format$(Now, "long time")
    StopTimer 'Comment out if timer should run all the time.
    'Your code here.
End Sub

...
Рейтинг: 0 / 0
при обнаружении окна
    #38547497
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidy,

спасибо большое за код
...
Рейтинг: 0 / 0
при обнаружении окна
    #38547529
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
к примеру у меня программа регистрации требует, она каждые n-минут выкидывает окошко с просьбой купить, надо его переодически при появление без показа и вмешательства юзеру закрывать, я решил на vb решить, но люди говорят еще с перехватом функций можно сделать, и говорят это будет правильнее
...
Рейтинг: 0 / 0
при обнаружении окна
    #38547615
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ильшат190к примеру у меня программа регистрации требует, она каждые n-минут выкидывает окошко с просьбой купить, надо его переодически при появление без показа и вмешательства юзеру закрывать, я решил на vb решить, но люди говорят еще с перехватом функций можно сделать, и говорят это будет правильнее

Тогда возможно пригодится эта ссылка .
...
Рейтинг: 0 / 0
при обнаружении окна
    #38547845
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что то я с кодом таймера таки не разобрался, даже комментарии перевел все равно не понял его работу, вот мой проект http://rghost.ru/52184914 , кстати там еще почему то закрытие не работает, а твой код таймера ошибку выдает, и еще вопрос такой , почему минимальный интервал за 5милисекунд взял меньше нельзя что ли ?
...
Рейтинг: 0 / 0
при обнаружении окна
    #38547919
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ильшат190,
...
Рейтинг: 0 / 0
при обнаружении окна
    #38547935
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ильшат190,

Интервал таймера можно задать меньше 15 мсек, но это ничего не даст, т.к. это будет меньше точности таймера.
...
Рейтинг: 0 / 0
при обнаружении окна
    #38548718
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidyильшат190,

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

Еще такой вопрос, можно ли сделать чтобы при появлении окна, на этом окне нажималась кнопка (элемент интерфейса), или если так не получиться то можно ли клик именно на эту кнопку?
...
Рейтинг: 0 / 0
при обнаружении окна
    #38548770
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ильшат190iMrTidyильшат190,

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

Еще такой вопрос, можно ли сделать чтобы при появлении окна, на этом окне нажималась кнопка (элемент интерфейса), или если так не получиться то можно ли клик именно на эту кнопку?

Не зная какие манипуляции требуются, сложно ответить на вопрос, но тем не менее, вот здесь список всех сообщений, которые можно отправить окну, в том числе такие как нажатие клавиш клавиатуры и мыши, так и движения мыши.
...
Рейтинг: 0 / 0
при обнаружении окна
    #38548821
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidy,

Манипуляции:
при появлении окна, нажать на кнопку в этой окне
// желательно без координат так как это не стабильный, не надежный вариант
...
Рейтинг: 0 / 0
при обнаружении окна
    #38549200
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidy,

вот проект, там чуть изменил/доработал теперь можно указывать только часть заголовка,
но одну задачу не смог сделать всё таки.
Надо немножко заменить цель, надо не закрывать программу а посылать на окно нажатие кнопки "Энтер" можно такое, подскажи пожалуйста
...
Рейтинг: 0 / 0
при обнаружении окна
    #38549205
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вот тебе в помощь, http://www.rusedu.info/index.php?module=News&catid=&topic=18 , я сам прочитал таки не смог чтобы нажимала именно "энтер" именно в том окне
...
Рейтинг: 0 / 0
при обнаружении окна
    #38549533
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ильшат190,

Да, действительно, можно осуществить функцию поиска окна без таймера, а при помощи Do While...Loop и DoEvents. Возможно опрос будет происходить даже чаще.
...
Рейтинг: 0 / 0
при обнаружении окна
    #38549578
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ильшат190iMrTidy,

вот проект, там чуть изменил/доработал теперь можно указывать только часть заголовка,
но одну задачу не смог сделать всё таки.
Надо немножко заменить цель, надо не закрывать программу а посылать на окно нажатие кнопки "Энтер" можно такое, подскажи пожалуйста

Будет полезным познакомиться с классами окон Windows . Рискну предположить, что всплывающее окно должно закрываться без закрытия приложения. Клавишу Enter можно посылать, но нужно знать куда. Например, применительно к Notepad, код ниже будет работать, и для Enter и для "hello", но вот ничего не даст при использовании KeyDown/KeyUp. Дело в том, что в первых двух случаях, отправляются символы в окно "Edit" приложения "Notepad", в то время как третий, отправляет события нажатия и отпускания клавиш, при этом целевое окно должно быть keyboard focus.

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
Option Explicit

Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _
                 ByVal lpWindowName As String) As Long
                 
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
                ByVal wParam As Integer, ByVal lParam As Any) As Long

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As Long, _
                ByVal hwndChildAfter As Long, ByVal lpszClass As String, ByVal lpszWindow As String) As Long

Private Const WM_CLOSE As Long = &H10
Private Const WM_KEYUP As Long = &H101
Private Const WM_KEYDOWN As Long = &H100
Private Const VK_RETURN As Long = &HD
Private Const WM_SETFOCUS As Long = &H7
Private Const WM_ACTIVATE As Long = &H6
Private Const WM_KILLFOCUS As Long = &H8
Private Const WM_SETTEXT As Long = &HC
Private Const WM_CHAR As Long = &H102

Public Sub CheckWindow()

Dim hwnd As Long
Dim hwndex As Long
Dim sName

Do While Not bStop

sName = frmMain.txtAppName.Text

If LenB(sName) <> 0 Then
    hwnd = FindWindow(vbNullString, sName)
    If hwnd <> 0 Then
        hwndex = FindWindowEx(hwnd, 0&, "Edit", "")
        If hwndex <> 0 Then
            'SendMessage hwndex, WM_ACTIVATE, 1&, 0&
            'SendMessage hwndex, WM_SETFOCUS, 0&, 0&
            'SendMessage hwndex, WM_KEYDOWN, VK_RETURN, 1&
            'SendMessage hwndex, WM_KEYUP, VK_RETURN, 1&
            
            'SendMessage hwndex, WM_SETTEXT, 0&, "hello"
            
            SendMessage hwndex, WM_CHAR, 13, 0&
        End If
    End If
End If

DoEvents
Loop

End Sub

...
Рейтинг: 0 / 0
при обнаружении окна
    #38549691
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код разместил по местам в прошлый проект, запускаю что то не получается. Тестировал на калькуляторе. Т.е запускаю калькулятор настраиваю чтобы при нажатии энтер менялась результат сложения к примеру, запускаю программу - по идее на калькуляторе должен меняться результат (т.е при нажатии на энтер, а этого не происходит). Вот проект
...
Рейтинг: 0 / 0
при обнаружении окна
    #38549693
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
еще не понял что означает едит из hwndex = FindWindowEx(hwnd, 0&, "Edit", "") , может для калькулятора другой))
...
Рейтинг: 0 / 0
при обнаружении окна
    #38549733
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ильшат190еще не понял что означает едит из hwndex = FindWindowEx(hwnd, 0&, "Edit", "") , может для калькулятора другой))

Это подокно Notepad, где отображается текст. Для калькулятора свой.
...
Рейтинг: 0 / 0
при обнаружении окна
    #38549933
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidy,
...
Рейтинг: 0 / 0
при обнаружении окна
    #38549934
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidy,

есть программа1 она создает дополнительное окно , (окно выглядит как обычные программы) , это окно в диспетчере процессов не получается увидеть, а вот в диспетчере "заголовков приложений" видно, если в нём нажать перейти к процессу то переходит на процесс csrss.exe , как получить handle этого окна по названию? Обычный способ не находит.
...
Рейтинг: 0 / 0
при обнаружении окна
    #38550043
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ильшат190,

Строго говоря, получение handle окна не зависит от поведения программы. О каком "обычном способе" идет речь?
...
Рейтинг: 0 / 0
при обнаружении окна
    #38550063
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidy,

вот к примеру твой проект, с него не находит по заголовку, хотя в диспетчере приложений видно что она запущена
...
Рейтинг: 0 / 0
при обнаружении окна
    #38550131
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ильшат190,

Возможно, потому что это подокно приложения, тогда можно попробовать воспользоваться моим последним примером.
...
Рейтинг: 0 / 0
при обнаружении окна
    #38550908
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidyильшат190,

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

Почему то, вот в этом пункте почему то ноль пишет,
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Public Sub CheckWindow()

Dim hWnd As Long
Dim hwndex As Long
Dim sName

Do While Not bStop

sName = frmMain.txtAppName.Text

If LenB(sName) <> 0 Then
    hWnd = FindWindow(vbNullString, sName)
    If hWnd <> 0 Then
        hwndex = FindWindowEx(hWnd, 0&, sName, vbNullString) ' тут пустая hwndex
        If hwndex <> 0 Then
            'SendMessage hwndex, WM_ACTIVATE, 1&, 0&
            'SendMessage hwndex, WM_SETFOCUS, 0&, 0&
            'SendMessage hwndex, WM_KEYDOWN, VK_RETURN, 1&
            'SendMessage hwndex, WM_KEYUP, VK_RETURN, 1&
            'SendMessage hwndex, WM_SETTEXT, 0&, "1234"
            
            SendMessage hwndex, WM_CHAR, 13, 0&
        End If
    End If
End If

DoEvents
Loop

End Sub



проект прикрепил
...
Рейтинг: 0 / 0
при обнаружении окна
    #38550998
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
'Добавить в модуль:

Public Declare Function GetDesktopWindow Lib "user32" () As Long
Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long

Public Const GW_HWNDFIRST = 0
Public Const GW_HWNDLAST = 1
Public Const GW_HWNDNext = 2
Public Const GW_HWNDPREV = 3
Public Const GW_OWNER = 4
Public Const GW_CHILD = 5

'Добавить в форму:

Private Sub Command1_Click()
    Dim hwnd&
    Dim dummy&
    Dim strCaption$
    ' Очищает listbox
    List1.Clear
    ' Рабочий стол - самое первое окно
    hwnd& = GetDesktopWindow()
    ' Первое дочернее окно - окно первого уровня
    hwnd& = GetWindow(hwnd&, GW_CHILD)
    ' Теперь получим заголовки окон всех уровней
    Do
       dummy& = GetWindowTextLength(hwnd&)
       If dummy <> 0 Then
          strCaption = String(dummy + 1, " ")
          dummy = GetWindowText(hwnd&, strCaption, dummy + 1)
          List1.AddItem strCaption
       End If
       hwnd& = GetWindow(hwnd&, GW_HWNDNEXT)
    Loop While hwnd& <> 0
End Sub



Есть такой код, как его переделать по проще чтобы можно было всего лишь, проверить запущено ли программа с таким заголовком? //быстрота важна чтобы код быстро работал, и успевал в таймере за 15мс
...
Рейтинг: 0 / 0
при обнаружении окна
    #38551035
timtim
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ильшат190к примеру у меня программа регистрации требует, она каждые n-минут выкидывает окошко с просьбой купить, надо его переодически при появление без показа и вмешательства юзеру закрывать, я решил на vb решить, но люди говорят еще с перехватом функций можно сделать, и говорят это будет правильнее

Нарушением правил форума пахнет.
Администраторы спят?
...
Рейтинг: 0 / 0
при обнаружении окна
    #38551041
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
timtim, есть кнопка "сообщить модератору" - не заметил?

автор мог обойтись без пояснений (тем более со словом "например"), это бы не меняло сути его вопроса.
...
Рейтинг: 0 / 0
при обнаружении окна
    #38551090
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
timtim
ильшат190к примеру у меня программа регистрации требует, она каждые n-минут выкидывает окошко с просьбой купить, надо его переодически при появление без показа и вмешательства юзеру закрывать, я решил на vb решить, но люди говорят еще с перехватом функций можно сделать, и говорят это будет правильнее

Нарушением правил форума пахнет.
Администраторы спят?


это просто пример, так легче объяснить
...
Рейтинг: 0 / 0
при обнаружении окна
    #38551195
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ильшат190iMrTidyильшат190,

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

Почему то, вот в этом пункте почему то ноль пишет,
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
Public Sub CheckWindow()

Dim hWnd As Long
Dim hwndex As Long
Dim sName

Do While Not bStop

sName = frmMain.txtAppName.Text

If LenB(sName) <> 0 Then
    hWnd = FindWindow(vbNullString, sName)
    If hWnd <> 0 Then
        hwndex = FindWindowEx(hWnd, 0&, sName, vbNullString) ' тут пустая hwndex
        If hwndex <> 0 Then
            'SendMessage hwndex, WM_ACTIVATE, 1&, 0&
            'SendMessage hwndex, WM_SETFOCUS, 0&, 0&
            'SendMessage hwndex, WM_KEYDOWN, VK_RETURN, 1&
            'SendMessage hwndex, WM_KEYUP, VK_RETURN, 1&
            'SendMessage hwndex, WM_SETTEXT, 0&, "1234"
            
            SendMessage hwndex, WM_CHAR, 13, 0&
        End If
    End If
End If

DoEvents
Loop

End Sub



проект прикрепил

sName это имя окна приложения или того окна, что требуется закрывать?
...
Рейтинг: 0 / 0
при обнаружении окна
    #38551346
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidy,

основное окно приложения,
...
Рейтинг: 0 / 0
при обнаружении окна
    #38551473
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ильшат190iMrTidy,

основное окно приложения,

Сомневаюсь, что sName одинаковое для основного и всплвыающего окна. Почитайте все-таки про классы окон.

Если поместить в sName имя всплывающего окна, будет ли оно найдено?
...
Рейтинг: 0 / 0
при обнаружении окна
    #38552107
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidy,

пробовал все равно, я даже пробовал прям handle окна получить поставить и почему то все равно не вводится
...
Рейтинг: 0 / 0
при обнаружении окна
    #38552472
Фотография ильшат190
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ураааа! Наконец то получилось!!!

Вот форма:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
Private Sub Timer1_Timer()
Модуль1.hwnd = GetDesktopWindow()
Модуль1.hwnd = GetWindow(Модуль1.hwnd, GW_CHILD)
Do
Модуль1.dummy = GetWindowTextLength(Модуль1.hwnd)
If Модуль1.dummy <> 0 Then
Модуль1.strCaption = String(Модуль1.dummy + 1, " ")
Модуль1.dummy = GetWindowText(Модуль1.hwnd, Модуль1.strCaption, Модуль1.dummy + 1)
frmmain.Text1.Text = frmmain.Text1.Text + Модуль1.strCaption
End If
Модуль1.hwnd = GetWindow(Модуль1.hwnd, GW_HWNDNext)

If InStr(1, Модуль1.strCaption, "Вопрос") <> 0 Then

Dim lngX As Single, lngY As Single

lngX = Screen.Width / Screen.TwipsPerPixelX
lngY = Screen.Height / Screen.TwipsPerPixelY
Call SetCursorPos(lngX / 2, lngY / 2)
MouseClick btcLeft
Call keybd_event(VK_RETURN, 0, 0, 0)
Call keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0)
End
End If

Loop While Модуль1.hwnd <> 0


End Sub



Вот модуль:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
Public Declare Sub keybd_event Lib "user32" (ByVal bVk As Byte, ByVal bScan As Byte, ByVal dwFlags As Long, ByVal dwExtraInfo As Long)
'bVk - Виртуальный код клавиши для имитации нажатия и отпускания клавиши.
'bScan - Зарезервировано -- установлено в 0.
'dwFlags - Комбинация следующих флагов определяет различные способы имитации:
'KEYEVENTF_EXTENDEDKEY - Префикс скэн-кода с префиксным байтом, имеющим значение &HE0.
'KEYEVENTF_KEYUP - Клавиша, указанная в bVk будет отпущена. Если этот флажок не определен, клавиша будет нажата.
'dwExtraInfo - Дополнительное 32-разрядное значение, связанное с событием клавиатуры.
Public Const KEYEVENTF_KEYUP = &H2 'событие отпускания клавиши
Public Const VK_LWIN = &H5B  'левая клавиша, эмулирующая нажатие кнопки ПУСК
Public Const VK_F1 = &H70
Public Const VK_RETURN = &HD




Public Declare Function GetDesktopWindow Lib "user32" () As Long
Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Public Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Public Declare Function SetCursorPos Lib "user32" (ByVal r As Long, ByVal r1 As Long) As Long
Public 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)

Public Const MOUSEEVENTF_ABSOLUTE = &H8000
Public Const MOUSEEVENTF_LEFTDOWN = &H2
Public Const MOUSEEVENTF_LEFTUP = &H4
Public Const MOUSEEVENTF_MIDDLEDOWN = &H20
Public Const MOUSEEVENTF_MIDDLEUP = &H40
Public Const MOUSEEVENTF_MOVE = &H1
Public Const MOUSEEVENTF_RIGHTDOWN = &H8
Public Const MOUSEEVENTF_RIGHTUP = &H10

Public Const GW_HWNDFIRST = 0
Public Const GW_HWNDLAST = 1
Public Const GW_HWNDNext = 2
Public Const GW_HWNDPREV = 3
Public Const GW_OWNER = 4
Public Const GW_CHILD = 5

Public hwnd As String
Public dummy As String
Public strCaption As String
Public hw As String


Public Enum enButtonToClick
btcLeft
btcRight
btcMiddle
End Enum

Public Sub MouseClick(ByVal MBClick As enButtonToClick)

Dim cbuttons As Long, dwExtraInfo As Long, mevent As Long
Select Case MBClick
Case btcLeft
mevent = MOUSEEVENTF_LEFTDOWN Or MOUSEEVENTF_LEFTUP
Case btcRight
mevent = MOUSEEVENTF_RIGHTDOWN Or MOUSEEVENTF_RIGHTUP
Case btcMiddle
mevent = MOUSEEVENTF_MIDDLEDOWN Or MOUSEEVENTF_MIDDLEUP
Exit Sub
End Select
Call mouse_event(mevent, 0&, 0&, cbuttons, dwExtraInfo)
End Sub

Public Sub MouseMove(ByRef X As Long, ByRef Y As Long)
Dim cbuttons As Long, dwExtraInfo As Long
Call mouse_event(MOUSEEVENTF_ABSOLUTE Or MOUSEEVENTF_MOVE, X, Y, cbuttons, dwExtraInfo)
End Sub





При запуске активируется таймер с интервалом 15мс, она проверяет на наличие части заголовка одного окна, если видит, то кликает на середину экрану (активирует окно) и нажимает энтер, и всё выходит.
Визуально видно что окошко появилось и пропало, можно ли свести это время к минимуму,т.е чтобы вообще не было видно?
...
Рейтинг: 0 / 0
35 сообщений из 35, показаны все 2 страниц
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / при обнаружении окна
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]