Method SendMessage của thư viện user32.dll?
Trang 1 trong tổng số 1 trang
Method SendMessage của thư viện user32.dll?
Mình có đoạn code:
[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
public static int MakeParam(int loWord, int hiWord)
{
return ((hiWord << 0x10) | (loWord & 0xffff));
}
public void click(IntPtr hwnd, Point pos)
{
SendMessage(hwnd, 0x200, IntPtr.Zero, (IntPtr) MakeParam(pos.X, pos.Y));
Thread.Sleep(300);
SendMessage(hwnd, 0x201, IntPtr.Zero, (IntPtr) MakeParam(pos.X, pos.Y));
Thread.Sleep(200);
SendMessage(hwnd, 0x202, IntPtr.Zero, (IntPtr) MakeParam(pos.X, pos.Y));
}
IntPtr hwnd = IntPtr.Zero;
public Point toa_do = new Point(0xf5, 0x106);
this.click(this.hwnd, toa_do);
Mình có 1 số thắc mắc : Muốn hỏi may bạn.
- IntPtr.Zero có nghĩa là gì ?
- Hàm MakeParam có tác dụng gì ? 2 tham số của hàm này có tác dụng gì ?
- Hàm SendMessage có tác dụng gì ? 4 thám số của hàm này có tác dụng gì ?
Nếu mình gọi hàm click như trên thì kết quả sẽ là gì ?
Admin
- Lấy code ở đâu thì phải đọc kỹ chức năng của nó ! (dù đọc tiếng Anh khó)
- Có thể thấy: Các SendMessage trên thay ta "Click" vào điểm với toạ độ cho trước trong cửa sổ cần.
Cụ thể:
+ SendMessage(hwnd, 0x200, IntPtr.Zero, (IntPtr) MakeParam(pos.X, pos.Y)) với hằng 0x200 (WM_MOUSEMOVE) : "Hơ" con trỏ chuột tới vị trí (X,Y)
+ SendMessage(hwnd, 0x201, IntPtr.Zero, (IntPtr) MakeParam(pos.X, pos.Y)) với hằng 0x201 (WM_LBUTTONDOWN) : "Ấn" phím trái chuột xuống tại vị trí (X,Y)
+ SendMessage(hwnd, 0x202, IntPtr.Zero, (IntPtr) MakeParam(pos.X, pos.Y)) với hằng 0x202 (WM_LBUTTONUP) : "Nhả" phím trái chuột ra từ vị trí (X,Y)
- IntPtr.Zero đã được giải thích trên lớp.
- Hàm tự chế MakeParam dùng để trả về số nguyên duy nhất với 2 thành phần X, Y (toạ độ) trong đó (giá trị Y nằm tại 2 byte đầu, giá trị X tại 2 byte cuối)
[DllImport("user32.dll", CharSet=CharSet.Auto)]
private static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
public static int MakeParam(int loWord, int hiWord)
{
return ((hiWord << 0x10) | (loWord & 0xffff));
}
public void click(IntPtr hwnd, Point pos)
{
SendMessage(hwnd, 0x200, IntPtr.Zero, (IntPtr) MakeParam(pos.X, pos.Y));
Thread.Sleep(300);
SendMessage(hwnd, 0x201, IntPtr.Zero, (IntPtr) MakeParam(pos.X, pos.Y));
Thread.Sleep(200);
SendMessage(hwnd, 0x202, IntPtr.Zero, (IntPtr) MakeParam(pos.X, pos.Y));
}
IntPtr hwnd = IntPtr.Zero;
public Point toa_do = new Point(0xf5, 0x106);
this.click(this.hwnd, toa_do);
Mình có 1 số thắc mắc : Muốn hỏi may bạn.
- IntPtr.Zero có nghĩa là gì ?
- Hàm MakeParam có tác dụng gì ? 2 tham số của hàm này có tác dụng gì ?
- Hàm SendMessage có tác dụng gì ? 4 thám số của hàm này có tác dụng gì ?
Nếu mình gọi hàm click như trên thì kết quả sẽ là gì ?
Admin
- Lấy code ở đâu thì phải đọc kỹ chức năng của nó ! (dù đọc tiếng Anh khó)
- Có thể thấy: Các SendMessage trên thay ta "Click" vào điểm với toạ độ cho trước trong cửa sổ cần.
Cụ thể:
+ SendMessage(hwnd, 0x200, IntPtr.Zero, (IntPtr) MakeParam(pos.X, pos.Y)) với hằng 0x200 (WM_MOUSEMOVE) : "Hơ" con trỏ chuột tới vị trí (X,Y)
+ SendMessage(hwnd, 0x201, IntPtr.Zero, (IntPtr) MakeParam(pos.X, pos.Y)) với hằng 0x201 (WM_LBUTTONDOWN) : "Ấn" phím trái chuột xuống tại vị trí (X,Y)
+ SendMessage(hwnd, 0x202, IntPtr.Zero, (IntPtr) MakeParam(pos.X, pos.Y)) với hằng 0x202 (WM_LBUTTONUP) : "Nhả" phím trái chuột ra từ vị trí (X,Y)
- IntPtr.Zero đã được giải thích trên lớp.
- Hàm tự chế MakeParam dùng để trả về số nguyên duy nhất với 2 thành phần X, Y (toạ độ) trong đó (giá trị Y nằm tại 2 byte đầu, giá trị X tại 2 byte cuối)
NguyenThuyPhuong_I12A- Tổng số bài gửi : 35
Join date : 24/02/2012
Age : 38
Đến từ : TP_ Quảng Ngãi
Similar topics
» Sử dụng hàm API Sendmessage để gửi phím bấm tới Notepad
» Tuyển dụng-Quảng cáo
» Thư viện VB!?
» Thảo luận Bài 6
» Thành viên mới
» Tuyển dụng-Quảng cáo
» Thư viện VB!?
» Thảo luận Bài 6
» Thành viên mới
Trang 1 trong tổng số 1 trang
Permissions in this forum:
Bạn không có quyền trả lời bài viết