powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / поиск окна
16 сообщений из 16, страница 1 из 1
поиск окна
    #33723415
Nikolay Gerasimov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Подскажите функцию с помощью которой можно определить указатель на окно по имени окна, точнее по ключевым словам содержащихся в имени?
...
Рейтинг: 0 / 0
поиск окна
    #33723483
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As Long, ByVal lpWindowName As Long) As Long
...
Рейтинг: 0 / 0
поиск окна
    #33723484
Фотография Konst_One
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
FindWindow
...
Рейтинг: 0 / 0
поиск окна
    #33723521
Nikolay Gerasimov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
К сожалению имя окна должно быть указанно точно, а у меня имя окна может менятся (вторая половина).
...
Рейтинг: 0 / 0
поиск окна
    #33723561
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В таком случае можно просканить все окна используя FindFirstWindow - FindNextWindow.

Magnus
...
Рейтинг: 0 / 0
поиск окна
    #33723590
Nikolay Gerasimov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
что-то не удается мне найти такие функции
...
Рейтинг: 0 / 0
поиск окна
    #33723625
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
'В форме
Private Sub Form_Load()
    Me.AutoRedraw = True
    EnumWindows AddressOf EnumWindowsProc, ByVal  0 &
End Sub

'В модуле
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long

Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
    Dim sSave As String, Ret As Long
    Ret = GetWindowTextLength(hwnd)
    sSave = Space(Ret)
    GetWindowText hwnd, sSave, Ret +  1 
    Form1.Print Str$(hwnd) + " " + sSave
    'continue enumeration
    EnumWindowsProc = True
End Function
...
Рейтинг: 0 / 0
поиск окна
    #33723652
Фотография Magnus23
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что то у меня глюки. Не проснулся еще.

Magnus
...
Рейтинг: 0 / 0
поиск окна
    #33723695
Nikolay Gerasimov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Эта не совсем то, что мне нужно. Мне нужна функция, возвращающая дескриптор нужного мне окна.
...
Рейтинг: 0 / 0
поиск окна
    #33723712
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Nikolay GerasimovЭта не совсем то, что мне нужно. Мне нужна функция, возвращающая дескриптор нужного мне окна.
Совсем то что вам нужно вы не найдете, не зная полного заголовка онка.
А с помощью это примера вы можете найти этот дескриптор по неполному заголовку.
...
Рейтинг: 0 / 0
поиск окна
    #33723736
Nikolay Gerasimov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я уже рассматривал данный способ, но только ни как не соображу, как можно выцарапывать из функции EnumWindowsProc дескриптор. Он мне необходим для дальнейшего обращения функцией SendMessage к этому окну.....?????
...
Рейтинг: 0 / 0
поиск окна
    #33723760
Melkiades
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну а какие проблемы-то? Откройте блокнот и...

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Boolean
Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, _
  ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Const WM_CLOSE = &H10

Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
    Dim sSave As String, Ret As Long
    Ret = GetWindowTextLength(hwnd)
    sSave = Space(Ret)
    GetWindowText hwnd, sSave, Ret +  1 
    Form1.Print Str$(hwnd) + " " + sSave
    If InStr( 1 , sSave, "Notepad", vbTextCompare) <>  0  Then
        Call PostMessage(hwnd, WM_CLOSE,  0 &,  0 &)
        EnumWindowsProc = False
    Else
        EnumWindowsProc = True
    End If
End Function
...
Рейтинг: 0 / 0
поиск окна
    #33723786
Nikolay Gerasimov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если бы все так просто было, но когда у меня в процессе задействованы несколько модулей, притом разных от поставленных задач, десяток функций, которые необходимо включить в вышеназванную функцию. Не очень то и хорошо получается. Теряется гибкость процессов, которые могут запускаться и в ручную и в автоматическом порядке....
Куда проще найти способ, позволяющий всего-навсего возвращать нужный дискриптор.....
...
Рейтинг: 0 / 0
поиск окна
    #33724683
Ashton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Посмотри эту статью:

How To Get a Window Handle Without Specifying an Exact Title .
...
Рейтинг: 0 / 0
поиск окна
    #33726399
Nikolay Gerasimov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, полезная ссылка.....
...
Рейтинг: 0 / 0
поиск окна
    #33726754
Barsss
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
'Получить полное название окна, зная кусок
Option Explicit
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
Private Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hwnd As Long, ByVal wFlag As Long) As Long

Public Function GetCaption(lhWnd As Long) As String
Dim sA As String, lLen As Long
lLen& = GetWindowTextLength(lhWnd&)
sA$ = String(lLen&, 0&)
Call GetWindowText(lhWnd&, sA$, lLen& + 1)
GetCaption$ = sA$
End Function

Public Function DLHFindWin(frm As Form, WinTitle As String, CaseSensitive As Boolean) As Long
Dim lhWnd As Long, sA As String
lhWnd& = frm.hwnd
Do
DoEvents
If lhWnd& = 0 Then Exit Do
If CaseSensitive = False Then
sA$ = LCase$(GetCaption(lhWnd&))
WinTitle$ = LCase$(WinTitle$)
Else
sA$ = GetCaption(lhWnd&)
End If
If InStr(sA$, WinTitle$) Then
DLHFindWin& = lhWnd&
Exit Do
Else
DLHFindWin& = 0
End If
lhWnd& = GetNextWindow(lhWnd&, 2)
Loop
End Function

Private Sub Command1_Click()
'использование функции
Call MsgBox(DLHFindWin&(Me, "доку", False))
'или
Call MsgBox(GetCaption$(DLHFindWin&(Me, "доку", False)))
End Sub
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / поиск окна
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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