Хук мышиный

Тема в разделе "WASM.WIN32", создана пользователем cresta, 26 май 2018.

  1. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Привет, народ.

    Десять лет как не программировал, и вот на старости лет приспичило.
    Хочу хук на мышь, глобальный.
    Собрал dll с хуком, но почему-то при загрузке модуля не вызывается процедура _main. То же самое если я её переименую в initInstance.
    Код (C++):
    1. #include <Windows.h>
    2. #include "stdafx.h"
    3. #include <iostream>
    4. using namespace std;
    5.  
    6.  
    7. HANDLE dllHandle=0;
    8.  
    9. int _main(HANDLE hModule, DWORD  ul_reason_for_call, LPVOID lpReserved)
    10. {
    11.    if (ul_reason_for_call == DLL_PROCESS_ATTACH) {
    12.         dllHandle = hModule;
    13.         MessageBox(0, L"INIT DLL MAIN", 0, 0);
    14.     }
    15.     return TRUE;
    16. }
    Поскольку хэндл модуля у нас ноль, то и хук не ставится с GetLastError = 1428

    Если назвать процедуру BOOL APIENTRY DllMain, то вообще не собирается:
    Код (Text):
    1. Ошибка LNK2005 _DllMain@12 уже определен в Dll1.obj Dll1 C:\Users\user\source\repos\Dll1\Dll1\Dll1.obj
    Погуглил - вроде пишут что это если MFC библиотека такая ошибка. Но я вроде не создавал MFC проект. Обычная стандартная динамическая библиотека.

    Как перейти к DllMain? Мне кажется это дложно помочь.
     
  2. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Достал из подвала архива наследие славного q_q,
    и вставил оттуда
    #pragma comment(linker, "/ENTRY:main")
    но все равно не вызывается.

    Пока сделал workaround :
    Код (C++):
    1. //global var
    2. HANDLE dllHandle=0;
    3.  
    4. extern "C" __declspec(dllexport)
    5. DWORD InstallHook(HWND hWnd)
    6. {
    7.     if (dllHandle == 0)
    8.         dllHandle=GetModuleHandle(L"Dll1.dll");
    9.  
    10. ...
    11. ...
    12. ...
    Спм себя за волосы из болота вытащил. Но как-то это неправильно.
    Должна же вызываться main.
     
  3. CrawlUp

    CrawlUp Member

    Публикаций:
    0
    Регистрация:
    1 фев 2018
    Сообщения:
    53
    Вот HookMouse на ассемблере в формате Fasm, с С++ незнаком.
     

    Вложения:

    • hook mouse.zip
      Размер файла:
      4,1 КБ
      Просмотров:
      29
  4. cresta

    cresta Active Member

    Публикаций:
    0
    Регистрация:
    13 июн 2004
    Сообщения:
    2.257
    Спасибо, на ассемблере у меня есть, но это не помогает найти причину переопределения DllMain
     
  5. al79

    al79 Алексей

    Публикаций:
    0
    Регистрация:
    11 май 2006
    Сообщения:
    125
    Адрес:
    Екатеринбург
    Может "DllEntry".
     
  6. MonsterCat

    MonsterCat New Member

    Публикаций:
    0
    Регистрация:
    22 фев 2018
    Сообщения:
    1
    потому что точка входа dll - DllMain
    Твоя точка входа должна выглядеть так:
    Код (Text):
    1. BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
    2. {
    3.   switch (fdwReason)
    4. ...
    5. }
    По поводу руганий компилятора - проект создавай с нуля, а не консольный