Visual Basic, .NET, ASP, VBScript
 

   
   
     

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

Страница: 1 |

 

  Вопрос: Нужна помошь. API for Window Добавлено: 04.06.05 00:12  

Автор вопроса:  AgentFire | ICQ: 192496851 
Привет!

Проблема заключается в том, чтобы найти окно, а потом понять что оно закрыто. Первое получается без труда. Затем таймером жду пока окно закроется. В Винде закрывается, а прога пишет, что оно висит!
Я сначала подумал, что это из за того что explorer все свои окна держит загруженными, но скрытыми, но оказалось, что все еще хуже.
Вто время как первая прога думает, что окно еще висит, вторая такая же, при запуске сообщает, что окна нет!

Кто нибудь знает, в чем прикол?..

Ответить

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

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



Вопросов: 224
Ответов: 3777
 Web-сайт: xury.zx6.ru
 Профиль | | #1
Добавлено: 04.06.05 00:55
А ты как, FindWindow (или что то ещё) по таймеру вызываешь или только в Form_Load?

Ответить

Номер ответа: 2
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #2 Добавлено: 04.06.05 01:05
IsWindow(hWnd) по таймеру

Ответить

Номер ответа: 3
Автор ответа:
 AgentFire



ICQ: 192496851 

Вопросов: 75
Ответов: 3178
 Профиль | | #3 Добавлено: 04.06.05 01:05
FindWindow тоже не очень хочет...

Ответить

Номер ответа: 4
Автор ответа:
 HACKER


 

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

Вопросов: 236
Ответов: 8362
 Профиль | | #4 Добавлено: 04.06.05 02:12
давай лучше код. А вообще вроде проблем никаких быть не должно, находиш хендел окна, и в таймере ждёш пока этот хендел не пропадёт.

Ответить

Номер ответа: 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 |

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



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