Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Создание справочника Windows API

Страница: 1 |

 

  Вопрос: Границы окон Добавлено: 12.10.08 01:22  

Автор вопроса:  Skywalker | Web-сайт: iSkywalker.ru | ICQ: 300-70-6пятьЪ 
пытаюсь получить границы окон


Friend Class WindowBorder
    Private Delegate Function EnumWindowsProc(ByVal hwnd As IntPtr, ByVal lParam As Integer) As Boolean
    <DllImport("user32")> _
    Private Shared Function EnumWindows(ByVal lpEnumFunc As EnumWindowsProc, ByVal lParam As Integer) As Integer
    End Function
    <DllImport("user32.dll")> _
    Private Shared Function IsWindowVisible(ByVal hWnd As IntPtr) As Boolean
    End Function
    <DllImport("user32.dll", CharSet:=CharSet.Auto, SetLastError:=True)> _
    Private Shared Function GetWindowText(ByVal hWnd As IntPtr, ByVal lpString As StringBuilder, ByVal nMaxCount As Integer) As Integer
    End Function
    Private Shared Function GetWindowTextHWND(ByVal hwnd As IntPtr) As String
        Dim sbWindowText As New StringBuilder(100)
        If GetWindowText(hwnd, sbWindowText, sbWindowText.Capacity) = 0 Then
            Return String.Empty
        Else
            Return sbWindowText.ToString()
        End If
    End Function
    <DllImport("user32.dll", SetLastError:=True)> _
        Private Shared Function GetWindowRect(ByVal hwnd As Integer, ByRef lpRect As RECT) As Integer
    End Function
    Public Structure RECT
        Public left, top, right, bottom As Integer
    End Structure
    Public Sub New()
        EnumWindows(New EnumWindowsProc(AddressOf EnumTasksDirect), 0)
    End Sub
    Private Function EnumTasksDirect(ByVal hwnd As IntPtr, ByVal lparam As Integer) As Boolean
        If (IsWindowVisible(hwnd) And GetWindowTextHWND(hwnd) <> String.Empty And GetWindowTextHWND(hwnd) <> "Gentile" And GetWindowTextHWND(hwnd) <> "Program Manager") Then
            PrintRects(hwnd)
        End If
        Return True
    End Function
    Private Sub PrintRects(ByVal hwnd As IntPtr)
        Dim q As RECT
        GetWindowRect(hwnd, q)
        Dim fw As New IO.StreamWriter("rect.txt", True, System.Text.Encoding.GetEncoding(1251))
        fw.WriteLine(GetWindowTextHWND(hwnd) + " - " + q.left.ToString + " " + q.right.ToString + " " + q.top.ToString + " " + q.bottom.ToString)
        fw.Close()
        fw.Dispose()
    End Sub
End Class


вот, что выводится в файл


Gentile (Running) - Microsoft Visual Studio - -4 1284 -4 774
gentileLib - Microsoft Visual Studio - -4 1284 -4 774
VBNet - Форум - Создание справочника Windows API - Microsoft Internet Explorer - 0 1280 0 773
vb net GetWindowRect - Поиск в Google - Microsoft Internet Explorer - 0 1280 0 770
WilsonGlobalSystemHooks_src - -32000 -31840 -32000 -31969
Debug - 368 1168 80 671
hookTest2 - Microsoft Visual Studio - -4 1284 -4 774
GlobalHooks - Microsoft Visual Studio - -32000 -31840 -32000 -31969
Downloads - -32000 -31840 -32000 -31969
VistaOS (C:) - -32000 -31840 -32000 -31969
testhook - Microsoft Visual Studio - -32000 -31840 -32000 -31969


и вот тут баги какие-то:

первые 2 строки вижл студия почему-то выросла на 4 пикселя в каждую сторону

3,4 строка ослик норм

5 окно открытая папка проводника о_О

6 окно тоже открытая папка проводника, но с норм границами о_О

7 норм

8 а вот тут окно вижл студии загнулось по границам

... без комментариев

перезапустим, опа
vb net GetWindowRect - Поиск в Google - Microsoft Internet Explorer - 0 1280 0 770

стало

vb net GetWindowRect - Поиск в Google - Microsoft Internet Explorer - -32000 -31840 -32000 -31969

что тут за фигня творица?) (разрешение экрана у меня 1280х800)

Ответить

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

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



ICQ: 300-70-6пятьЪ 

Вопросов: 62
Ответов: 545
 Web-сайт: iSkywalker.ru
 Профиль | | #1
Добавлено: 12.10.08 01:47
все понял, -32000 для всех минимизированных окон
а увеличенные на 4 пикселя границы видимо для максимизированных

Ответить

Страница: 1 |

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



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