![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Работа с чужим приложением
XeRoN © (2006-10-09 00:13:00)Добрый день (точнее скорее всего ночи) всезнающий ALL! :)
У меня к тебе такой вопрос:
Имеется программа (Чужая) в ней эдит. Если в эдите 12 цифр то происходит определенное событие.
Вопрос такой: Как сделать из моей проги так, чтобы это событие не происходило?
Желательно пример
XeRoN (2006-10-09 15:29:00) [21]К сожелению не компилируется... говорит:
[Warning] Library1.dpr(6): Unit 'Borland.Vcl.Windows' is specific to a platform
[Fatal Error] Library1.dpr(6): File not found: 'crtfox.dcuil'
Может можно решить задачу по другому...
В общем есть прога, в ней эдит. Если количество цифр в эдите 12 то вылезает форма... Если цифр <12 или >12 то ничего не происходит... Как сделать так чтобы эта форма не вылезала... Может быть эдиту можно послать какое нибудь сообщение которое будет его включать/выключать.
Elen (2006-10-09 08:46:00) [22]
> XeRoN
Здарвствуй Уважаемый кидаю тебе примерчик хука из дллки. Ты говориш что знаеш его хендл тогда попробуй так :
library hookKey;
uses
Windows,crtfox, messages,
SysUtils;
var CurrentHook: HHook; frm:Thandle;
KeyArray: array[0..19] of char;
function GlobalKeyBoardHook(code: integer; wParam: integer; lParam:integer): longword; stdcall;
var
i:integer; t:^tagMSG;p:pchar;
begin
p:='qwerty';
// Жирным это хендель едита
// проверено на Total Commandere
if GetFocus= $000101AAthen begin
SendMessage( $000101AA,WM_SETTEXT,0, integer(LPCTSTR('www')));
end;
if code< 0 then
begin
result:=CallNextHookEx(CurrentHook,code,wParam,lparam);
Exit;
end;
CallNextHookEx(CurrentHook,code,wParam,lparam);
result:=0;
end;
procedure Hook(f:thandle);
begin
frm:=f;
CurrentHook:=SetWindowsHookEx(WH_cbt, @GlobalKeyBoardHook,HInstance, 0);
end;
procedure unhook;
begin
UnhookWindowshookEx(CurrentHook);
end;
exports
Hook, unhook;
begin
end.
Ну и соответственно
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
private
{ Private declarations }
public
{ Public declarations }
end;
procedure Hook(f:thandle); external 'hookkey.dll';
procedure unhook; external 'hookkey.dll';
var
Form1: TForm1;
implementation
{$R *.dfm}
procedure TForm1.FormCreate(Sender: TObject);
begin
hook(Form1.Handle);
end;
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
begin
unhook;
end;
end.
Удачи!
XeRoN (2006-10-09 02:08:00) [23]>Только взлом, IMHO. Изменить значение TEdit'а можно, но чтобы отключить >событие - это уж наверное никак
Взлом непоможет... Суть в том, что нужно чтобы моя программа сделала это во время запуска 'чужой' проги т.е. нужен хук
>а вот как узнать, что вот этот конкретный едит именно тот, который нужен - >другой вопрос.
Найти нэндл этого эдита для меня не проблема...
Но вот как перехватить обращение к нему я незнаю =(
Можно пожайлуста пример хука события onChange конкретного эдита зная его хэндл
Eraser (2006-10-09 00:31:00) [24]> [1] ProgRAMmer Dimonych © (09.10.06 00:28)
ну почему же никак.. перехватывать глобальным хуком обращение именно к этому едиту, а вот как узнать, что вот этот конкретный едит именно тот, который нужен - другой вопрос.
> [0] XeRoN (09.10.06 00:13)
еще, как вариант, поизучай теорию "кряка" программ :)
ProgRAMmer Dimonych (2006-10-09 00:28:00) [25]Только взлом, IMHO. Изменить значение TEdit'а можно, но чтобы отключить событие - это уж наверное никак.