IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

> Переменные и ловушка в DLL
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Помогите азобраться, не выводится переменная в DLL
Вот исходник DLLки которая не работает:
library hookDLL;
uses
Windows, Messages,Sysutils,Dialogs;
var
S:string;
SysHookMsg: HHOOK = 0 ;
H : THandle;
procedure fff;
begin
ShowMessage(S);
//Должно выводить чем стало 'S' в процедуре SendString
end;
procedure SendString(P:pchar); stdcall; export;
begin
S:=StrPas(P);
end;
function hook( Code: Integer; WParam: wParam; Msg: PCWPStruct): longint; stdcall;
var h:hwnd;
WindowName:array[0..MAX_PATH-1] of char;
begin
h:=0;
result := CallNextHookEx( h, Code, WParam, Longint( Msg ));
case Msg^.message of
WM_PAINT: begin
GetWindowText(Msg^.hwnd,@WindowName,MAX_PATH);
if WindowName='искомое окно' then fff;
end;
end;
End;
procedure SetKeyHook; stdcall; export;
begin
if h=0 then H:= SetWindowsHookEx(WH_CALLWNDPROC, @hook, hInstance, 0);
end;
procedure DelKeyHook; stdcall; export;
begin
if SysHookMsg <> 0 then UnhookWindowsHookEx(SysHookMsg);
end;
exports
SetKeyHook, DelKeyHook,SendString;
Begin
//
S:='Загрузли Dll'
end.


В програме пишу
...
{$R *.dfm}
procedure SetKeyHook;stdcall; external 'hookDLL.dll';
procedure DelKeyHook;stdcall; external 'hookDLL.dll';
procedure SendString(P:pchar); stdcall; external 'hookDLL.dll' name 'SendString';
procedure TForm1.FormCreate(Sender: TObject);
begin
SetKeyHook;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
DelKeyHook;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
S:string;
begin
S:='Эта строка должна появится когда откроется искомое окно';
SendString(pchar(S));
end;

...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
сообщение
Сообщение #2


Гость






Цитата
Какя понял отлавливает событие после отработки сообщения
Ну вот сам же написал, что
Цитата
Windows calls a WH_CALLWNDPROC hook procedure before passing the message to the receiving window procedure.
, а теперь говоришь, что после... Сначала сообщение приходит в хук, потом - в оконную процедуру. Именно поэтому с помощью WH_CALLWNDPROC можно отменить обработку сообщения. Если б было наоборот - то обработку отменить было бы невозможно.

Тебе чего надо вообще? Чтоб по КАЖДОМУ событию WM_PAINT выскакивал твой MessageBox?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Цитата(volvo @ 9.11.2010 18:06) *

...
Тебе чего надо вообще? Чтоб по КАЖДОМУ событию WM_PAINT выскакивал твой MessageBox?

Мне нужно чтобы по событию в конкретном окне, выскакивал месадж показывающий переменную S значение которой было принято в процедуре SendString.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4





Группа: Пользователи
Сообщений: 7
Пол: Мужской

Репутация: -  0  +


Проблема в том что код у dll общий для всех процессов, а данные нет.
При наступлении события процедура fff невидит изменения проишедшие с переменной S в процедуре SendString, хотя видит те значения которые были при загрузки DLL

Сообщение отредактировано: inoplanetanin -
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 15.05.2024 20:30
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name