Từ 1 tới 6 trên tổng số 6 kết quả

Đề tài: Cần giúp đỡ về FindWindow, SendMessageA

  1. #1
    Ngày gia nhập
    04 2008
    Nơi ở
    hcm.fpt.vn
    Bài viết
    4

    Mặc định Cần giúp đỡ về FindWindow, SendMessageA

    Xin chào các bạn, tôi là người mới toanh ở đây. Tôi vô tình search và thấy diễn đàn này. Tôi thấy rất thú vị khi đọc những bài viết ở đây.

    Thú thật là có kẹt ở chỗ nào đó thì tôi mới hỏi han các bạn.

    Mô tả: Tôi cần một ứng dụng đạt các yêu cầu sau
    1. Chạy nền.
    2. Bắt "một số" các keystroke để kích hoạt function thực thi mục 3
    3. Gởi keystroke khác (điều chỉnh được) đến một cửa sổ (ứng dụng) nhất định, Có thể ứng dụng này đang chạy nền hoặc không được focus (inactive).

    Xử lý các yêu cầu:
    1. Không thành vấn đề
    2. Dùng low level kbhook là xong
    3. Có thể dùng SendMessageA đến một Hwnd nào đó. Hwnd này có thể xác định bằng Findwindow

    Hiện giờ tôi đang kẹt lại ở yêu cầu thứ 3.
    Khó khăn:
    -Có NHIỀU cửa sổ trùng tên. Các cửa sổ này được chạy từ 1 file EXE duy nhất. Và gởi keystroke cần gởi đến CHÍNH XÁC 1 cửa sổ xác định.
    -Tôi chưa nắm bắt cấu trúc, cách sự dụng SendMessageA để send 1 keystroke.

    Hiện giờ tôi định xử lý như sau:
    Tìm tất cả các cửa sổ, ứng dụng đích. Gán chúng vào một mảng chứa Hwnd này. Xác định các cửa sổ đó dựa trên số thứ tự của mảng chứa Hwnd.
    Dùng lệnh SendMessageA để gởi đi keystroke đến Hwnd cần.

    Có thể bạn sẽ thắc mắc, làm gì mà phức tạp thế. Tình hình là như vầy:
    Hiện giờ game online rất thịnh hành và máy tính của chúng ta ngày càng mạnh, do đó 1 người chơi có thể sẽ "log" 1 lần đến 4-5 account cùng 1 lúc, thậm chí có người log đến 10 account . Tình trạng này xảy ra khi hiện giờ nhiều game online nở rộ, người chơi bị phân tán và các game bị chia bớt thành ra không thể kiếm bạn đi chung hỗ trợ để vào "party".

    Do log nhiều account đi chung với nhau, nhiều lúc đòi hỏi cả 2 account phải cùng "đánh" hoặc "heal" hỗ trợ. Dù máy có mạnh đến đâu, khi switch giữa các account có thể sẽ gây ra đứng máy vài giây. Mà chậm vài giây thì điều xảy ra sẽ = [số giây] lần tệ hại, kết quả là "về làng gần nhất" hết cả đám. Điều gây ra "đứng máy" như thế là do physic Memory không đủ, phải sử dụng Virtual Memory (page file), vấn đề này có lẽ không cần bàn.

    Có thể bạn sẽ không vừa lòng với cách chơi nhiều account cùng lúc thế. Như thế là không công bằng, gian lận ... blah blah ... Cái đó thuộc về cách nhìn nhận của các bạn. Đơn giản là như họ có 10 máy tính, họ thích dùng 10 máy đó log 10 account mà để 9 account đi theo 1 account duy nhất, rồi họ điều khiển 1 account thôi thì sao. Thế đâu khác gì log 10 account ở một máy duy nhất. Vấn đề này cũng không cần bàn nhiều. Mà dù sao, với một máy tính trung bình giờ vẫn log được 2-3 account là thường.

    Đó là lý do tại sao tôi nảy ra ý tưởng viết chương trình này.

    Mong các bạn góp ý. Và các bạn vui lòng chỉ góp ý hướng code thôi, không góp ý về cách chơi hay là về các vấn đề khác liên quan đến "fair" or "unfair".

    Xin cảm ơn các bạn.
    Chúc các bạn một ngày vui vẻ.

    ps: Xin lỗi, vì có thể tôi post lộn box.

  2. #2
    Ngày gia nhập
    07 2007
    Nơi ở
    Hồ Chí Minh
    Bài viết
    66

    Findwindow, FindWindowEx có thể tìm window dựa trên 2 thông tin
    Class Name, Va Title.
    Với nhu cầu là tìm tất cả các cửa sổ game như thế thì mình nghĩ các cửa sổ đó có chung 1 class name, vì thể có thể tham khảo thêm hàm FindWindowEx để tiến hành liệt kê.

    CÓ thể xài Capture và Getwindowfrom point để lấy dc HWND của cửa sổ.
    ....
    Thèm khát con gái !!
    ......................

  3. #3
    Ngày gia nhập
    04 2008
    Nơi ở
    hcm.fpt.vn
    Bài viết
    4

    thank you!

    Hiện giờ mình cần viết code để liệt kê lấy ra 1 danh sách HWND của các cửa sổ game đã.
    Class name thì biết được rồi, dùng spy++ là xong.
    Giờ thì tự nghiên cứu và google ...
    Có lẽ đây là bước khó khăn, vì kỹ thuật này mình chưa tiếp cận bao giờ.
    Đã được chỉnh sửa lần cuối bởi 1413 : 06-04-2008 lúc 02:23 AM.
    Đu dây điện...

  4. #4
    Ngày gia nhập
    04 2008
    Nơi ở
    hcm.fpt.vn
    Bài viết
    4

    Sử dụng code sau để lấy hwnd của 1 loại cửa sổ nào đó:

    C++ Code:
    1. HWND hWnd=NULL;
    2. do
    3. {
    4. hWnd = ::FindWindowEx(NULL,hWnd,T_("Class_name"),NULL);
    5.  
    6. //
    7. //your code here
    8. //
    9.  
    10. }
    11. while (hWnd)

    Vui lòng cho code vào tag code
    Đã được chỉnh sửa lần cuối bởi Kevin Hoang : 10-04-2008 lúc 02:10 AM. Lý do: Nhắc nhở hoài
    Đu dây điện...

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

    Mình nghĩ bạn dùng thử "CallWndProc" xem sao ?! Thông qua "CallWndProc để lấy toàn bô HWND!

    C++ Code:
    1. DWORD dwStyle = GetWindowLong(lpCwpStruct->hwnd,GWL_STYLE);
    2. DWORD dwExStyle = GetWindowLong(lpCwpStruct->hwnd,GWL_EXSTYLE);
    3.  
    4. // Check xem là window hay child window
    5. if(((dwExStyle & WS_EX_WINDOWEDGE) == WS_EX_WINDOWEDGE) && ((dwStyle & (WS_CAPTION|WS_MINIMIZEBOX|WS_SYSMENU)) == (WS_CAPTION|WS_MINIMIZEBOX|WS_SYSMENU)) && (GetParent(lpCwpStruct->hwnd) == 0))
    6. {
    7.         // Là window -> làm gì tùy bạn, vì đả có HWND (lpCwpStruct->hwnd)
    8.         // (Lấy tittle của nó,...)
    9. }

    Trước đây mình làm Transparency cho toàn bộ các Wnd trong windows bằng cách này! Không biết dùng trong trường hợp của bạn có đc ko?!

  6. #6
    Ngày gia nhập
    04 2008
    Nơi ở
    hcm.fpt.vn
    Bài viết
    4

    Mặc định Cần giúp đỡ về FindWindow, SendMessageA

    à, cái mình cần là chỉ một số HWND của một số cửa sổ nhất định thôi, không phải lấy toàn bộ.

    Nếu lấy toàn bộ thì phải lọc ra một lần nữa cái nào là cái mình cần. Cách này phiền hơn.

    Đoạn code trên mình tìm ra hoạt động tốt, bắt được đúng cái mình cần.

    Hiện giờ thì đã được 1/2 code của giao diện (code hiển thị danh sách các cửa sổ, danh sách các key cần bắt, các key cần gởi). Sau đó là viết cái hook nữa là ổn. Nhưng vừa tức thì mình nảy ra ý tưởng mới có lẽ thay đổi thiết kế giao diện ban đầu, và có thể code lại hoàn toàn phần xử lý giao diện.

    Hhmm, có lẽ nên cứ code theo hướng ban đầu đã, code xong rồi code lại theo hướng khác rồi so sánh xem cái nào tốt hơn nhỉ.

    Mình bật mí một tí là mình cần bắt HWND của các cửa sổ Lineage II đấy
    Đu dây điện...

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

  1. Algorithm Lỗi method 'FindWindow' has no implementation (no RVA) trong API findwindow
    Gửi bởi pimpim_kute trong diễn đàn Thắc mắc lập trình C#
    Trả lời: 4
    Bài viết cuối: 13-07-2012, 07:24 AM
  2. Sử dụng hàm ExitWindowsEx, FindWindow như thế nào
    Gửi bởi kurobakaito trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 2
    Bài viết cuối: 12-01-2011, 06:22 PM
  3. Bắt HWND của cửa sổ vừa tạo ra không dùng FindWindow
    Gửi bởi Cpro trong diễn đàn Windows API, Hooking, xử lý Windows Message
    Trả lời: 1
    Bài viết cuối: 22-07-2009, 09:16 PM
  4. FindWindow chỉ tìm được cửa sổ có classname đầu tiên thôi ah??
    Gửi bởi Cpro trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 1
    Bài viết cuối: 14-01-2009, 12:56 AM
  5. Sử dụng hàm FindWindow trong VC++?
    Gửi bởi AlexF trong diễn đàn Thắc mắc lập trình Visual C++
    Trả lời: 3
    Bài viết cuối: 28-09-2008, 04:53 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