Danh mục

Hướng dẫn viết một chương trình chạy nền t

Số trang: 7      Loại file: pdf      Dung lượng: 161.68 KB      Lượt xem: 12      Lượt tải: 0    
10.10.2023

Xem trước 2 trang đầu tiên của tài liệu này:

Thông tin tài liệu:

Để ứng dụng có thể nhận và xử lý sự kiện I/O ở mọi tình huống (ngay cả khi ứng dụng khác đang chạy), bạn phải dùng kỹ thuật câu móc (Hooks) hàm xử lý sự kiện tương ứng vào Windows, hàm được câu móc cấp toàn hệ thống phải được đặt trong thư viện liên kết động *.dll. Như vậy ứng dụng xử lý phím nóng (hot-key) của bạn gồm 2 module: • file thư viện *.dll chứa hàm xử lý phím nóng và các hàm câu móc/gỡ ra. • file ứng dụng chứa các hàm chức năng...
Nội dung trích xuất từ tài liệu:
Hướng dẫn viết một chương trình chạy nền t Hướng dẫn viết một chương trình chạy nền Hỏi: Xin hướng dẫn viết một chương trình chạy nền, khi nhấn tổ hợp phím thì chạy một đoạn code và nhấn tổ hợp phím khác thì dừng lại. Khi đang chạy một chương trình khác thì làm sao chương trình của tôi nhận được sự kiện nhấn tổ hợp phím?Đáp:Để ứng dụng có thể nhận và xử lý sự kiện I/O ở mọi tình huống (ngay cả khi ứng dụng khácđang chạy), bạn phải dùng kỹ thuật câu móc (Hooks) hàm xử lý sự kiện tương ứng vàoWindows, hàm được câu móc cấp toàn hệ thống phải được đặt trong thư viện liên kết động *.dll.Như vậy ứng dụng xử lý phím nóng (hot-key) của bạn gồm 2 module:• file thư viện *.dll chứa hàm xử lý phím nóng và các hàm câu móc/gỡ ra.• file ứng dụng chứa các hàm chức năng mà sẽ được chạy/dừng khi tổ hợp phím tương ứng đượcấn.Sau đây là qui trình cụ thể để xây dựng 2 module bằng ngôn ngữ VC++ của Microsoft.Để xây dựng thư viện KeyHook.dll chứa hàm chặn tổ hợp phím nóng mong muốn, bạn hãy tiếnhành các bước sau đây:1. Chạy ứng dụng VC++ (phải cài đặt trước), chọn menu File.New.Projects, chọn loại Win32Dynamic-link Library, chọn vị trí Location, nhập tên Project là KeyHook, ấn button Ok.2. Chọn checkbox A simple DLL project rồi chọn button Finish để tạo Project thực sự.3. Chọn menu File.New.Files, chọn loại C/C++ Header File, nhập tên KeyHook.h vào mục Filename, ấn button Ok rồi viết đặc tả 2 hàm câu/gỡ hook như sau vào file KeyHook.h:#include stdafx.h//hàm câu móc hàm xử lý phím vào Windowsint FAR InstallHookKeyboard(HWND hWnd);//hàm gỡ hàm xử lý phím ra khỏi Windowsint FAR UninstallHookKeyboard(void);4. Chọn menu File.New.Files, chọn loại Text File, nhập tên KeyHook.def vào mục File name, ấnbutton Ok rồi viết đặc tả thư viện *.dll như sau vào file KeyHook.def:LIBRARY KeyHookEXETYPE WINDOWSCODE PRELOAD MOVABLEDATA PRELOAD SINGLEHEAPSIZE 8192STACKSIZE 8192EXPORTS InstallHookKeyboard @2 UninstallHookKeyboard @35. Chọn tab FileView ở dưới cửa sổ cây Project (thường nằm bên trái màn hình VC++), mở rộngnội dung của nhánh Source Files, nhấn đúp chuột vào file KeyHook.cpp để hiển thị nội dung củanó rồi hiệu chỉnh thành nội dung như sau://------------------------------// Nội dung file KeyHook.cpp//------------------------------#include stdafx.h#include KeyHook.h//định nghĩa các message cần dùng#define WM_MYSTART (WM_USER+1)#define WM_MYEND (WM_USER+2)//định nghĩa các biến cần dùngHWND hMyWnd;int fHookKeyboard;HANDLE hHookKeyboard;HINSTANCE hModuleDll;//------------------------------//Hàm khởi động của thư viện,//hàm này được kích hoạt tự động mỗi khi//thư viện được link với ứng dụng.//------------------------------BOOL APIENTRY DllMain(HINSTANCE hModule, ULONG ulReason, PCONTEXT pctx) { switch (ulReason) { case DLL_PROCESS_ATTACH: if (hModuleDll==0) hModuleDll= hModule; break; case DLL_PROCESS_DETACH: UninstallHookKeyboard(); break; } return TRUE;}//------------------------------// Hàm xử lý sự kiện phím//------------------------------LRESULT FAR PASCAL CALLBACK KeyboardProc (int nCode, WPARAM wParam,LPARAM lParam) {short FAlt,FControl, FShift; if (nCode >= 0 && nCode != HC_NOREMOVE && lParam >0) { //xác định trạng thái các phím điều khiển FShift = GetKeyState(VK_SHIFT); FAlt = GetKeyState(VK_MENU); FControl = GetKeyState(VK_CONTROL); //kiểm tra tổ hợp phím Ctrl-S if (FControl < 0 && wParam == S) { //gởi thông báo WM_MYSTART về ứng dụng xử lý SendMessage(hMyWnd, WM_MYSTART,wParam, (LPARAM)lParam); return CallNextHookEx((struct HHOOK__ *)hHookKeyboard, nCode, wParam, lParam); } if (FControl < 0 && wParam == E) { //gởi thông báo WM_MYEND về ứng dụng xử lý SendMessage(hMyWnd, WM_MYEND,wParam, (LPARAM)lParam); return CallNextHookEx((struct HHOOK__ *)hHookKeyboard, nCode, wParam, lParam); } } return CallNextHookEx((struct HHOOK__ *)hHookKeyboard, nCode, wParam, lParam);}//------------------------------// Hàm câu móc hàm xử lý keyboard vào Windows//------------------------------int FAR InstallHookKeyboard(HWND hWnd) { if (fHookKeyboard) return 1; hHookKeyboard = SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc, hModuleDll, 0); if (hHookKeyboard == NULL) { MessageBox(NULL,Cant set Hook KeyboardProc,Error,MB_OK); return 0; } hMyWnd = hWnd; fHookKeyboard = 1; return 1;}//------------------------------// Hàm gỡ hàm xử lý keyboard//------------------------------int FAR UninstallHookKeyboard(void) { if (fHookKeyboard==0) return 0; fHookKeyboard = 0; return UnhookWindowsHookEx((struct HHOOK__ *)hHookKeyboard);}6. Chọn menu Build. Set Active Configuration, chọn mục Win32 Release, ấn button Ok.7. Chọn menu Build.Rebuild All để dịch Project thành file thư viện. Nếu bạn nhập đúng các nộidung trên thì quá trình dịch sẽ không có lỗi, trong Project sẽ có thư mục Release, trong thư mụcnày sẽ có nhiều file được tạo ra, trong đó bạn hãy quan sát 2 file tên là KeyHook.dll vàKeyHook.lib, bạn sẽ copy 2 file này vào thư mục ứng dụng sẽ được viết trong giai đoạn 2 sauđây.Để xây dựng ứng dụng KeyHookDemo xử lý chức năng theo tổ hợp phím nóng, bạn hãy tiếnhành các bước sau đây:1. Chạy ứng dụng VC++, chọn menu File.New.Projects, chọn loại Win32 Application, chọn vị tríLocation, nhập tên Project là KeyHookDemo, ấn button Ok.2. Chọn checkbox A simple application rồi chọn button Finish để tạo Project thực sự.3. Copy 2 file đặc tả thư viện KeyHook.dll và KeyHook.lib vào thư mục ứng dụng (do Projecthiện hành quản lý).4. Chọn menu File.New.Files, chọn loại C/C++ Source File, nhập tên KeyHookDemo.cpp vàomục File name, ấn button Ok rồi viết đoạn code xử lý sau vào file KeyHookDemo.cpp:#include //khai báo các hàm trong thư viện KeyHook.dllint FAR Instal ...

Tài liệu được xem nhiều: