• Vui lòng đọc nội qui diễn đàn để tránh bị xóa bài viết
  • Tìm kiếm trước khi đặt câu hỏi

Lấy gia phả classname của cửa sổ bất kỳ

Các mẹo vặt linh tinh khác, không thuộc nhóm nào
Hình đại diện của người dùng
NoBi
Quản trị
Quản trị
Bài viết: 948
Ngày tham gia: T.Ba 18/03/2008 1:22 pm
Đến từ: Sài Gòn
Has thanked: 50 time
Been thanked: 66 time
Liên hệ:

Lấy gia phả classname của cửa sổ bất kỳ

Gửi bàigửi bởi NoBi » T.Tư 03/12/2008 9:56 pm

Thủ thuật: Lấy gia phả classname của cửa sổ bất kỳ
Tác giả: NoBi
Mô tả: Có một số bạn dùng hàm FindWindow và FindWindowEx để lấy handle của cửa sổ nhưng lại gặp khó khăn trong việc xác định cửa sổ đó được nằm trong những cửa sổ nào, thứ tự ra sao.


Ví dụ với Y!M 8 thì cửa sổ để chat có classname thứ tự từ cửa sổ cha tới nó là:
YSearchMenuWndClass -> IMClass -> YIMInputWindow

Đoạn code bên dưới sẽ giúp chúng ta tiết kiệm thời gian trong việc xác định thứ tự từng cấp của 1 cửa sổ:
  1.         Option Explicit
  2.          
  3.         Private Const WM_GETTEXT = &HD
  4.         Private Const WM_GETTEXTLENGTH = &HE
  5.          
  6.         Private Type POINTAPI
  7.           X As Long
  8.           Y As Long
  9.         End Type
  10.          
  11.         Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
  12.         Private Declare Function WindowFromPoint Lib "user32" (ByVal xPoint As Long, ByVal yPoint As Long) As Long
  13.         Private Declare Function GetCursorPos Lib "user32" (lpPoint As POINTAPI) As Long
  14.         Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  15.         Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
  16.          
  17.          
  18.         Private Sub Form_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
  19.          
  20.         Dim Pt As POINTAPI, mWnd As Long
  21.         Dim lpClassName As String, RetVal As Long
  22.          
  23.         'Get the current cursor position
  24.        GetCursorPos Pt
  25.          
  26.         'Get the window under the cursor
  27.        mWnd = WindowFromPoint(Pt.X, Pt.Y)
  28.         Text1.Text = "Handle = " & mWnd
  29.          
  30.         lpClassName = Space(256)
  31.         RetVal = GetClassName(mWnd, lpClassName, 256)
  32.         lpClassName = Left$(lpClassName, RetVal)
  33.         Text2.Text = "Classname = " & lpClassName
  34.          
  35.         Dim length As Long
  36.         Dim result As Long
  37.         Dim strtmp As String
  38.         length = SendMessage(mWnd, WM_GETTEXTLENGTH, ByVal 0, ByVal 0) + 1
  39.         strtmp = Space(length)
  40.         result = SendMessage(mWnd, WM_GETTEXT, ByVal length, ByVal strtmp)
  41.         Dim s As Variant
  42.         Dim st As String
  43.         s = Split(strtmp, vbNullChar)
  44.         Text3.Text = "Text = " & s(0)
  45.          
  46.         '----------------------------------
  47.        
  48.         txtAZ.Text = ""
  49.         txtZA.Text = ""
  50.          
  51.         '----------------------------------
  52.        Dim h As Long, sClass As String
  53.         h = WindowFromPoint(Pt.X, Pt.Y)
  54.         txtAZ.Text = GetClsName(h)
  55.         txtZA.Text = GetClsName(h)
  56.         While h  0
  57.           h = GetParent(h)
  58.           sClass = GetClsName(h)
  59.           If sClass  "" Then
  60.             txtAZ.Text = sClass & " -> " & txtAZ.Text
  61.             txtZA.Text = txtZA.Text & " -> " & sClass
  62.           End If
  63.         Wend
  64.          
  65.         End Sub
  66.          
  67.         Public Function GetClsName(hwnd As Long) As String
  68.           Dim lpClassName As String, RetVal As Long
  69.          
  70.           lpClassName = Space(256)
  71.           RetVal = GetClassName(hwnd, lpClassName, 256)
  72.           lpClassName = Left$(lpClassName, RetVal)
  73.           GetClsName = lpClassName
  74.          
  75.         End Function

Drop trên Form và Drag sang cửa sổ muốn xem. Làm sao để xảy ra event Form_MouseUp là được.
Tập tin đính kèm
Lay gia pha classname.rar
(7.13 KiB) Đã tải 795 lần


:>

Quay về “[VB] Mẹo vặt khác”

Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.2 khách