информационная безопасность
без паники и всерьез
 подробно о проектеRambler's Top100
Атака на InternetЗа кого нас держат?Где водятся OGRы
BugTraq.Ru
Русский BugTraq
 Анализ криптографических сетевых... 
 Модель надежности двухузлового... 
 Специальные марковские модели надежности... 
 Три миллиона электронных замков... 
 Doom на газонокосилках 
 Умер Никлаус Вирт 
главная обзор RSN блог библиотека закон бред форум dnet о проекте
bugtraq.ru / форум / programming
Имя Пароль
ФОРУМ
если вы видите этот текст, отключите в настройках форума использование JavaScript
регистрация





Легенда:
  новое сообщение
  закрытая нитка
  новое сообщение
  в закрытой нитке
  старое сообщение
  • Напоминаю, что масса вопросов по функционированию форума снимается после прочтения его описания.
  • Новичкам также крайне полезно ознакомиться с данным документом.
Ты про это? Тоже не хочет... 23.11.06 19:14  Число просмотров: 1241
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 23.11.06 20:03  Количество правок: 3
<"чистая" ссылка> <обсуждение закрыто>
Ты про это? Тоже не хочет...

#pragma data_seg("Shared")

HHOOK hhookGetMsg; // Значение устанавливает главная программа
HWND hwndParent; // Хэндл окна установившего перехватчик
HINSTANCE hinstDLL; // Хэндл этой DLL

#pragma data_seg()
#pragma comment(linker, "/section:Shared,rws")

Хм... А секции .bss в DLL нету. В чём касяк? Компилю MS Visual C++ 6.0
<programming>
[Win32] Проблема с Windows Hooks 23.11.06 15:57  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 23.11.06 18:53  Количество правок: 2
<"чистая" ссылка> <обсуждение закрыто>
Опять я к вам за помощью. Такая проблема. Пишу программу для перехвата данных из диалоговых элементов. Установил глобальный хук WH_GETMESSGAE (перехватчик находится в DLL). Ловлю сообщения связанные с нажатием мыши. Перехват срабатывает только в пределах созаднного мной окна, хтотя WM_KEYUP ловит исправно. Кто-нибудь знает, как поймать все сообщения от мыши? В принципе могу код выложить.

