Chào mừng đến với Diễn đàn lập trình - Cộng đồng lập trình.
Kết quả 1 đến 4 của 4
  1. #1
    Ngày tham gia
    Sep 2015
    Bài viết
    0

    Làm sao để tạm ngừng chương trình sử dụng hook của mình?

    Mình dùng SetWindowsHookEx để hook WH_KEYBOARD trong hàm xử lý hook mình muốn khi người dùng nhấn 1 phím trong chương trình nào đó thì sau đó 5s mình mới gửi xử lý. Mình dùng hàm Sleep(5000) nhưng hàm này nó lại làm cho cái chương trình đang dùng bị đơ ra mất 5s. Đọc trên msdn thì đúng là nó Suspend current thread. Vậy làm sao để chờ 5s mà không bị đơ? Xin chỉ giúp!

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

  3. #3
    Bạn thử cách này: Thêm một biến (không share nếu dùng dll hook) để làm flag, thêm một thread đếm thời gian, khi nào đủ 5s thì enable cái flag. Trong hàm hook, check nếu biến flag là true thì mới xử lý có lẽ là chạy ổn.

  4. #4
    Ngày tham gia
    Sep 2015
    Bài viết
    0
    Cái này mình cũng làm rồi, ý tưởng của mình cũng giống như admin vậy.
    Có thể bạn đã xử lý được nhưng mình muốn chia sẻ để bạn nào khác gặp phải có thể tham khảo.

    Trên dll (nếu bạn dùng dll để hook toàn cục) thì mình có giải pháp:


    Mã:
    HANDLE g_hTimer; void EndTimer(void) {    DeleteTimerQueueTimer(NULL, g_hTimer, INVALID_HANDLE_VALUE);} void CALLBACK TimerCallback(PVOID lpParameter, BOOLEAN reserved) {     // Day la ham lap, he thong se goi lai trong khoang thoi gian thiet lap o ham |StartTimer|     EndTimer();} // Ham bat dau timervoid StartTimer(void) {    PVOID param    = NULL;     DWORD interval = 5000;  // Don vi mili giay    CreateTimerQueueTimer(&g_hTimer, NULL,         TimerCallback, param, interval, interval, 0);}
    Khi bạn ấn một phím thì bạn gọi StartTimer();
    Bạn cũng có thể kết hợp lag để dễ dàng kiếm soát toàn cục hơn.

 

 

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
  •