Программирование >>  Перегруженные имена функций и идентификаторы 

1 ... 156 157 158 [ 159 ] 160 161 162 ... 210


NotIconD.hIcon=LoadIcon(hInst, MAINICON );

lstrcpyn(NotIconD.szTip,pszTip,sizeof(NotIconD.szTip)); Shell NotifyIcon(NIM ADD,&NotIconD);

Для корректной работы функции предварительно нужно определить уникальный номер значка (параметр NotlconD.uID) и его сообщение (параметр NotlconD.uCallbackMessage). Делаем это в области определения глобальных переменных:

#define MYWM NOTIFY (WM APP+100) #define IDC MYICON 1006

Сообщение значка будет обрабатываться в оконной процедуре главного окна (NotIconD.hWnd=MainWnd):

case MYWM NOTIFY:

if(lParam==WM RBUTTONUP) PostQuitMessage(0);

break; Правый щелчок на значке - завершаем

Этот код просто завершает работу приложения по щелчку правой кнопкой мыши на значке.

При завершении работы значок надо удалить:

void vfResetTrayIcon() { Удаляем значок

Shell NotifyIcon(NIM DELETE,&NotIconD);

Установка и снятие ловушек

Для получения доступа в функциям ловушки надо определить указатели на эти функции:

LRESULT CALLBACK ( stdcall *pKeybHook)(int,WPARAM,LPARAM);

LRESULT CALLBACK ( stdcall *pMouseHook)(int,WPARAM,LPARAM);

После этого спроецируем написанную DLL на адресное пространство процесса:

hLib=LoadLibrary( SSHook.dll );

(hLib описан как HINSTANCE hLib)

После этого мы должны получить доступ к функциям ловушек:

(void*)pKeybHook=GetProcAddress(hLib, KeyboardHook ); (void*)pMouseHook=GetProcAddress(hLib, MouseHook );



Теперь всё готово к постановке ловушек. Устанавливаются они с помощью функции SetWindowsHookEx:

hKeybHook=SetWindowsHookEx(WH KEYBOARD,(HOOKPROC)(pKeybHook),h

Lib,0);

hMouseHook=SetWindowsHookEx(WH MOUSE,(HOOKPROC)(pMouseHook),

hLib,0);

(hKeybHook и hMouseHook описаны как HHOOK hKeybHook; HOOK hMouseHook;)

Первый параметр - тип ловушки (в данном случае первая ловушка для клавиатуры, вторая - для мыши). Второй - адрес процедуры ловушки. Третий - описатель DLL-библиотеки. Последний параметр - идентификатор потока, для которого будет установлена ловушка. Если этот параметр равен нулю (как в нашем случае), то ловушка устанавливается для всех потоков.

После установки ловушек они начинают работать. При завершении работы приложения следует их снять и отключить DLL. Делается это так:

UnhookWindowsHookEx(hKeybHook); UnhookWindowsHookEx(hMouseHook); Завершаем FreeLibrary(hLib);

Функция WinMain

Последний этап - написание функции WinMain в которой будет создаваться главное окно, устанавливаться значок в системную область панели задач, ставиться и сниматься ловушки. Код её должен быть примерно такой:

WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow)

MSG msg;

----------------

hLib=LoadLibrary( SSHook.dll );

if(hLib)

(void*)pKeybHook=GetProcAddress(hLib, KeyboardHook ); hKeybHook=SetWindowsHookEx(WH KEYBOARD,(HOOKPROC)(pKeybHook),

hLib,0); Ставим ловушки (void*)pMouseHook=GetProcAddress(hLib, MouseHook ); hMouseHook=SetWindowsHookEx(WH MOUSE,(HOOKPROC)(pMouseHook),



hLib,0);

-------------------------------if (InitApplication(hInstance,nCmdShow)) Если создали главное окно

vfSetTrayIcon(hInstance); Установили значок

while (GetMessage(&msg,(HWND)(NULL),0,0))

{ Цикл обработки сообщений

TranslateMessage(&msg);

DispatchMessage(&msg);

--------- Всё - финал

UnhookWindowsHookEx(hKeybHook); Снимаем ловушки UnhookWindowsHookEx(hMouseHook); FreeLibrary(hLib); Отключаем DLL vfResetTrayIcon(); Удаляем значок return 0;

return 1;

После написания этой функции можно смело запускать полностью готовое приложение.



1 ... 156 157 158 [ 159 ] 160 161 162 ... 210

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика