Очередь асинхронных сообщений Очередь синхронных сообщений Очередь ввода PostMessage SendMessage Аппаратные сообщения WH_JOURNALRECORD GetMessage WH_GETMESSAGE.

Презентация:



Advertisements
Похожие презентации
1 Программирование на языке Си++. Модуль 9. ИСПОЛЬЗОВАНИЕ Microsoft Developer Studio Интерфейс Developer Studio (Мастерской разработчика) Создание консольного.
Advertisements

Защита от взлома Лекция 10Защита от взлома Лекция 10.
Исполняемые файлы(PE–файлы/Portable Executable File/) ОБМЕН ДАННЫМИ МЕЖДУ ПРОЦЕССАМИ (продолжение) Исполняемые файлы (.exe,.dll,.ocx и т.д.) - файлы образа.
Разработка программных средств в C++Builder с использованием диаграммы классов.
1 A + B Операнд 1Операнд 2 Оператор Что такое выражение (expression) ? Что такое инструкция (statement) ? Операторы int max = (a > b) ? a : b;
WinCC Работа и мониторинг Siemens AG All rights reserved.© TC Nbg.-M Date: File: E04ODKe.PPT Catalog: EWINCC ODK - WinCC - API.
Test 10 Вопрос 1. public class Test implements Iterator { // 1 private List list = new ArrayList (); // 2 public void addList(T... ts) { Collections.addAll(list,
1. Классы ООП 1.Наследование 2.Инкапсуляция 3.Полиморфизм.
Test 6 Вопрос 1. Как можно уничтожить объект в Java? a)присвоить null всем ссылкам на объект b)вызвать Runtime.getRuntime().gc() c)вызвать метод finalize()
ЛЕКЦИЯ 4 ОПЕРАТОРЫ.
Часть II. Формальное описание языков программирования ( Формальная спецификация формальных языков ) Приложение. Грамматика языка IMP в форме BNF.
Java Java java ISS, Wuhan University Nov., Java Java java Java Java Java ……
Создание процессов в Windows, часть II BOOL CreateProcess ( LPCTSTR lpApplicationName, // имя исполняемого модуля LPTSTR lpCommandLine, // команда командной.
PL/SQL Хранимые процедуры и функции. Процедуры [CREATE [OR REPLACE]] PROCEDURE procedure_name[(parameter[, parameter]...)] {IS | AS} [local declarations]
Лекция 4 Инструкции. Инструкции С++ инструкция: объявление ; выражение opt ; { последовательность_инструкций opt } if ( условие ) инструкция if ( условие.
WinCC Работа и мониторинг Siemens AG All rights reserved.© TC Nbg.-M Date: File: E02OFFe.PPT Catalog: NWINCC Открытость и способность.
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Лекция 6 Функции. Объявления и определения Объявление функции – указание имени функции, а также входных и выходных параметров Определение функции – указание.
Лекция 2. Фундаментальные типы данных и основные конструкции Красс Александр СПбГУ ИТМО, 2008.
Автоматическая генерация кода программ с явным выделением состояний Канжелев С.Ю. магистрант СПбГУ ИТМО Шалыто А.А. доктор технических наук профессор СПбГУ.
Транксрипт:

Очередь асинхронных сообщений Очередь синхронных сообщений Очередь ввода PostMessage SendMessage Аппаратные сообщения WH_JOURNALRECORD GetMessage WH_GETMESSAGE WH_KEYBORD WH_MOUSE WH_CALLWNDPROC Оконная процедура Типы ловушек Ловушки Windows

WH_CALLWNDPROC – система вызывает процедуру ловушки CallWndProc до передачи сообщения оконной процедуре адресату. Этой ловушке разрешается анализировать сообщения, но не изменять их. WH_GETMESAGE – система вызывает процедуру ловушки GetMsgProc до передачи сообщения оконной процедуре адресату. Этой ловушке разрешается изменять сообщения. WH_KEYBOARD – система вызывает процедуру ловушки KeyboardProc когда извлеченное из очереди сообщение исходит от клавиатуры (WM_KEYUP или WM_KEYDOWN). WH_MOUSE – система вызывает процедуру ловушки MouseProc когда извлеченное из очереди сообщение исходит от мыши (например WM_LBUTTONDOWN).

WH_CBT – система вызывает процедуру ловушки CBTProc перед созданием, активацией и модификацией окон. Процедуры ловушек имеют сходную сигнатуру: LRESULT CALLBACK MouseProc( int nCode, // код ловушки (напр. HC_ACTION) WPARAM wParam, // идентификатор сообщения LPARAM lParam // указатель на структуру // MOUSEHOOKSTRUCT ); Локальные ловушки. Глобальные ловушки. Загружаются в адресное пространства каждого процесса.

#include #include "resource.h« __declspec(dllimport) void SetFarHook(void); __declspec(dllimport) void UninstallFarHook(void); LRESULT CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam); int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { MSG msg; DialogBox(hInstance,(LPCTSTR)IDD_DLGTEST,NULL, (DLGPROC)DlgProc); hh.c

while (GetMessage(&msg, NULL, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); } return msg.wParam; } LRESULT CALLBACK DlgProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam){ char strText[100]; switch (message){

case WM_INITDIALOG: RegisterHotKey(hDlg,0xB001, MOD_CONTROL | MOD_ALT, 'W'); return TRUE; case WM_HOTKEY: ShowWindow(hDlg,SW_SHOW); break; case WM_COMMAND: switch (LOWORD(wParam) ){ case IDOK: PostQuitMessage(0); return TRUE; case IDC_BTN1: SetFarHook(); ShowWindow(hDlg,SW_HIDE); break;

case IDC_BTN2: UninstallFarHook(); break; } break; default: return FALSE; } #define IDD_DLGTEST 101 #define IDC_BTN #define IDC_BTN resource.h

#include #include "resource.h" IDD_DLGTEST DIALOG DISCARDABLE 0, 0, 80, 80 STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU CAPTION "Dialog" FONT 8, "MS Sans Serif" BEGIN PUSHBUTTON "Hang the hook",IDC_BTN1,7,7,60,15 PUSHBUTTON "Pull off",IDC_BTN2,7,27,60,15 DEFPUSHBUTTON "OK",IDOK,7,47,60,15 END > rc hh.rc Компилятор ресурсов: hh.rc

#include HINSTANCE hinstDLL; HHOOK g_Hook; BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved ) { hinstDLL=(HINSTANCE)hModule; return TRUE; } LRESULT CALLBACK CBTProc(int nCode, WPARAM wParam, LPARAM lParam) { h1.c

CBT_CREATEWND* cbt_crwnd; if (nCode < 0) return CallNextHookEx(g_Hook, nCode, wParam, lParam); cbt_crwnd=(CBT_CREATEWND*)lParam; switch (nCode) { case HCBT_CREATEWND: //код ловушки if (CompareString(LOCALE_SYSTEM_DEFAULT, NORM_IGNORECASE, cbt_crwnd->lpcs->lpszName, 3, "x^y", 3)==CSTR_EQUAL) DestroyWindow(cbt_crwnd->lpcs->hwndParent); break;

default: break; } return CallNextHookEx(g_Hook, nCode, wParam, lParam); } __declspec(dllexport) void SetFarHook(void){ g_Hook=SetWindowsHookEx(WH_CBT,CBTProc,hinstDLL,0); return; } __declspec(dllexport) void UninstallFarHook(void){ UnhookWindowsHookEx(g_Hook); return; } >cl /c h1.c > link /DLL h1.obj user32.lib

#include HINSTANCE hinstDLL; HHOOK g_Hook; BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved){ hinstDLL=(HINSTANCE)hModule; return TRUE; } h2.c >cl hh.c hh.res h1.lib user32.lib

LRESULT CALLBACK MouseProc(int nCode, WPARAM wParam, LPARAM lParam) { MOUSEHOOKSTRUCT ms; char str[64]={'\0'}; int x,y; if (nCode < 0) return CallNextHookEx(g_Hook, nCode, wParam, lParam); if(nCode==HC_ACTION) switch (wParam) { case WM_RBUTTONDBLCLK : sprintf(str,"%i %i", ((MOUSEHOOKSTRUCT*)lParam)->pt.x, ((MOUSEHOOKSTRUCT*)lParam)->pt.y);

MessageBox( ((MOUSEHOOKSTRUCT*)lParam)->hwnd,str, "",MB_OK); break; } return CallNextHookEx(g_Hook, nCode, wParam, lParam); } __declspec(dllexport) void SetFarHook(void){ g_Hook=SetWindowsHookEx(WH_MOUSE, MouseProc,hinstDLL,0); return; } __declspec(dllexport) void UninstallFarHook(void){ UnhookWindowsHookEx(g_Hook); return; }

Упражнение 1: протестировать разобранные программы Упражнение 2: проверить адресное пространство текущих процессов после установки глобальной ловушки и после ее снятия, установить наличие или отсутствие модуля ловушки (воспользоваться программами предыдущих лабораторных). Упражнение 3: записать все события мыши (или клавиатуры) происходящие в системе (используйте, например, ловушки мыши и клавиатуры, а также WM_COPYDATA для передачи данных между процессами ).