Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

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

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

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

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

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

Прототип хука:
Цитата:
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, 16:38   #5
Irat
Пользователь
 
Регистрация: 04.02.2008
Сообщений: 35
Репутация: 30
По умолчанию

Код:

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 в 16:57. Причина: [CODE][/CODE]
Irat вне форума   Ответить с цитированием
Старый 06.02.2008, 17:03   #6
B_N
Новичок
 
Регистрация: 18.01.2008
Сообщений: 1,720
Репутация: 590
По умолчанию

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

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

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

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

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

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

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 вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перехват сообщений 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


03:03.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru