Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

[WINAPI] Obsługa zdarzeń bez okienka

Ostatnio zmodyfikowano 2015-04-13 15:05
Autor Wiadomość
staryprogramista
Temat założony przez niniejszego użytkownika
[WINAPI] Obsługa zdarzeń bez okienka
» 2015-04-12 10:14:21
Witam,

jak zrobić by możliwa była obsługa zdarzeń bez aktywnego okna, albo w ogóle bez niego(okno mi niepotrzebne)? Dotychczas próbowałem z uchwytem do pulpitu ale i tak nie działa.

C/C++
LRESULT CALLBACK WndProc( HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam )
{
    switch( message )
    {
        /////////////////
    }
    return DefWindowProc( hWnd, message, wParam, lParam );
}

int main()
{
    MSG msg;
   
    while( GetMessage( & msg, NULL, 0, 0 ) )
    {
        TranslateMessage( & msg );
        DispatchMessage( & msg );
    }
   
    return 0;
}
P-130629
pekfos
» 2015-04-12 10:36:16
Skąd chcesz łapać komunikaty, skoro nie masz okna? Piszesz keyloggera..?
P-130632
Brunon3
» 2015-04-12 10:39:48
@up: Równie dobrze @Topic może pisać jakieś "menu szybkich skrótów klawiszowych" (jak na smartfonach), więc jest to oskarżenie bezpodstawne.

@Topic: Spróbuj podpiąć się pod pulpit z włączoną opcją "zawsze na wierzchu", tak by program był cały czas aktywny. Nie wiem czy to zadziała, tak na logikę kombinuje.

-BD.
P-130634
Fireho
» 2015-04-12 10:57:49
Powinieneś lepiej określić co chcesz osiągnąć, ale przypuszczam że do tego co robisz mogłyby się nadawać http://cpp0x.pl/kursy​/Kurs-WinAPI-C++/Zaawansowane​/Haki/199.
P-130636
staryprogramista
Temat założony przez niniejszego użytkownika
» 2015-04-12 11:04:01
@pekfo: nie

@Brunon3: zrobiłem coś takiego i nie działa jednak:
C/C++
HWND Desktop = GetDesktopWindow();
SetWindowPos( Desktop, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE );

@Fireho: dzięki, przeczytam
P-130638
staryprogramista
Temat założony przez niniejszego użytkownika
» 2015-04-12 17:45:46
Poczytałem, popróbowałem ale nie mogę nic zdziałać z tymi hakami. Oto co napisałem:

dllmain.cpp
C/C++
#include <Windows.h>
#include "dll.h"
#include "stdafx.h"
#include <stdio.h>

HHOOK SysHook;

HINSTANCE hInstance;

BOOL APIENTRY DllMain( HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved )
{
    hInstance =( HINSTANCE ) hModule;
    return true;
}

LRESULT CALLBACK SysMsgProc( int code, WPARAM wParam, LPARAM lParam )
{
    if( code < 0 )
         return CallNextHookEx( 0, code, wParam, lParam );
   
    if( lParam == WM_RBUTTONDOWN )
    {
        AllocConsole();
        printf( "123\n" );
        return true;
    }
   
    return CallNextHookEx( 0, code, wParam, lParam );
}


DllExport void RunStopHook()
{
    SysHook = SetWindowsHookEx( WH_MOUSE, & SysMsgProc, hInstance, 0 );
}

dll.h
C/C++
#define DllExport extern "C" _declspec(dllexport)

DllExport void RunStopHook();

Program wykorzystujący dllke
C/C++
#include "Windows.h"
#include <iostream>
using namespace std;

typedef void( * VOIDFN )( void );
HINSTANCE hDll = NULL;
VOIDFN funkcja = NULL;

int main()
{
    MSG msg;
   
    hDll = LoadLibrary( "dllka.dll" );
    funkcja =( VOIDFN ) GetProcAddress( hDll, "RunStopHook" );
   
   
    if( hDll != NULL )
         cout << "ok";
   
    if( funkcja != NULL )
         cout << "ok";
   
    funkcja();
   
    while( GetMessage( & msg, NULL, 0, 0 ) )
    {
        TranslateMessage( & msg );
        DispatchMessage( & msg );
    }
   
    return 0;
}
Coś się zapisuje do do "funkcja" i hDll bo wyświetla komunikaty, ale generalnie nie działa.
P-130660
DejaVu
» 2015-04-13 13:43:40
Aplikacja poprawna politycznie nie powinna 'w tle' przechwytywać jakichkolwiek zdarzeń.
P-130790
Brunon3
» 2015-04-13 15:05:45
@DejaVu: Ale takie coś się czasami przydaje (np. interfejs skrótów w smartfonach).

@staryprogramista: Dodaj do kodu jakiś messagebox informujący o przechwytywaniu klawiszy na początek kodu, będzie po podejrzeniu.

-BD.
P-130803
« 1 »
  Strona 1 z 1