Trang 1 trên tổng số 3 123 Cuối cùngCuối cùng
Từ 1 tới 10 trên tổng số 26 kết quả

Đề tài: Send mouse click và keys đến 1 object trong app khác

  1. #1
    Ngày gia nhập
    09 2008
    Bài viết
    10

    Mặc định Send mouse click và keys đến 1 object trong app khác

    Mình đang nghiên cứu về việc sendkeys, cũng như mouse click đến app khác.

    http://nt8.upanh.com/b2.s34.d4/a58ab...8.untitled.png

    Như ở hình trên mình muốn click vào cái panel "Download this video" trong cửa sổ IE. Và click xong thì có thể bấm 1 / 2 / 3 / 4 tùy ý để chọn download 1 trong 4 link cho cái video.

    Về cơ sở thì mình dựa trên hướng dẫn từ
    http://www.codeproject.com/Articles/...plication-in-C

    Và code hiện tại của mình:
    Code:
                int iHandle = NativeWin32.FindWindow(null, "IDM agent for click monitoring in IE-based browsers");        
                NativeWin32.SetForegroundWindow(iHandle);
                
                NativeWin32.RECT clientRect = new NativeWin32.RECT();
                NativeWin32.GetWindowRect(new IntPtr(iHandle), out clientRect);
                
                x = (clientRect.left + clientRect.right) / 2;
                y = (clientRect.top + clientRect.bottom) / 2;
                Cursor.Position = new System.Drawing.Point(x, y);
                
                NativeWin32.mouse_event((int)(NativeWin32.MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
                NativeWin32.mouse_event((int)(NativeWin32.MouseEventFlags.LEFTUP), 0, 0, 0, 0);
    Nhưng ko thành công. Nó click ở đâu đâu bên ngoài, và ko click vào cái panel kia. Cái title "IDM agent for click monitoring in IE-based browsers" cũng là do cái demo từ codeproject nó liệt kê ra. Mình ko hiểu có vấn đề gì, hay là phải tìm cách khác để xác định ID cho cái panel đó ?
    Đã được chỉnh sửa lần cuối bởi ramcrys : 09-01-2013 lúc 04:16 PM.

  2. #2
    Ngày gia nhập
    10 2009
    Nơi ở
    gầm cầu
    Bài viết
    156

    kiểm tra lại xem X Y trả về có khớp với tọa độ cần Click trên cái cửa sổ kia ko ? . Làm cái textBox ghi lại tọa độ liên tục khi rê chuột trên khắp màn hình xem cái chỗ cần click mang số mấy ?

  3. #3
    Ngày gia nhập
    09 2008
    Bài viết
    10

    Nhưng mà vậy thì là code cứng, thấy nó hơi kỳ :|
    Ý tưởng của mình là xác định vị trí cái panel đó động để click

    Và dù sao sau khi click xong cũng phải xác định cái menu xổ ra nữa (có thể bấm phím 1, 2, 3... nhưng mà cũng phải biết nó là 360p, 480p gì gì đó mới click chứ ko thì bấm đại ah ) ) Nên nếu xài x, y code cứng thì thấy nó ko hay lắm :(

  4. #4
    Ngày gia nhập
    09 2011
    Bài viết
    129

    [QUOTE=ramcrys;581330]Mình đang nghiên cứu về việc sendkeys, cũng như mouse click đến app khác.

    http://nt8.upanh.com/b2.s34.d4/a58ab...8.untitled.png

    Như ở hình trên mình muốn click vào cái panel "Download this video" trong cửa sổ IE. Và click xong thì có thể bấm 1 / 2 / 3 / 4 tùy ý để chọn download 1 trong 4 link cho cái video.

    Về cơ sở thì mình dựa trên hướng dẫn từ
    http://www.codeproject.com/Articles/...plication-in-C

    Và code hiện tại của mình:
    Code:
                int iHandle = NativeWin32.FindWindow(null, "IDM agent for click monitoring in IE-based browsers");        
                NativeWin32.SetForegroundWindow(iHandle);
                
                NativeWin32.RECT clientRect = new NativeWin32.RECT();
                NativeWin32.GetWindowRect(new IntPtr(iHandle), out clientRect);
                
                x = (clientRect.left + clientRect.right) / 2;
                y = (clientRect.top + clientRect.bottom) / 2;
                Cursor.Position = new System.Drawing.Point(x, y);
                
                NativeWin32.mouse_event((int)(NativeWin32.MouseEventFlags.LEFTDOWN), 0, 0, 0, 0);
                NativeWin32.mouse_event((int)(NativeWin32.MouseEventFlags.LEFTUP), 0, 0, 0, 0);
    Nhưng ko thành công. Nó click ở đâu đâu bên ngoài, và ko click vào cái panel kia. Cái title "IDM agent for click monitoring in IE-based browsers" cũng là do cái demo từ codeproject nó liệt kê ra. Mình ko hiểu có vấn đề gì, hay là phải tìm cách khác để xác định ID cho cái panel đó ?[/QUOT

    Cái title "IDM agent for click monitoring in IE-based browsers" kia là Caption của IE của người viết code trên còn hình của bạn Caption là "Download this video". Bạn thay rùi thử lại đi xem nào

  5. #5
    Ngày gia nhập
    09 2008
    Bài viết
    10

    Không phải bạn ơi "IDM agent for click monitoring in IE-based browsers" là caption của một cái invisible window mà mình tìm ra được từ việc gọi hàm getwindow (tìm child window của desktop)

    Nhấn mạnh là nó liên quan đến window. Gọi getwindow, findwindow các thứ gì đâu có ra cái caption "Download this video" :|, nó chỉ tìm được handle cho 1 cái cửa sổ có caption "IDM agent.." thôi

    Nói chung bạn rảnh thì chạy thử cái demo trong link codeproject mà mình post đi, sẽ hiểu ngay thôi :|

    Với lại, cho phép mình nói thêm là mục đích chính thật ra là click vào cái panel kia -> chọn một cái menuitem trong cái menu xổ ra kia -> click thôi. Mình cũng chưa biết có khi cách code như trên là chưa đúng nữa. Cái phần menu cũng chưa biết làm thế nào nữa đây. Nếu chơi lụi theo kiểu tọa độ X, Y thì làm sao biết text của menuitem (ko biết thì làm sao down đúng, thí dụ 480p)
    Đã được chỉnh sửa lần cuối bởi ramcrys : 09-01-2013 lúc 08:23 PM.

  6. #6
    Ngày gia nhập
    09 2011
    Bài viết
    129

    Mặc định Send mouse click và keys đến 1 object trong app khác

    Trích dẫn Nguyên bản được gửi bởi ramcrys Xem bài viết
    Nhưng mà vậy thì là code cứng, thấy nó hơi kỳ :|
    Ý tưởng của mình là xác định vị trí cái panel đó động để click

    Và dù sao sau khi click xong cũng phải xác định cái menu xổ ra nữa (có thể bấm phím 1, 2, 3... nhưng mà cũng phải biết nó là 360p, 480p gì gì đó mới click chứ ko thì bấm đại ah ) ) Nên nếu xài x, y code cứng thì thấy nó ko hay lắm :(
    Mình code nhanh thử bạn test rùi làm tiếp nhé..mình code tới phần click vào biểu tượng IDM thôi còn phần tiếp theo click tiếp xuối 1,2,3.. thì bạn làm tiếp
    note: web test trang mình viết là http://www.youtube.com/watch?v=8gOMblsiKjw
    Attached Files Attached Files

  7. #7
    Ngày gia nhập
    09 2011
    Bài viết
    129

    Trích dẫn Nguyên bản được gửi bởi ramcrys Xem bài viết
    Không phải bạn ơi "IDM agent for click monitoring in IE-based browsers" là caption của một cái invisible window mà mình tìm ra được từ việc gọi hàm getwindow (tìm child window của desktop)

    Nhấn mạnh là nó liên quan đến window. Gọi getwindow, findwindow các thứ gì đâu có ra cái caption "Download this video" :|, nó chỉ tìm được handle cho 1 cái cửa sổ có caption "IDM agent.." thôi

    Nói chung bạn rảnh thì chạy thử cái demo trong link codeproject mà mình post đi, sẽ hiểu ngay thôi :|

    Với lại, cho phép mình nói thêm là mục đích chính thật ra là click vào cái panel kia -> chọn một cái menuitem trong cái menu xổ ra kia -> click thôi. Mình cũng chưa biết có khi cách code như trên là chưa đúng nữa. Cái phần menu cũng chưa biết làm thế nào nữa đây. Nếu chơi lụi theo kiểu tọa độ X, Y thì làm sao biết text của menuitem (ko biết thì làm sao down đúng, thí dụ 480p)
    Mình nhầm caption của nó vì nó khác với các application thông thường ...mình code đó bạn nghiên cứu nhé. Tuy đến đích muốn của bạn nhưng hướng làm đó mình nghĩ là đúng đấy.

  8. #8
    Ngày gia nhập
    09 2011
    Bài viết
    129

    Trích dẫn Nguyên bản được gửi bởi tientrungkaka Xem bài viết
    Mình code nhanh thử bạn test rùi làm tiếp nhé..mình code tới phần click vào biểu tượng IDM thôi còn phần tiếp theo click tiếp xuối 1,2,3.. thì bạn làm tiếp
    note: web test trang mình viết là http://www.youtube.com/watch?v=8gOMblsiKjw
    sorry bạn mình nhầm chút bạn sửa lại mấy lệnh code cuối thành như sau nhé
    Cursor.Position = new System.Drawing.Point(x, y);
    System.Threading.Thread.Sleep(100);
    mouse_event((int)(0x0002), 0, 0, 0, 0);
    System.Threading.Thread.Sleep(100);
    mouse_event((int)(0x0004), 0, 0, 0, 0);
    Mình đã test thành công nhé nên bạn cứ theo hướng đó mà làm tiếp

  9. #9
    Ngày gia nhập
    09 2008
    Bài viết
    10

    Yeah, thanks bạn nhé Đúng là click ok rồi hehe
    Để mình tìm thêm về vụ menu nữa.

    P/S: ah mà mình quên hỏi cái này nữa. Cái Thread.Sleep có bắt buộc phải gọi ko ? Có phải là do nếu click liên tục thì cái thằng window nhận nó ko xử lý kịp ? Thế nên muốn tạo các event kiểu click - bấm như vậy thì cứ phải nghĩ sleep 1 chút thì mới ok

  10. #10
    Ngày gia nhập
    09 2011
    Bài viết
    129

    Trích dẫn Nguyên bản được gửi bởi ramcrys Xem bài viết
    Yeah, thanks bạn nhé Đúng là click ok rồi hehe
    Để mình tìm thêm về vụ menu nữa.

    P/S: ah mà mình quên hỏi cái này nữa. Cái Thread.Sleep có bắt buộc phải gọi ko ? Có phải là do nếu click liên tục thì cái thằng window nhận nó ko xử lý kịp ? Thế nên muốn tạo các event kiểu click - bấm như vậy thì cứ phải nghĩ sleep 1 chút thì mới ok

    Đúng thế bạn ah.. Window xử lý sự kiện rất nhanh nên nếu ko tạo nhịp cho nó thì đôi lúc sẽ xảy ra lỗi ngay.

Các đề tài tương tự

  1. Chọn 1 mẫu tin trong datagridview để in ấn khi click right mouse
    Gửi bởi t2t2t trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 2
    Bài viết cuối: 20-08-2011, 11:21 PM
  2. Làm sao để click chuột được vào game đã trận các hàm API click mouse
    Gửi bởi khoailamautogame trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 9
    Bài viết cuối: 14-07-2011, 10:30 PM
  3. Xử lý sự kiện mouse click cho hình ảnh trong C#
    Gửi bởi hugo158 trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 7
    Bài viết cuối: 08-03-2011, 12:21 AM
  4. Vấn đề truyền vào tọa độ để mouse click trong SendMessage
    Gửi bởi supertmt trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 2
    Bài viết cuối: 10-05-2010, 11:38 AM
  5. Cần hướng dẫn về sự kiện Mouse Click
    Gửi bởi huunam0241 trong diễn đàn Nhập môn lập trình C#, ASP.NET
    Trả lời: 3
    Bài viết cuối: 07-04-2010, 03:48 PM

Quyền hạn của bạn

  • Bạn không thể gửi đề tài mới
  • Bạn không thể gửi bài trả lời
  • Bạn không thể gửi các đính kèm
  • Bạn không thể chỉnh sửa bài viết của bạn