Member 12891988 Ответов: 0

Как можно напечатать результат в моей программе о глобальном событии крючка


Привет, я сделал простую программу, которая может помочь мне определить, когда окно будет закрыто или когда будет открыто.
Я сделал dll и загрузился из своей программы, но anityng был напечатан, если я закрываю или открываю окно на рабочем столе WINDOWS.
Я добавил кодовую программу, а также динамическую библиотеку ссылок, если кто-то может мне помочь.
С уважением

Что я уже пробовал:

/////////////////////////////////ЭТО МОЯ ПРОГРАММА//////////////////////////////

код #include "файл stdafx.ч"
#включить & lt;windows. h>

инт имя _tmain(АГДС, функций _tchar* argv в[])
{

HMODULE ДЛЛ = ошибка при вызове LoadLibrary(L"в C:\\Users\\Agostino\\Desktop\\ConsoleApplication4\\Debug\\ConsoleApplication4.dll");
if (dll = = NULL) {
printf ("DLL не удалось найти.\n");
функция getchar();
возврат -1;
}еще{
HOOKPROC addr = (HOOKPROC)GetProcAddress (dll, " SetCbtHook");
if (addr != NULL) {
printf ("функция была найдена.\n");
//функция getchar();
}еще{
printf ("функция не найдена.\n");
//функция getchar();
возврат -1;
}
}

printf ("программа успешно подключена.\n нажмите enter, чтобы отцепить функцию и остановить программу.\n");
функция getchar();
возвращает 0;
}



///////////Это библиотека динамических ссылок: ConsoleApplication4.dll///////////////
#include "stdafx.h"
#include <stdio.h>
#include "windows.h"

#pragma data_seg(".CYRUZ_CBTHOOK_PRAGMA_SECTION")
HWND  g_hNotifyWin = NULL;
HHOOK g_hHook      = NULL;
#pragma data_seg()
#pragma comment(linker, "/section:.CYRUZ_CBTHOOK_PRAGMA_SECTION,rws")
 
// Messages to handle in the server application.
const DWORD C_ACTIVATE     = RegisterWindowMessage(L"CYRUZ_CBTHOOK_MSG_HCBT_ACTIVATE");
const DWORD C_CLICKSKIPPED = RegisterWindowMessage(L"CYRUZ_CBTHOOK_MSG_HCBT_CLICKSKIPPED");
const DWORD C_CREATEWND    = RegisterWindowMessage(L"CYRUZ_CBTHOOK_MSG_HCBT_CREATEWND");
const DWORD C_DESTROYWND   = RegisterWindowMessage(L"CYRUZ_CBTHOOK_MSG_HCBT_DESTROYWND");
const DWORD C_KEYSKIPPED   = RegisterWindowMessage(L"CYRUZ_CBTHOOK_MSG_HCBT_KEYSKIPPED");
const DWORD C_MINMAX       = RegisterWindowMessage(L"CYRUZ_CBTHOOK_MSG_HCBT_MINMAX");
const DWORD C_MOVESIZE     = RegisterWindowMessage(L"CYRUZ_CBTHOOK_MSG_HCBT_MOVESIZE");
const DWORD C_QS           = RegisterWindowMessage(L"CYRUZ_CBTHOOK_MSG_HCBT_QS");
const DWORD C_SETFOCUS     = RegisterWindowMessage(L"CYRUZ_CBTHOOK_MSG_HCBT_SETFOCUS");
const DWORD C_SYSCOMMAND   = RegisterWindowMessage(L"CYRUZ_CBTHOOK_MSG_HCBT_SYSCOMMAND");
 
// Message to quit from the message pump thread.
const DWORD C_STOPMSGPUMP  = RegisterWindowMessage(L"CYRUZ_CBTHOOK_MSG_STOPMSGPUMP");
 
// DLL module handle.
HINSTANCE g_hDll = NULL;
 
// Functions declaration.
BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved);
//extern "C" __declspec(dllexport) INT myfunc();
extern "C" __declspec(dllexport) BOOL SetCbtHook(HWND hWnd, DWORD threadId);    // Exported
extern "C" __declspec(dllexport) BOOL UnsetCbtHook();                           // Exported