Может у кого ссылки на тему есть?
И ещё один вопрос. Не по теме. Может есть какие-нибудь теги... 23.11.06 18:58  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
И ещё один вопрос. Не по теме. Может есть какие-нибудь теги для оформления исходных кодов, а то прямым текстом никакой структуры не видно :(
<без заголовка> 23.11.06 19:07  
Автор: ZloyShaman <ZloyShaman> Статус: Elderman
Отредактировано 23.11.06 19:08  Количество правок: 1
<"чистая" ссылка> <обсуждение закрыто>
Спасибо 23.11.06 19:17  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 23.11.06 19:23  Количество правок: 1
<"чистая" ссылка> <обсуждение закрыто>
Новости с фронта... Если вставить MessageBeep в DLL, то... 23.11.06 18:50  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 23.11.06 19:40  Количество правок: 6
<"чистая" ссылка> <обсуждение закрыто>
Новости с фронта... Если вставить MessageBeep в DLL, то видно, что перехватчик работает и за пределами "своего" приложения. Есть подозрение, что PostMessage не доставляет сообщение окну hwndParent. Буду признателен за помощь.

/*****************spy.cpp
#include <windows.h>
#include "resource.h"
#include "msghook.h"
#pragma comment (lib, "msghook.lib")

BOOL CALLBACK Spy(HWND hDlg, UINT iMsg, WPARAM wParam, LPARAM lParam)
{
    switch (iMsg)
    {
    case WM_INITDIALOG:
        InstallHook(hDlg);
        return TRUE;
    case WM_SPY_LBUTTONDOWN:
    case WM_SPY_LBUTTONUP:
        MessageBeep(MB_ICONASTERISK);
        return TRUE;
    case WM_CLOSE:
        UninstallHook();
        EndDialog (hDlg, 0);
        return TRUE;
    } // switch (iMsg) ...
    return FALSE;
} // Spy


int WINAPI WinMain(HINSTANCE hInst, HINSTANCE, LPSTR, int)
{
    DialogBox (hInst, "Spy", NULL, Spy);

    return 1;
}
/*****************msghook.cpp
static HHOOK hhookGetMsg;	// Значение устанавливает главная программа
static HWND  hwndParent;	// Хэндл окна установившего перехватчик
static HINSTANCE hinstDLL;	// Хэндл этой DLL

BOOL WINAPI DllMain(HINSTANCE hDll, DWORD fdwReason, LPVOID lpvReserved)
{
    if (fdwReason == DLL_PROCESS_ATTACH)
        hinstDLL = hDll;

    return TRUE;
}

EXPORT void InstallHook(HWND hwnd)
{
    hwndParent = hwnd;
	
    hhookGetMsg = SetWindowsHookEx(
                      WH_GETMESSAGE,	// Перехват сообщений оконной процедуре
                      GetMsgProc,	// Перехватчик
                      hinstDLL,		// DLL перехватчика
                      0);		
}

EXPORT void UninstallHook()
{
    UnhookWindowsHookEx(hhookGetMsg);
}

EXPORT LRESULT CALLBACK GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    POINT	pt;		// Текущее положение указателя мыши
    HWND	hwndCtrl;	// Текущее окно
    MSG *msg = (MSG *) lParam;	// Перехваченное сообщение

    CallNextHookEx(hhookGetMsg, nCode, wParam, lParam);

    switch (msg->message)
    {
    case WM_LBUTTONDOWN:
        PostMessage(hwndParent, WM_SPY_LBUTTONDOWN, 0, (LPARAM) msg->hwnd);
        break;
    case WM_LBUTTONUP:
        PostMessage(hwndParent, WM_SPY_LBUTTONUP, 0, (LPARAM) msg->hwnd);
        break;
    }

    return NULL;
}

---
Не совсем правильно 23.11.06 19:05  
Автор: Neznaika <Alex> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
1) У тебя есть глобальные переменные, типа -
static HWND hwndParent;

Когда твоя Dll мапится в адресное пространство другого процесса,
то все глобальные переменные будут равны 0. Поэтому
PostMessage( hwndParent, ..

превращается в
PostMessage( 0, ..

2) Все глобальные переменные (которые static) -
надо хранить в shared section.
Ты про это? Тоже не хочет... 23.11.06 19:14  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
Отредактировано 23.11.06 20:03  Количество правок: 3
<"чистая" ссылка> <обсуждение закрыто>
Ты про это? Тоже не хочет...

#pragma data_seg("Shared")

HHOOK hhookGetMsg; // Значение устанавливает главная программа
HWND hwndParent; // Хэндл окна установившего перехватчик
HINSTANCE hinstDLL; // Хэндл этой DLL

#pragma data_seg()
#pragma comment(linker, "/section:Shared,rws")

Хм... А секции .bss в DLL нету. В чём касяк? Компилю MS Visual C++ 6.0
Перед тем, как сделать PostMessage 23.11.06 20:05  
Автор: Neznaika <Alex> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
пиши куда-нибудь в лог hhookGetMsg, hwndParent и hinstDLL.

Сразу будет видно, когда они равны нулю.
Логи вести не стал. И так стало ясно, что hwndParent... 24.11.06 03:57  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
Логи вести не стал. И так стало ясно, что hwndParent обнуляется везде кроме "родного" приложения.
Всем спасибо. Решение нашлось:

#pragma bss_seg("shared")

HHOOK hhookGetMsg; // Значение устанавливает главная программа
HWND hwndParent; // Хэндл окна установившего перехватчик
HINSTANCE hinstDLL; // Хэндл этой DLL

#pragma comment(linker, "/section:shared,rws")
В пределах твоего окна -- или в пределах твоего приложения? 23.11.06 18:49  
Автор: Neznaika <Alex> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
У меня приложение из одного окна. Или я не про то? 23.11.06 18:51  
Автор: Vedrus <Serokhvostov Anton> Статус: Member
<"чистая" ссылка> <обсуждение закрыто>
1




Rambler's Top100
Рейтинг@Mail.ru


  Copyright © 2001-2024 Dmitry Leonov   Page build time: 0 s   Design: Vadim Derkach