Страница: 1 |
Вопрос: Помогите, очень надо! | Добавлено: 24.04.05 14:22 |
Автор вопроса: ![]() |
Как отыскать хэндл окна с первыми 13 известными буквами и потом проверять, не было ли это окно закрыто? |
Ответы | Всего ответов: 6 |
Номер ответа: 1 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() ICQ: 247906854 Вопросов: 133 Ответов: 882 |
Web-сайт: Профиль | Цитата | #1 | Добавлено: 24.04.05 17:37 |
Юзаешь вот эти функции:
Private Declare Function GetWindow Lib "user32.dll" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Private Declare Function IsWindow Lib "user32.dll" (ByVal hwnd As Long) As Long Private Const GW_HWNDFIRST As Long = 0 Private Const GW_HWNDNEXT As Long = 2 Схема такая же как при любых других перечислениях: GetWindow твоё окно,gw_first do GetWindText if left$(,13)=="asdfsd" then end if GetWindow след. окно, gw_next loop А чтобы потом проверить есть ли оно или уже исчезло, я бы юзал IsWindow, хотя можно использовать любую функцию, требующую описатель окна - один фиг с ошибкой завершится... Это так схематично, т.к. готового кода у меня нет, а те куски что есть один фиг надо затачивать под твою задачу, т.к. по заголовку окон я как правило не ищу - гораздо эффективнее их искать по имени класса. |
Номер ответа: 2 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 192496851 Вопросов: 75 Ответов: 3178 |
Профиль | Цитата | #2 | Добавлено: 25.04.05 10:20 |
GetWindow твоё окно,gw_first
Не врубил как юзать, хэндля-то у меня нет! Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Что за параметр cch? GetWindow след. окно, gw_next
Какк воспринимать <след. окно>? Как переменную? |
Номер ответа: 3 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #3 | Добавлено: 25.04.05 11:41 |
Не врубил как юзать, хэндля-то у меня нет!
ноль подставь Что за параметр cch?
Вероятно размер памяти что ты выделил для lpString например lpString = space(255) - chh = 255 Какк воспринимать <след. окно>? Как переменную?
Это не след. окно, а хэндл окна что ты только что получил... Дабы не задавать подобных вопросов, используй Private Declare Function EnumWindows Lib "user32.dll" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
|
Номер ответа: 4 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 192496851 Вопросов: 75 Ответов: 3178 |
Профиль | Цитата | #4 | Добавлено: 25.04.05 17:57 |
Может, подскажешь, как ей пользоваться? |
Номер ответа: 5 Автор ответа: ![]() ![]() ![]() ![]() ![]() ![]() Разработчик Offline Client ICQ: 233286456 Вопросов: 34 Ответов: 5445 |
Web-сайт: Профиль | Цитата | #5 | Добавлено: 25.04.05 21:22 |
Пусть код кривоват, но за-то по теме ![]() В модуль: Option Explicit
'*************************************************************************************** '* Написано: 25.04.2005 (Team HomeWork) * '* e-mail: sne_pro@mail.ru * '*************************************************************************************** Private Declare Function EnumWindows Lib "user32.dll" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long Private Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long Dim sArray() As String Private Function EnumWindowsProc(ByVal hWnd As Long, ByVal lParam As Long) As Long On Local Error GoTo er ReDim Preserve sArray(UBound(sArray) + vbNull) sArray(UBound(sArray)) = VBA.String$(GetWindowTextLength(hWnd) + 1, 0& ![]() sArray(UBound(sArray)) = Left$(sArray(UBound(sArray)), GetWindowText(hWnd, sArray(UBound(sArray)), _ Len(sArray(UBound(sArray))))) & _ ";" & hWnd EnumWindowsProc = vbNull Exit Function er: ReDim sArray(0) Resume Next End Function Public Function GetWindowsByTitle(ByVal sTitle As String, ByRef outArray() As Long) As Long On Local Error GoTo er Dim i As Long Call EnumWindows(AddressOf EnumWindowsProc, 0& ![]() For i = 0 To UBound(sArray) If Left$(sArray(i), Len(sTitle)) = sTitle Then ReDim Preserve outArray(UBound(outArray) + vbNull) outArray(UBound(outArray)) = VBA.Val(Split(sArray(UBound(outArray)), ";" ![]() GetWindowsByTitle = GetWindowsByTitle + vbNull End If Next Erase sArray Exit Function er: ReDim outArray(0) Resume Next End Function Использование в форме: Option Explicit
Private Sub Form_Load() Dim arr() As Long Dim cnt As Long cnt = GetWindowsByTitle("Project", arr) For cnt = 0 To cnt Debug.Print arr(cnt) Next End Sub |
Номер ответа: 6 Автор ответа: ![]() ![]() ![]() ![]() ICQ: 192496851 Вопросов: 75 Ответов: 3178 |
Профиль | Цитата | #6 | Добавлено: 25.04.05 22:05 |
OK, посмотрим... |
Страница: 1 |
|