static LRESULT CALLBACK CbtProcCb(int nCode, WPARAM wParam, LPARAM lParam);
static DWORD WINAPI MessagePump(LPVOID lpThreadParameter);
 
// Dll entry point.
BOOL APIENTRY DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
    switch ( fdwReason )
    {
        case DLL_PROCESS_ATTACH:
            g_hDll = hinstDLL;
            return true;
    }
}

// Hooking function.
BOOL SetCbtHook(HWND hWnd, DWORD threadId)
{
    // Hook already initialized.
    if ( g_hNotifyWin != NULL )
        return false;
 
    g_hHook = SetWindowsHookEx(WH_CBT, (HOOKPROC)CbtProcCb, g_hDll, threadId);
    if ( g_hHook != NULL )
    {   // Success
        g_hNotifyWin = hWnd;
        CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)MessagePump, NULL, 0, 0);
        return true;
    }
     
    return false;
}
 
// Unhooking function.
BOOL UnsetCbtHook()
{
    // Hook not initialized.
    if ( g_hNotifyWin == NULL )
        return false;
     
    BOOL isUnhooked = UnhookWindowsHookEx(g_hHook);
    if ( isUnhooked )
        g_hNotifyWin = NULL;
 
    // Send the stop message to the message pump thread.
    PostMessage(g_hNotifyWin, C_STOPMSGPUMP, 0, 0);
    return isUnhooked;
}
 
// Hook callback.
static LRESULT CALLBACK CbtProcCb(int nCode, WPARAM wParam, LPARAM lParam)
{
    // Return without further processing if nCode < 0. Check CBTProc nCode for info:
    // http://msdn.microsoft.com/en-us/library/windows/desktop/ms644977(v=vs.85).aspx
    if ( nCode < 0 )
        return CallNextHookEx(g_hHook, nCode, wParam, lParam);
  
    DWORD uMsg = NULL;
    switch ( nCode )
    {
        case HCBT_ACTIVATE:
            uMsg = C_ACTIVATE;
            break;
        case HCBT_CLICKSKIPPED:
            uMsg = C_CLICKSKIPPED;
            break;
        case HCBT_CREATEWND:
            uMsg = C_CREATEWND;
            break;
        case HCBT_DESTROYWND:
            uMsg = C_DESTROYWND;
            break;
        case HCBT_KEYSKIPPED:
            uMsg = C_KEYSKIPPED;
            break;
        case HCBT_MINMAX:
            uMsg = C_MINMAX;
            break;
        case HCBT_MOVESIZE:
            uMsg = C_MOVESIZE;
            break;
        case HCBT_QS:
            uMsg = C_QS;
            break;
        case HCBT_SETFOCUS:
            uMsg = C_SETFOCUS;
            break;
        case HCBT_SYSCOMMAND:
            uMsg = C_SYSCOMMAND;
            break;
    }
 
    SendNotifyMessage(g_hNotifyWin, uMsg, wParam, lParam);
    return CallNextHookEx(g_hHook, nCode, wParam, lParam);
}
 
// Thread for message pumping. Check SetWindowsHookEx Remarks for info:
// http://msdn.microsoft.com/en-us/library/windows/desktop/ms644990(v=vs.85).aspx
// This should not be needed if the hooking application implements a message loop.
static DWORD WINAPI MessagePump(LPVOID lpThreadParameter)
{
    BOOL bRet; MSG  aMsg;
    while ( (bRet = GetMessage(&aMsg, NULL, 0, 0)) != 0 )
    {
        if ( bRet == -1 )
        {   // Unhook in case of GetMessage error if hook is still running.
            if ( g_hNotifyWin != NULL ) 
                UnsetCbtHook();
            return -1;
        }
         
        if ( aMsg.message == C_STOPMSGPUMP )
            return 0;
 
        TranslateMessage(&aMsg);
        DispatchMessage(&aMsg);
    }
    return 0;
}

0 Ответов