Что такое findslide.org?

FindSlide.org - это сайт презентаций, докладов, шаблонов в формате PowerPoint.


Для правообладателей

Обратная связь

Email: Нажмите что бы посмотреть 

Яндекс.Метрика

Презентация на тему Ловушки Windows. Типы ловушек. (Лекция 14)

WH_CALLWNDPROC – система вызывает процедуру ловушки CallWndProc до передачи сообщения оконной процедуре адресату. Этой ловушке разрешается анализировать сообщения, но не изменять их.WH_GETMESAGE – система вызывает процедуру ловушки GetMsgProc до передачи сообщения оконной процедуре адресату. Этой ловушке
Типы ловушекЛовушки Windows WH_CALLWNDPROC – система вызывает процедуру ловушки CallWndProc до передачи сообщения оконной процедуре WH_CBT – система вызывает процедуру ловушки CBTProc  перед созданием, активацией и #include #include while (GetMessage(&msg, NULL, 0, 0)) 	{	  TranslateMessage(&msg);	  DispatchMessage(&msg);	}	return msg.wParam;}LRESULT CALLBACK case WM_INITDIALOG:	   RegisterHotKey(hDlg,0xB001, MOD_CONTROL | 							   MOD_ALT, 'W'); case IDC_BTN2:	  UninstallFarHook();	  break;      } #include #include #include HINSTANCE hinstDLL;HHOOK g_Hook;BOOL APIENTRY DllMain( HANDLE hModule, CBT_CREATEWND* cbt_crwnd;     if (nCode < default:	  break;  }  return CallNextHookEx(g_Hook, nCode, wParam, lParam); } #include HINSTANCE hinstDLL;HHOOK g_Hook;BOOL APIENTRY DllMain( HANDLE hModule, LRESULT CALLBACK MouseProc(int nCode, WPARAM 						wParam, LPARAM lParam) { MOUSEHOOKSTRUCT ms; char MessageBox( ((MOUSEHOOKSTRUCT*)lParam)->hwnd,str, 							    Упражнение 1: протестировать разобранные программыУпражнение 2: проверить адресное пространство текущих процессов после
Слайды презентации

Слайд 2 WH_CALLWNDPROC – система вызывает процедуру ловушки CallWndProc до

WH_CALLWNDPROC – система вызывает процедуру ловушки CallWndProc до передачи сообщения оконной

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

сообщения, но не изменять их.

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

WH_KEYBOARD – система вызывает процедуру ловушки KeyboardProc когда извлеченное из очереди сообщение исходит от клавиатуры (WM_KEYUP или WM_KEYDOWN).

WH_MOUSE – система вызывает процедуру ловушки MouseProc когда извлеченное из очереди сообщение исходит от мыши (например WM_LBUTTONDOWN).


Слайд 3 WH_CBT – система вызывает процедуру ловушки CBTProc

WH_CBT – система вызывает процедуру ловушки CBTProc перед созданием, активацией и

перед созданием, активацией и модификацией окон.
Процедуры ловушек имеют сходную

сигнатуру:

LRESULT CALLBACK MouseProc(
int nCode, // код ловушки (напр. HC_ACTION)
WPARAM wParam, // идентификатор сообщения
LPARAM lParam // указатель на структуру
// MOUSEHOOKSTRUCT
);

Локальные ловушки.
Глобальные ловушки. Загружаются в адресное пространства каждого процесса.


Слайд 4 #include
#include "resource.h«

__declspec(dllimport) void SetFarHook(void);
__declspec(dllimport) void UninstallFarHook(void);

LRESULT CALLBACK

#include #include

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


Слайд 5 while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);

while (GetMessage(&msg, NULL, 0, 0)) 	{	 TranslateMessage(&msg);	 DispatchMessage(&msg);	}	return msg.wParam;}LRESULT CALLBACK DlgProc(HWND

DispatchMessage(&msg);
}
return msg.wParam;
}

LRESULT CALLBACK DlgProc(HWND hDlg, UINT message,

WPARAM wParam, LPARAM lParam){
char strText[100];
switch (message){

Слайд 6 case WM_INITDIALOG:
RegisterHotKey(hDlg,0xB001, MOD_CONTROL |

case WM_INITDIALOG:	  RegisterHotKey(hDlg,0xB001, MOD_CONTROL | 							  MOD_ALT, 'W');

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;

Слайд 7 case IDC_BTN2:
UninstallFarHook();
break;

case IDC_BTN2:	 UninstallFarHook();	 break;   }   break;

}

break;
default:
return FALSE;
}
}

#define IDD_DLGTEST 101
#define IDC_BTN1 1001
#define IDC_BTN2 1002

resource.h


Слайд 8 #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


Слайд 9 #include
HINSTANCE hinstDLL;
HHOOK g_Hook;

BOOL APIENTRY DllMain( HANDLE hModule,

#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


Слайд 10 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;

Слайд 11 default:
break;
}
return CallNextHookEx(g_Hook,

default:	 break; } return CallNextHookEx(g_Hook, nCode, wParam, lParam); } __declspec(dllexport) void

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


Слайд 12 #include
HINSTANCE hinstDLL;
HHOOK g_Hook;

BOOL APIENTRY DllMain( HANDLE hModule,

#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


Слайд 13 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);

Слайд 14 MessageBox( ((MOUSEHOOKSTRUCT*)lParam)->hwnd,str, "",MB_OK);

MessageBox( ((MOUSEHOOKSTRUCT*)lParam)->hwnd,str,

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;
}

  • Имя файла: lovushki-windows-tipy-lovushek-lektsiya-14.pptx
  • Количество просмотров: 105
  • Количество скачиваний: 0