пытаюсь получить границы окон
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)
Ответить
|