Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Trang 1 của 2 12 CuốiCuối
Kết quả 1 đến 10 của 11
  1. #1
    Ngày tham gia
    Sep 2015
    Đang ở
    Hà Nội
    Bài viết
    0

    Lấy handle của control khác khi biết class và instance?


  2. #2
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Đây:

    Mã:
    //Get a Window Handle by ClassNameHWND hWndNotepad = FindWindow(_T("notepad"), NULL); //Get a Child Window Handle by ClassNameHWND hWndEditArea = FindWindowEx(hWndNotepad, NULL, _T("Edit"), NULL);

  3. #3
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Vậy có 2, 3,...n instance thì sao? Code trên lấy Handle của instance nào?

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi peterdrew
    Vậy có 2, 3,...n instance thì sao? Code trên lấy Handle của instance nào?
    Sort by top level, it get the first one. The most of cases we are looking for this handle.

  5. #5
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Vậy trong trường hợp ko most of case thì thế nào hả bro?

  6. #6
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Kevin Hoang
    Sort by top level, it get the first one. The most of cases we are looking for this handle.
    Nói chung thì theo Peter thấy thì việc cách làm này không chính xác lắm, đơn giản là các bạn thử làm một app console nhỏ theo ý của Kevin và thực thi sẽ thấy (dùng Spy++ để kiểm tra handle trên các instances of NotePad app). Thật ra thì Peter thấy trở ngại đó (và cũng chưa có phương pháp nào) và có ý thảo luận để tìm ra phương pháp giải quyết bài toán này triệt để hơn thôi.
    Còn đây là code test của Peter theo các ý trên:

    Mã:
    #include <windows.h>#include <stdio.h>  #include <conio.h>  int main()  {      HWND hWndNotepad = FindWindow("notepad", NULL);    HWND hWndEditArea = FindWindowEx(hWndNotepad, NULL, "Edit", NULL);    printf("%x",hWndEditArea);    getch();    return 0;}
    Trước khi run nó các bạn tạo luôn 2 instances thằng NotePad, bắt đầu run thấy nó đúng trả về Handle của instance đầu tiên. Tạo tiếp một instance nữa, lần này run chúng ta lại thấy nó trả về Handle của instance vừa tạo.???

  7. #7
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi kyo_pyro
    Vậy trong trường hợp ko most of case thì thế nào hả bro?
    Sử dụng EnumWindows hoặc EnumDesktopWindows bạn sẽ lấy được tất cả các Window Handles bạn muốn, kết hợp với GetWindowLong hoặc GetWindowThreadProcessId sẽ giúp bạn nhiều điều đấy.

    Trích dẫn Gửi bởi peterdrew
    Nói chung thì theo Peter thấy thì việc cách làm này không chính xác lắm, đơn giản là các bạn thử làm một app console nhỏ theo ý của Kevin và thực thi sẽ thấy (dùng Spy++ để kiểm tra handle trên các instances of NotePad app). Thật ra thì Peter thấy trở ngại đó (và cũng chưa có phương pháp nào) và có ý thảo luận để tìm ra phương pháp giải quyết bài toán này triệt để hơn thôi.
    Còn đây là code test của Peter theo các ý trên:

    Mã:
    #include <windows.h>#include <stdio.h>  #include <conio.h>  int main()  {      HWND hWndNotepad = FindWindow("notepad", NULL);    HWND hWndEditArea = FindWindowEx(hWndNotepad, NULL, "Edit", NULL);    printf("%x",hWndEditArea);    getch();    return 0;}
    Trước khi run nó các bạn tạo luôn 2 instances thằng NotePad, bắt đầu run thấy nó đúng trả về Handle của instance đầu tiên. Tạo tiếp một instance nữa, lần này run chúng ta lại thấy nó trả về Handle của instance vừa tạo.???
    Nó lấy ra cửa sổ trên nhất, không phân biệt chạy trước hay chạy sau đâu.

  8. #8
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi Kevin Hoang
    Sử dụng EnumWindows hoặc EnumDesktopWindows bạn sẽ lấy được tất cả các Window Handles bạn muốn, kết hợp với GetWindowLong hoặc GetWindowThreadProcessId sẽ giúp bạn nhiều điều đấy.
    Thấy một số tài liệu cũng nói đến vấn đề này giống như cậu viết, Peter nghiên cứu thêm để có thể chính xác hóa vấn đề hơn!

    Trích dẫn Gửi bởi Kevin Hoang
    Nó lấy ra cửa sổ trên nhất, không phân biệt chạy trước hay chạy sau đâu.
    Cũng chưa hiểu cửa sổ trên nhất theo ý của Kevin là như thế nào nữa?! Nhưng 2 intance đầu tiên thì nó lấy instance đầu tiên nhất; thêm instance thứ 3 thì nó lại lấy instance của cái thứ 3 này.???? Vậy cái nào là trên nhất? (2 instances đầu thì instance 1 là trên nhất? Còn 3 instances thì instance 3 là trên nhất?).

  9. #9
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Em hiểu ý bác kevin, có phải là cái trên nhất giống như kiểu layer trên cùng trong pts đúng ko [IMG]images/smilies/biggrin.png[/IMG].
    Nhưng nếu mình dùng enumwindow để tạo danh sách cửa sổ, trong trường hợp muốn lấy cái instance đằng sau thì làm sao để biết cái mình cần là gì hả bác?

  10. #10
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Trích dẫn Gửi bởi kyo_pyro
    Em hiểu ý bác kevin, có phải là cái trên nhất giống như kiểu layer trên cùng trong pts đúng ko [IMG]images/smilies/biggrin.png[/IMG].
    Nhưng nếu mình dùng enumwindow để tạo danh sách cửa sổ, trong trường hợp muốn lấy cái instance đằng sau thì làm sao để biết cái mình cần là gì hả bác?
    Bạn hiểu đúng rồi, nhưng Kevin cũng nhắc một chút là: Không có nghĩa rằng cửa sổ trên nhất là cửa sổ làm việc.

    Nếu có một danh sách rồi, bạn nghĩ là sẽ làm gì? Sao không đem chia cho anh em cộng đồng C Việt mỗi người một cửa sổ nhỉ? [IMG]images/smilies/clap_grin.gif[/IMG][IMG]images/smilies/lick.gif[/IMG]

 

 
Trang 1 của 2 12 CuốiCuối

Quyền viết bài

  • Bạn Không thể gửi Chủ đề mới
  • Bạn Không thể Gửi trả lời
  • Bạn Không thể Gửi file đính kèm
  • Bạn Không thể Sửa bài viết của mình
  •