Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Помогите, очень надо! Добавлено: 24.04.05 14:22  

Автор вопроса:  AgentFire | ICQ: 192496851 
Как отыскать хэндл окна с первыми 13 известными буквами и потом проверять, не было ли это окно закрыто?

Ответить

  Ответы Всего ответов: 6  

Номер ответа: 1
Автор ответа:
 Neco



ICQ: 247906854 

Вопросов: 133
Ответов: 882
 Web-сайт: neco.pisem.net
 Профиль | | #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
Автор ответа:
 AgentFire



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
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #4 Добавлено: 25.04.05 17:57
Может, подскажешь, как ей пользоваться?

Ответить

Номер ответа: 5
Автор ответа:
 sne



Разработчик Offline Client

ICQ: 233286456 

Вопросов: 34
Ответов: 5445
 Web-сайт: hw.t-k.ru
 Профиль | | #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)), ";";)(1))

            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
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #6 Добавлено: 25.04.05 22:05
OK, посмотрим...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам