Russian Qt Forum
Март 28, 2024, 16:54 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: SetwindiowsHookEx+wndproc  (Прочитано 5237 раз)
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« : Май 27, 2017, 10:02 »

перехват функции wndProc
Здравствуйте следует перехватить функцию WndProc в приложении win32api
создал проект вот код.... Но почему то функция mainWndProc не выполняется
Код
C++ (Qt)
include "stdafx.h"
#include "device.h"
#include <stdio.h>
#define MAX_LOADSTRING 100
 
// Глобальные переменные:
HINSTANCE hInst;                                // текущий экземпляр
WCHAR szTitle[MAX_LOADSTRING];                  // Текст строки заголовка
WCHAR szWindowClass[MAX_LOADSTRING];            // имя класса главного окна
 
// Отправить объявления функций, включенных в этот модуль кода:
ATOM                MyRegisterClass(HINSTANCE hInstance);
BOOL                InitInstance(HINSTANCE, int);
LRESULT CALLBACK    WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK    About(HWND, UINT, WPARAM, LPARAM);
LRESULT CALLBACK mainWndProc(int code, WPARAM wParam, LPARAM lParam);
 
 
int APIENTRY wWinMain(_In_ HINSTANCE hInstance,
                    _In_opt_ HINSTANCE hPrevInstance,
                    _In_ LPWSTR    lpCmdLine,
                    _In_ int       nCmdShow)
{
   UNREFERENCED_PARAMETER(hPrevInstance);
   UNREFERENCED_PARAMETER(lpCmdLine);
 
   // TODO: разместите код здесь.
 
   // Инициализация глобальных строк
   LoadStringW(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
   LoadStringW(hInstance, IDC_DEVICE, szWindowClass, MAX_LOADSTRING);
   MyRegisterClass(hInstance);
 
   // Выполнить инициализацию приложения:
   if (!InitInstance (hInstance, nCmdShow))
   {
       return FALSE;
   }
 
   HACCEL hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_DEVICE));
 
   MSG msg;
SetWindowsHookEx(WH_CALLWNDPROC,mainWndProc, NULL, NULL);
   // Цикл основного сообщения:
   while (GetMessage(&msg, nullptr, 0, 0))
   {
       if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
       {
           TranslateMessage(&msg);
           DispatchMessage(&msg);
       }
   }
 
   return (int) msg.wParam;
}
 
 
LRESULT CALLBACK mainWndProc(int code, WPARAM wParam, LPARAM lParam)
{
   //return (DefWindowProcW(hWnd, Msg, wParam, lParam));
   TCHAR stdPath[30] = TEXT("C:\\dirpath.txt");
   HANDLE hOut;
   hOut = CreateFile(stdPath, GENERIC_WRITE, 0, NULL,
       CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL);
   char buffer[256];
   sprintf_s(buffer, "%s", "drgdfgd\n");
   WriteFile(hOut, buffer, strlen(buffer), NULL, NULL);
   CloseHandle(hOut);
   return CallNextHookEx(0, code, wParam, lParam);
}
//
//  ФУНКЦИЯ: MyRegisterClass()
//
//  НАЗНАЧЕНИЕ: регистрирует класс окна.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
   WNDCLASSEXW wcex;
 
   wcex.cbSize = sizeof(WNDCLASSEX);
 
   wcex.style          = CS_HREDRAW | CS_VREDRAW;
   wcex.lpfnWndProc    = WndProc;
   wcex.cbClsExtra     = 0;
   wcex.cbWndExtra     = 0;
   wcex.hInstance      = hInstance;
   wcex.hIcon          = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_DEVICE));
   wcex.hCursor        = LoadCursor(nullptr, IDC_ARROW);
   wcex.hbrBackground  = (HBRUSH)(COLOR_WINDOW+1);
   wcex.lpszMenuName   = MAKEINTRESOURCEW(IDC_DEVICE);
   wcex.lpszClassName  = szWindowClass;
   wcex.hIconSm        = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));
 
   return RegisterClassExW(&wcex);
}
 
//
//   ФУНКЦИЯ: InitInstance(HINSTANCE, int)
//
//   НАЗНАЧЕНИЕ: сохраняет обработку экземпляра и создает главное окно.
//
//   КОММЕНТАРИИ:
//
//        В данной функции дескриптор экземпляра сохраняется в глобальной переменной, а также
//        создается и выводится на экран главное окно программы.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
  hInst = hInstance; // Сохранить дескриптор экземпляра в глобальной переменной
 
  HWND hWnd = CreateWindowW(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
     CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, nullptr, nullptr, hInstance, nullptr);
 
  if (!hWnd)
  {
     return FALSE;
  }
 
  ShowWindow(hWnd, nCmdShow);
  UpdateWindow(hWnd);
 
  return TRUE;
}
 
//
//  ФУНКЦИЯ: WndProc(HWND, UINT, WPARAM, LPARAM)
//
//  НАЗНАЧЕНИЕ:  обрабатывает сообщения в главном окне.
//
//  WM_COMMAND — обработать меню приложения
//  WM_PAINT — отрисовать главное окно
//  WM_DESTROY — отправить сообщение о выходе и вернуться
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
   switch (message)
   {
   case WM_COMMAND:
       {
           int wmId = LOWORD(wParam);
           // Разобрать выбор в меню:
           switch (wmId)
           {
           case IDM_ABOUT:
               DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
               break;
           case IDM_EXIT:
               DestroyWindow(hWnd);
               break;
           default:
               return DefWindowProc(hWnd, message, wParam, lParam);
           }
       }
       break;
   case WM_PAINT:
       {
           PAINTSTRUCT ps;
           HDC hdc = BeginPaint(hWnd, &ps);
           // TODO: Добавьте сюда любой код прорисовки, использующий HDC...
           EndPaint(hWnd, &ps);
       }
       break;
   case WM_DESTROY:
       PostQuitMessage(0);
       break;
   default:
       return DefWindowProc(hWnd, message, wParam, lParam);
   }
   return 0;
}
 
// Обработчик сообщений для окна "О программе".
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
   UNREFERENCED_PARAMETER(lParam);
   switch (message)
   {
   case WM_INITDIALOG:
       return (INT_PTR)TRUE;
 
   case WM_COMMAND:
       if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
       {
           EndDialog(hDlg, LOWORD(wParam));
           return (INT_PTR)TRUE;
       }
       break;
   }
   return (INT_PTR)FALSE;
}
 
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.092 секунд. Запросов: 22.