-
24-04-2014, 12:59 PM #1Junior Member
- 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!
View more random threads:
- Có thể ghi file khi file đang chạy hay không?
- Cách sử dụng rebar trong Win32 API như thế nào?
- Làm sao để ẩn process chương trình trong task manage
- Cách dùng đối tượng semaphore và chia sẽ thông tin giữa các thread?
- Thuật toán Mã Hóa VMAC ?
- Hỏi về sự khác nhau giữa giá trị GetPriorityClass()và PROCESSENTRY32::pcPriClassBase
- Cách thay đổi 1 vùng nhớ bằng hàm VirtualProtect
- Sửa menu ứng dụng khác không cần dll
- Cách phát hiện thread bị suspend bởi 1 chương trình khác?
- Làm thế nào để phát hiện ra là Người dùng đang nhấn phím hay Unikey?
-
24-04-2014, 01:42 PM #2Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
Multithreading .
-
24-04-2014, 03:23 PM #3Junior Member
- Ngày tham gia
- Sep 2015
- Bài viết
- 0
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.
-
27-08-2014, 04:16 PM #4Junior Member
- 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);}
Bạn cũng có thể kết hợp lag để dễ dàng kiếm soát toàn cục hơn.
Không chỉ dừng lại ở việc sử dụng nguyên liệu cao cấp, mỗi công trình còn được "chăm sóc" bằng 4 dịch vụ xuất sắc của Tre Nghệ. Từ việc tư vấn, thiết kế đến thi công và hoàn thiện, mọi quy trình đều...
Chất Lượng và Sáng Tạo: Kiến Trúc...