• 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

Tìm hWnd và Tiêu đề cửa sổ của Process

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
truongphu
VIP
VIP
Bài viết: 4755
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 509 time

Tìm hWnd và Tiêu đề cửa sổ của Process

Gửi bàigửi bởi truongphu » T.Sáu 14/08/2009 3:30 pm

Thủ thuật: Tìm hWnd và Tiêu đề cửa sổ của Process
Tác giả: truongphu
Mô tả: Tìm hWnd của Process. (Chẳng biết bài tương tự có chưa? nhưng thấy có câu hỏi "Lấy tiêu đề các process đang hoạt động" ...)


* Phần VBS tìm Process ID
* Phần VB6 tìm hWnd

Mã: Chọn hết

  1. Option Explicit
  2.  
  3. Public strCache As String
  4. Private Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
  5. Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
  6. Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
  7. Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwprocessid As Long) As Long
  8. Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
  9. (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
  10. Const WM_GETTEXTLENGTH = &HE:  Const WM_GETTEXT = &HD: Const GW_HWNDNEXT = 2
  11.  
  12. Private Sub Command1_Click()
  13.     GetIPProcess
  14. End Sub
  15.  
  16. Private Sub GetIPProcess() ' VBScript tìm Process ID
  17. Dim objProcess, objProcesses
  18. Set objProcesses = GetObject("winmgmts://").execquery("Select * from win32_process")
  19. ' truongphu, camlâm, khanhhoa
  20.     For Each objProcess In objProcesses
  21.         If UCase(objProcess.Name) = Text1.Text Then strCache = objProcess.Handle
  22.     Next
  23.  
  24. If strCache = "" Then
  25.     MsgBox "Không Tìm Thâ'y."
  26. Else
  27.     FindhWnd
  28. End If
  29.  
  30. End Sub
  31.  
  32. Private Sub FindhWnd()
  33. Dim hProcess As Long, hWndApp As Long
  34.     hProcess = CLng(strCache)
  35.     hWndApp = GetWinHandle(hProcess)
  36. If hWndApp <> 0 Then MsgBox "hWnd là: " & hWndApp & " Tiêu Ðê' là: " & WinGetText(hWndApp)
  37. End Sub
  38.  
  39. Function ProcIDFromWnd(ByVal hwnd As Long) As Long
  40. Dim idProc As Long
  41.     GetWindowThreadProcessId hwnd, idProc
  42.     ProcIDFromWnd = idProc
  43. End Function
  44.  
  45. Function GetWinHandle(hProcess As Long) As Long
  46. Dim tempHwnd As Long
  47. tempHwnd = FindWindow(vbNullString, vbNullString)
  48.  
  49.     Do Until tempHwnd = 0
  50.         If GetParent(tempHwnd) = 0 And (hProcess = ProcIDFromWnd(tempHwnd)) Then
  51.                 GetWinHandle = tempHwnd
  52.                 Exit Do
  53.         End If
  54.         tempHwnd = GetWindow(tempHwnd, GW_HWNDNEXT)
  55.     Loop
  56. End Function
  57.  
  58. Function WinGetText(hwnd As Long) As String
  59. On Error Resume Next
  60.     Dim length&, result&, strtmp$, S As Variant
  61.     length& = SendMessage(hwnd, WM_GETTEXTLENGTH, ByVal 0, ByVal 0) + 1
  62.     strtmp$ = Space$(length)
  63.     result& = SendMessage(hwnd, WM_GETTEXT, ByVal length, ByVal strtmp)
  64.     S = Split(strtmp, vbNullChar)
  65.     WinGetText$ = S(0)
  66. End Function
  67.  
  68. Private Sub Form_Load()
  69. Text1.Text = "NOTEPAD.EXE"
  70. Shell "Notepad"
  71. End Sub
  72.  
Tập tin đính kèm
Tìm hWnd cua Process.rar
(1.94 KiB) Đã tải 651 lần


o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

b0y.h4ck3r
Thành viên chính thức
Thành viên chính thức
Bài viết: 22
Ngày tham gia: T.Ba 29/07/2008 9:47 am

Re: Tìm hWnd và Tiêu đề cửa sổ của Process

Gửi bàigửi bởi b0y.h4ck3r » T.Bảy 15/08/2009 1:24 pm

nếu có 2 process trùng tên thì nó lấy cái nào hả bác ?

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4755
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 509 time

Re: Tìm hWnd và Tiêu đề cửa sổ của Process

Gửi bàigửi bởi truongphu » T.Bảy 15/08/2009 2:23 pm

b0y.h4ck3r đã viết:nếu có 2 process trùng tên thì nó lấy cái nào


Nó sẽ lấy process mới chạy
Tắt Process mới chạy, đương nhiên nó sẽ lấy process đầu tiên
Bạn thực nghiệm sẽ thấy ngay, ví dụ gọi FRECELL, gọi New game (F2)
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

Hình đại diện của người dùng
truongphu
VIP
VIP
Bài viết: 4755
Ngày tham gia: CN 04/11/2007 10:57 am
Đến từ: Cam Đức, Khánh hòa
Has thanked: 13 time
Been thanked: 509 time

Re: Tìm hWnd và Tiêu đề cửa sổ của Process

Gửi bàigửi bởi truongphu » T.Bảy 15/08/2009 4:34 pm

Code sau đây cho phép lấy hết các process

* bỏ dòng 3: Public strCache As String
* thế 2 sub sau:

Mã: Chọn hết

  1. Private Sub GetIPProcess() ' VBScript tìm Process ID
  2. Dim objProcess, objProcesses, b As Boolean, strCache() As String
  3. Set objProcesses = GetObject("winmgmts://").execquery("Select * from win32_process")
  4. ' truongphu, camlâm, khanhhoa
  5.     For Each objProcess In objProcesses
  6.         If UCase(objProcess.Name) = Text1.Text Then
  7.             Dim x As Byte: If b = False Then x = 0 Else x = UBound(strCache)
  8.             ReDim Preserve strCache(x + 1)
  9.             strCache(x) = objProcess.Handle
  10.             b = True
  11.         End If
  12.     Next
  13.  
  14. If b = False Then
  15.     MsgBox "Không Tìm Thâ'y."
  16. Else
  17.     For x = 0 To UBound(strCache) - 1
  18.         FindhWnd (strCache(x))
  19.     Next
  20. End If
  21.  
  22. End Sub
  23.  
  24. Private Sub FindhWnd(h As String)
  25. Dim hProcess As Long, hWndApp As Long
  26.     hProcess = CLng(h)
  27.     hWndApp = GetWinHandle(hProcess)
  28. If hWndApp <> 0 Then MsgBox "hWnd là: " & hWndApp & " Tiêu Ðê' là: " & WinGetText(hWndApp)
  29. End Sub
o0o--truongphu--o0o

.........
Ghé thăm:
Chuyện Linh Tinh

tai_computer
Thành viên chính thức
Thành viên chính thức
Bài viết: 27
Ngày tham gia: T.Bảy 15/08/2009 11:03 am
Has thanked: 1 time

Re: Tìm hWnd và Tiêu đề cửa sổ của Process

Gửi bàigửi bởi tai_computer » T.Hai 23/11/2009 3:09 pm

Thanks bác Phú nha :)

Chúc bác vui ve !


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.1 khách