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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.02.2008, 00:41   #1
Irat
Пользователь
 
Регистрация: 04.02.2008
Сообщений: 35
По умолчанию какие значения может принимать code для функции CallWndProc!

Здравствуйте!
Подскажите пожалуйста какие значения может принимать code для функции CallWndProc!
Язык Delphi!
Только на WASM не посылайте!!!
Спасибо!

Последний раз редактировалось Stilet; 06.02.2008 в 08:38.
Irat вне форума Ответить с цитированием
Старый 06.02.2008, 00:57   #2
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Если nCode равен HC_ACTION то сообщение надо обработать, если nCode < 0, то нужно вызвать CallNextHookEx с переданными параметрами и вернуть её результат.
B_N вне форума Ответить с цитированием
Старый 06.02.2008, 01:08   #3
Irat
Пользователь
 
Регистрация: 04.02.2008
Сообщений: 35
По умолчанию

Кроме HC_ACTION есть еще что-нибудь?
Как получить путь к кому предназначено сообщение?
И про nCode<>0 по подробнее если можно?
Спасибо!!!
Irat вне форума Ответить с цитированием
Старый 06.02.2008, 01:57   #4
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Прототип хука:
Цитата:
LRESULT CALLBACK CallWndProc(
int nCode,
WPARAM wParam,
LPARAM lParam
);
Ненулевой wParam показывает, что сообщение отправлено текущим потоком, lParam - указатель на CWPSTRUCT
Цитата:
typedef struct {
LPARAM lParam;
WPARAM wParam;
UINT message;
HWND hwnd;
} CWPSTRUCT, *PCWPSTRUCT;
т.е. в ней все параметры вызова оконной процедуры, естественно по hwnd находим, кому это предназначается.
Коды хуков определяются так:
Цитата:
#define HC_ACTION 0
#define HC_GETNEXT 1
#define HC_SKIP 2
#define HC_NOREMOVE 3
#define HC_NOREM HC_NOREMOVE
#define HC_SYSMODALON 4
#define HC_SYSMODALOFF 5
Рекомендуется при всех ненулевых кодах не обрабатывать сообщение, а передавать управление CallNextHookEx (и возвращать ее результат) Но! Это-то как раз по желанию, мало ли, может мы не хотим ставить в известность следующие хуки (правда, как и на чём это скажется останется только гадать )
B_N вне форума Ответить с цитированием
Старый 06.02.2008, 15:38   #5
Irat
Пользователь
 
Регистрация: 04.02.2008
Сообщений: 35
По умолчанию

Код:
library lovushka1;

uses
  SysUtils, Windows, messages, Dialogs;

{$R *.res}
var SysHook: HHook = 0;
    Wnd: Hwnd = 0;

function CallWndProc(Code:integer; wParam:WPARAM; lParam:LPARAM):integer; export; stdcall;
var Str:String;
begin
if Code>=0 then
   begin
   Str:=TCBTCreatWnd(Pointer(lParam)^).lpcs.lpszName;
   ShowMessage(Str);
   Result:=callNextHookEx(SysHook, Code, wParam, lParam);
   end
else Result:=callNextHookEx(SysHook, Code, wParam, lParam);
end;

procedure RunStopHook(State:Boolean)export; stdcall;
begin
if State=true then
   begin
   SysHook := SetWindowsHookEx(WH_GETMESSAGE, @CallWndProc, HInstance, 0);
   end
else
   begin
   UnhhokWindowsHookEx(SysHook);
   SysHook:= 0;
   end;
end;

exports RunStopHook index 1;

begin
end.
Подскажите что тут не правильно? Осталось самая малость написать dll, а сил нет!!!
Выдает ошибку Undeclared indentifier:'TCBTCreatWnd'.
Спасибо!

Последний раз редактировалось AlDelta; 06.02.2008 в 15:57. Причина: [CODE][/CODE]
Irat вне форума Ответить с цитированием
Старый 06.02.2008, 16:03   #6
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Цитата:
Сообщение от Irat Посмотреть сообщение
[CODE]Выдает ошибку Undeclared indentifier:'TCBTCreatWnd'.
А что такое, в самом деле, TCBTCreatWnd ???
B_N вне форума Ответить с цитированием
Старый 06.02.2008, 16:25   #7
Irat
Пользователь
 
Регистрация: 04.02.2008
Сообщений: 35
По умолчанию

В строке Str:=TCBTCreatWnd(Pointer(lParam)^) .lpcs.lpszName; япытаюсь получить путь сообщения.
А что не правильно? А как правильно?
Спасибо!
Irat вне форума Ответить с цитированием
Старый 06.02.2008, 17:27   #8
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Я точно так же, как и компилятор (Undeclared indentifier:'TCBTCreatWnd'), не могу понять, где определяется TCBTCreatWnd и что это?
B_N вне форума Ответить с цитированием
Старый 09.02.2008, 00:42   #9
Irat
Пользователь
 
Регистрация: 04.02.2008
Сообщений: 35
По умолчанию

Ненулевой wParam показывает, что сообщение отправлено текущим потоком, lParam - указатель на CWPSTRUCT
Цитата:typedef struct {
LPARAM lParam;
WPARAM wParam;
UINT message;
HWND hwnd;
} CWPSTRUCT, *PCWPSTRUCT;

т.е. в ней все параметры вызова оконной процедуры, естественно по hwnd находим, кому это предназначается.

Как это реализовать, какая процедура нужна?
Спасибо!
Irat вне форума Ответить с цитированием
Старый 09.02.2008, 01:13   #10
B_N
Новичок
Джуниор
 
Регистрация: 18.01.2008
Сообщений: 1,720
По умолчанию

Irat, ну откройте тайну, что Вы сделать хотите? У меня ощущение, что Вы делаете что-то совсем не то, что получается. А реализовать элементарно - объявить структуру CWPSTRUCT, если на C, то даже объявлять не нужно, всё уже есть, если на паскале, то
Код:
type
    CWPSTRUCT = record
      lParam : dword;
      wParam : dword;
      message : dword;
      hwnd : HWND;
    end;
    PCWPSTRUCT = ^CWPSTRUCT;
объявить функцию:
Код:
function CallWndProc(nCode : integer; wParam : WPARAM; pcwps : PCWPSTRUCT) : LRESULT;
и определить её
Код:
function CallWndProc(nCode : integer; wParam : WPARAM; pcwps : PCWPSTRUCT) : LRESULT;
begin
    if( (pcwps <> nil) and (pcwps.hwnd = XXXXXXXXX) ) then begin
// здесь работаем
    end;
end;
B_N вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват сообщений icQ Xandr Работа с сетью в Delphi 6 10.08.2010 15:09
Перехват сообщений rubi Win Api 3 06.09.2007 00:25
Перехват API функций satana Win Api 4 21.08.2007 20:12
хттп перехват infected Работа с сетью в Delphi 1 09.07.2007 07:58
перехват трафика Roman Работа с сетью в Delphi 6 27.06.2007 08:51