Страница: 1 |
|
Вопрос: Нужна помошь. API for Window
|
Добавлено: 04.06.05 00:12
|
|
Автор вопроса: AgentFire | ICQ: 192496851
|
Привет!
Проблема заключается в том, чтобы найти окно, а потом понять что оно закрыто. Первое получается без труда. Затем таймером жду пока окно закроется. В Винде закрывается, а прога пишет, что оно висит!
Я сначала подумал, что это из за того что explorer все свои окна держит загруженными, но скрытыми, но оказалось, что все еще хуже.
Вто время как первая прога думает, что окно еще висит, вторая такая же, при запуске сообщает, что окна нет!
Кто нибудь знает, в чем прикол?..
Ответить
|
Номер ответа: 5 Автор ответа: AgentFire
ICQ: 192496851
Вопросов: 75 Ответов: 3178
|
Профиль | | #5
|
Добавлено: 04.06.05 12:04
|
Нахожу ват так:
Option Explicit
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
Public Declare Function DestroyWindow Lib "user32" ( 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
Потом outArray(0) все время имеет хендл, даже после закрытия... (
Ответить
|
Страница: 1 |
Поиск по форуму