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

Magnus
...
Рейтинг: 0 / 0
12.05.2006, 16:44
    #33723590
Nikolay Gerasimov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск окна
что-то не удается мне найти такие функции
...
Рейтинг: 0 / 0
12.05.2006, 16:55
    #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
12.05.2006, 17:01
    #33723652
Magnus23
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск окна
Что то у меня глюки. Не проснулся еще.

Magnus
...
Рейтинг: 0 / 0
12.05.2006, 17:15
    #33723695
Nikolay Gerasimov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск окна
Эта не совсем то, что мне нужно. Мне нужна функция, возвращающая дескриптор нужного мне окна.
...
Рейтинг: 0 / 0
12.05.2006, 17:20
    #33723712
Melkiades
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск окна
Nikolay GerasimovЭта не совсем то, что мне нужно. Мне нужна функция, возвращающая дескриптор нужного мне окна.
Совсем то что вам нужно вы не найдете, не зная полного заголовка онка.
А с помощью это примера вы можете найти этот дескриптор по неполному заголовку.
...
Рейтинг: 0 / 0
12.05.2006, 17:27
    #33723736
Nikolay Gerasimov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск окна
Я уже рассматривал данный способ, но только ни как не соображу, как можно выцарапывать из функции EnumWindowsProc дескриптор. Он мне необходим для дальнейшего обращения функцией SendMessage к этому окну.....?????
...
Рейтинг: 0 / 0
12.05.2006, 17:34
    #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
12.05.2006, 17:40
    #33723786
Nikolay Gerasimov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск окна
Если бы все так просто было, но когда у меня в процессе задействованы несколько модулей, притом разных от поставленных задач, десяток функций, которые необходимо включить в вышеназванную функцию. Не очень то и хорошо получается. Теряется гибкость процессов, которые могут запускаться и в ручную и в автоматическом порядке....
Куда проще найти способ, позволяющий всего-навсего возвращать нужный дискриптор.....
...
Рейтинг: 0 / 0
13.05.2006, 16:34
    #33724683
Ashton
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск окна
Посмотри эту статью:

How To Get a Window Handle Without Specifying an Exact Title .
...
Рейтинг: 0 / 0
15.05.2006, 11:20
    #33726399
Nikolay Gerasimov
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
поиск окна
Спасибо, полезная ссылка.....
...
Рейтинг: 0 / 0
15.05.2006, 12:39
    #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
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / поиск окна / 16 сообщений из 16, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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