Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 1 марта!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

БОЛЬШОЙ FAQ ПО DELPHI



Анимированная кнопка ПУСК

Автор: I MD.CIPTAYASA

Если вы используете приведённый здесь код, ваша кнопка ПУСК будет извиваться как в экстазе. На форму предварительно нужно вынести Image, Timer и две кнопки: CopyPuskBtn и AnimateBtn. Последняя должна быть неактивна изначально. Timer - отключен, его свойство Interval должно быть установлено в оптимальное значение - испытывайте.


 unit Unit1;
 
 interface
 
 uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms,
   Dialogs, ShellAPI, ExtCtrls, StdCtrls;
 
 const
   MAX_BUFFER = 6;
 
 type
   TForm1 = class(TForm)
   CopyPuskBtn: TButton;
   Timer1: TTimer;
   AnimateBtn: TButton;
   Image1: TImage;
   procedure FormCreate(Sender: TObject);
   procedure CopyPuskBtnClick(Sender: TObject);
   procedure FormDestroy(Sender: TObject);
   procedure Timer1Timer(Sender: TObject);
   procedure AnimateBtnClick(Sender: TObject);
   procedure Edit1KeyPress(Sender: TObject; var Key: Char);
   procedure FormClose(Sender: TObject; var Action: TCloseAction);
   private
     { Private declarations }
     HW: HWND;
     DC: HDC;
     R: TRect;
     FNumber: integer;
     Buffer: array [1 .. MAX_BUFFER] of TBitmap;
     TrayIcon: TNotifyIconData;
 
     procedure CreateFrames;
     procedure DestroyFrames;
     procedure BuildFrames;
     procedure NotifyIcon(var Msg : TMessage); message WM_USER + 100;
     procedure OnMinimizeEvt(Sender : TObject);
   public
     { Public declarations }
 end;
 
 var
   Form1: TForm1;
 
 implementation
 uses
   Math;
 
 {$R *.DFM}
 
 // Создаём буфер для спрайтов
 procedure TForm1.CreateFrames;
 var
   i: integer;
 begin
   for i := 1 to MAX_BUFFER do
   begin
     Buffer[i] := TBitmap.Create;
     with Buffer[i] do
     begin
       Height := R.Bottom - R.Top;
       Width := R.Right - R.Left;
       Canvas.Brush.Color := clBtnFace;
       Canvas.Pen.Color := clBtnFace;
       Canvas.Rectangle(0, 0, Buffer[i].Width, Buffer[i].Height);
     end;
   end;
 end;
 
 procedure TForm1.DestroyFrames;
 var
   i: integer;
 begin
   for i := 1 to MAX_BUFFER do
     Buffer[i].Destroy;
 end;
 
 // Подготавливает сегменты/спрайты для анимации
 procedure TForm1.BuildFrames;
 var
   i, j, k, H, W: integer;
   Y: double;
 begin
   H := R.Bottom - R.Top;
   W := R.Right - R.Left;
   Image1.Width := W;
   Image1.Height := H;
   for i := 1 to MAX_BUFFER-1 do //Буфер [MAX_BUFFER] используется для хранения оригинального битмапа
     for j := 1 to W do
       for k := 1 to H do
       begin
         Y := 2 * Sin((j * 360 / W) * (pi / 180) - 20 * i);
         Buffer[i].Canvas.Pixels[j, k - Round(Y)] := Buffer[6].Canvas.Pixels[j, k];
       end;
 end;
 
 procedure TForm1.OnMinimizeEvt(Sender: TObject);
 begin
   ShowWindow(Application.Handle, SW_HIDE);
 end;
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
   HW := FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'Button', nil);
   GetWindowRect(HW, R);
   DC := GetWindowDC(HW);
   CreateFrames;
   FNumber := 1;
   TrayIcon.cbSize := SizeOf(TrayIcon);
   TrayIcon.Wnd := Form1.Handle;
   TrayIcon.uID := 100;
   TrayIcon.uFlags := NIF_MESSAGE + NIF_ICON + NIF_TIP;
   TrayIcon.uCallbackMessage := WM_USER + 100;
   TrayIcon.hIcon := Application.Icon.Handle;
   Shell_NotifyIcon(NIM_ADD, @TrayIcon);
   Application.OnMinimize := OnMinimizeEvt;
 end;
 
 procedure TForm1.NotifyIcon(var Msg : TMessage);
 begin
   case Msg.LParam of
   WM_LBUTTONDBLCLK:
     begin
       ShowWindow(Application.Handle, SW_SHOW);
       Application.Restore;
     end;
   end;
 end;
 
 procedure TForm1.CopyPuskBtnClick(Sender: TObject);
 begin
   //Получаем изображение оригинальной кнопки, чтобы потом использовать его
   //когда анимация завершится
   BitBlt(Buffer[MAX_BUFFER].Canvas.Handle, 0, 0, R.Right - R.Left, R.Bottom - R.Top, DC, 0, 0, SRCCOPY);
   BuildFrames;
   Image1.Canvas.Draw(0, 0, Buffer[MAX_BUFFER]);
   AnimateBtn.Enabled := true;
 end;
 
 procedure TForm1.FormDestroy(Sender: TObject);
 begin
   Timer1.Enabled := false;
   BitBlt(DC, 0, 0, R.Right - R.Left, R.Bottom - R.Top, Buffer[MAX_BUFFER].Canvas.Handle, 0, 0, SRCCOPY);
   ReleaseDC(HW, DC);
   DestroyFrames; // не забудьте сделать это !!!
   Shell_NotifyIcon(NIM_DELETE, @TrayIcon);
 end;
 
 procedure TForm1.Timer1Timer(Sender: TObject);
 begin
   BitBlt(DC, 0, 0, R.Right - R.Left, R.Bottom - R.Top, Buffer[FNumber].Canvas.Handle, 0, 0, SRCCOPY);
   Inc(FNumber);
   if FNumber > MAX_BUFFER - 1 then
     FNumber := 1;
 end;
 
 procedure TForm1.AnimateBtnClick(Sender: TObject);
 begin
   Timer1.Enabled := not Timer1.Enabled;
   if not Timer1.Enabled then
   begin
     BitBlt(DC, 0, 0, R.Right - R.Left, R.Bottom - R.Top, Buffer[MAX_BUFFER].Canvas.Handle, 0, 0, SRCCOPY);
     AnimateBtn.Caption := '&Animate';
     CopyPuskBtn.Enabled := true;
   end
   else
   begin
     AnimateBtn.Caption := '&Stop';
     CopyPuskBtn.Enabled := false;
   end;
 end;
 
 procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
 begin
   Action := caNone;
   PostMessage(Form1.Handle, WM_DESTROY, 0, 0);
   Application.Terminate;
 end;
 
 end.
 




Асинхронная ошибка

Если Вы находите ошибки, исправить которые дело долгое и нудное, ничего не делайте - просто внесите их в список особенностей.

Вопрос: Почему не работает следующий код?


      begin
        ClietnSocket1.Open;
        if ClietnSocket1.Socket.Connected then
          ClietnSocket1.Socket.SendText('Hello');
        {..}
      end;
      // Выдает - ассинхронная ошибка.
 

Вы работаете в ассинхронном режиме. Следует использовать соответсвующие события.




Автоопределение кодировки ANSI-OEM

- Маша, давай прошвырнемся в кино?
- ?
- Hу давай хоть в кабак сходим.
- ? - А-а, понял, кодировка глючит...


 const
   l3_csANSI = 0;
   {-признак кодировки ANSII}
   l3_csOEM = 255;
   {-признак кодировки OEM}
 
 type
   cc_Graph_CriteriaRange = #176..#223; {-критерий для определения псевдографики}
   TChars = set of char;
   Long = LongInt;
 
 const
   cc_OEM_CriteriaEx = [#128..#175] + [#224..#239];
   cc_ANSI_CriteriaEx = [#192..#255];
   cc_Graph_Criteria = [Low(cc_Graph_CriteriaRange)..High(cc_Graph_CriteriaRange)];
 
 type
   T_cc_GraphCounts = array [cc_Graph_CriteriaRange] of Longint;
 
 procedure l3AnalizeCharSetEx(var Buf: PChar; BufEnd: PChar;
 var OEMCount, ANSICount, GraphCount: Long;
 var GraphCounts: T_cc_GraphCounts);
 var
   C : Char;
 begin
   OEMCount := 0;
   ANSICount := 0;
   GraphCount := 0;
   for C := Low(T_cc_GraphCounts) to High(T_cc_GraphCounts) do GraphCounts[C] := 0;
   while (Buf <  BufEnd) do begin
     C := Buf^;
     Inc(Buf);
     if (C in cc_OEM_CriteriaEx) then Inc(OEMCount);
     if (C in cc_ANSI_CriteriaEx) then Inc(ANSICount);
     if (C in cc_Graph_Criteria) then begin
       Inc(GraphCounts[C]);
       Inc(GraphCount);
     end;
   end;{Buf <  BufEnd}
 end;
 
 function l3AnalizeCharSetExEx(Buf, BufEnd: PChar): Byte;
 var
   OEMCount : Long;
   ANSICount : Long;
   GraphCount : Long;
   GraphCount_2: Long;
   GraphCounts : T_cc_GraphCounts;
   C : Char;
 begin
     l3AnalizeCharSetEx(Buf, BufEnd, OEMCount, ANSICount, GraphCount,GraphCounts);
     if (OEMCount >  ANSICount) then
       Result := l3_csOEM
     else if (GraphCount > = ANSICount) then begin
     Result := 0;
     GraphCount_2 := GraphCount div 2;
     for C := Low(T_cc_GraphCounts) to High(T_cc_GraphCounts) do begin
       If (GraphCounts[C] >  GraphCount_2) then begin
         Result := l3_csOEM;
         break;
       end;{GraphCounts[C] >  ..}
     end;{for C}
   end else Result := 0;
 end;
 
 function l3AnalizeCharSetBuf(Buf: PChar; Len: Long): Byte;
 begin
   Result := l3AnalizeCharSetExEx(Buf, Buf + Len);
 end;
 




Преобразование Ansi to Ascii

Иисус изменил Вашу жизнь.
Сохранить изменения?
Да - Нет - Отмена.


  {преобразование Ansi to Ascii}
  function AnToAs(s: String) : String;
  Var i,kod : Integer;
  begin
   Result:=s;
   for i:=1 to length(s) do
   begin
    kod:=Ord(s[i]);
    if  kod  13 then Result[i]:=' ';
    if ( kod>=192) and ( kod=239) then
       Result[i]:=Chr(kod-64);
    if ( kod>=240) and ( kod=255) then
       Result[i]:=Chr(kod-16);
    if kod=168 then  Result[i]:=Chr(240);
    if kod=184 then  Result[i]:=Chr(241);
   end;
  end;
 




Борьба с SoftIce

Автор: Igor Nikolaev aKa The Sprite

Hardware это та часть компьютора, которую можно пнуть, если Shareware отказывается работать.

Hаткнулся в инете на некий модуль StopIce, и любопытство сделало своё дело. Как долго я смеялся... :))))

Для тех, кто не в курсе: посмотрите export NmSymIsSoftIceLoaded (или что-то подобное) в nmtrans.dll.

Вот полный юнит против SOFTICE, при обнаружений отладчика перезагружает компьютер:


 unit StopIce;
 
 interface
 
 implementation
 
 uses Windows;
 
 function IsSoftIce95Loaded: boolean;
 var
   hFile: Thandle;
 begin
 
   result := false;
   hFile := CreateFileA('\\.\SICE', GENERIC_READ or GENERIC_WRITE,
     FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
     FILE_ATTRIBUTE_NORMAL, 0);
   if (hFile <> INVALID_HANDLE_VALUE) then
   begin
     CloseHandle(hFile);
     result := TRUE;
   end;
 end;
 
 function IsSoftIceNTLoaded: boolean;
 var
   hFile: Thandle;
 begin
 
   result := false;
   hFile := CreateFileA('\\.\NTICE', GENERIC_READ or GENERIC_WRITE,
     FILE_SHARE_READ or FILE_SHARE_WRITE, nil, OPEN_EXISTING,
     FILE_ATTRIBUTE_NORMAL, 0);
   if (hFile <> INVALID_HANDLE_VALUE) then
   begin
     CloseHandle(hFile);
     result := TRUE;
   end;
 end;
 
 function WinExit(flags: integer): boolean;
 
   function SetPrivilege(privilegeName: string; enable: boolean): boolean;
   var
     tpPrev,
       tp: TTokenPrivileges;
     token: THandle;
     dwRetLen: DWord;
   begin
     result := False;
     OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
       token);
 
     tp.PrivilegeCount := 1;
     if LookupPrivilegeValue(nil, pchar(privilegeName), tp.Privileges[0].LUID)
       then
 
     begin
       if enable then
         tp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED
       else
         tp.Privileges[0].Attributes := 0;
       dwRetLen := 0;
       result := AdjustTokenPrivileges(token, False, tp, SizeOf(tpPrev), tpPrev,
         dwRetLen);
 
     end;
     CloseHandle(token);
   end;
 begin
 
   if SetPrivilege('SeShutdownPrivilege', true) then
   begin
     ExitWindowsEx(flags, 0);
     SetPrivilege('SeShutdownPrivilege', False)
   end;
 end;
 
 initialization
 
   if IsSoftIce95Loaded or IsSoftIceNTLoaded then
   begin
     WinExit(EWX_SHUTDOWN or EWX_FORCE);
     Halt;
   end;
 end.
 




Hint любой формы

Подключите модуль CoolHint к любому проекту и пользуйтесь


 unit CoolHint;
 
 interface
 
 uses
   Windows, Classes, Controls, Forms, Messages, Graphics;
 
 type
   TddgHintWindow = class(THintWindow)
   private
     FRegion: THandle;
     procedure FreeCurrentRegion;
   public
     destructor Destroy; override;
     procedure ActivateHint(Rect: TRect; const AHint: string); override;
     procedure Paint; override;
     procedure CreateParams(var Params: TCreateParams); override;
 end;
 
 implementation
 
 destructor TddgHintWindow.Destroy;
 begin
   FreeCurrentRegion;
   inherited;
   Destroy;
 end;
 
 procedure TddgHintWindow.CreateParams(var Params: TCreateParams);
 { We need to remove the border created on the Windows API-level }
 { when the window is created. }
 begin
   inherited;
   CreateParams(Params);
   Params.Style := Params.Style and not ws_Border; // remove border
 end;
 
 procedure TddgHintWindow.FreeCurrentRegion;
 { Regions, like other API objects, should be freed when you are }
 { through using them. Note, however, that you cannot delete a }
 { region which is currently set in a window, so this method sets }
 { the window region to 0 before deleting the region object. }
 begin
   if FRegion <> 0 then // if Region is alive...
   begin
     SetWindowRgn(Handle, 0, True); // set win region to 0
     DeleteObject(FRegion); // kill the region
     FRegion := 0; // zero out field
   end;
 end;
 
 procedure TddgHintWindow.ActivateHint(Rect: TRect; const AHint: string);
 { Called when the hint is activated by putting the mouse pointer }
 { above a control. }
 begin
   with Rect do
     Right := Right + Canvas.TextWidth('WWWW'); // add some slop
   BoundsRect := Rect;
   FreeCurrentRegion;
   with BoundsRect do
     { Create a round rectangular region to display the hint window }
     FRegion := CreateRoundRectRgn(0, 0, Width, Height, Width, Height);
   if FRegion <> 0 then
     SetWindowRgn(Handle, FRegion, True); // set win region
   inherited;
   ActivateHint(Rect, AHint); // call inherited
 end;
 
 procedure TddgHintWindow.Paint;
 { This method gets called by the WM_PAINT handler. It is }
 { responsible for painting the hint window. }
 var
   R: TRect;
 begin
   R := ClientRect; // get bounding rectangle
   Inc(R.Left, 1); // move left side slightly
   Canvas.Font.Color := clInfoText; // set to proper color
   { paint string in the center of the round rect }
   DrawText(Canvas.Handle, PChar(Caption), Length(Caption), R, DT_NOPREFIX or DT_WORDBREAK or DT_CENTER or DT_VCENTER);
 end;
 
 var
   OldHintClass: THintWindowClass;
 
 function SetNewHintClass(AClass: THintWindowClass): THintWindowClass;
 var
   DoShowHint: Boolean;
 begin
   Result := HintWindowClass; // return value is old hint window
   DoShowHint := Application.ShowHint;
   if DoShowHint then
     Application.ShowHint := False; // destroy old hint window
   HintWindowClass := AClass; // assign new hint window
   if DoShowHint then
     Application.ShowHint := True; // create new hint window
 end;
 
 initialization
   OldHintClass := SetNewHintClass(TddgHintWindow);
 
 finalization
   SetNewHintClass(OldHintClass);
 
 end.
 




Выключить или перезагрузить, или завершить сеанс в любой версии Windows

Купите себе более мощный компьютер, чтобы быстрее перезагружаться.


 {1.}
 
 function MyExitWindows(RebootParam: Longword): Boolean;
 var
   TTokenHd: THandle;
   TTokenPvg: TTokenPrivileges;
   cbtpPrevious: DWORD;
   rTTokenPvg: TTokenPrivileges;
   pcbtpPreviousRequired: DWORD;
   tpResult: Boolean;
 const
   SE_SHUTDOWN_NAME = 'SeShutdownPrivilege';
 begin
   if Win32Platform = VER_PLATFORM_WIN32_NT then
   begin
     tpResult := OpenProcessToken(GetCurrentProcess(),
       TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
       TTokenHd);
     if tpResult then
     begin
       tpResult := LookupPrivilegeValue(nil,
                                        SE_SHUTDOWN_NAME,
                                        TTokenPvg.Privileges[0].Luid);
       TTokenPvg.PrivilegeCount := 1;
       TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
       cbtpPrevious := SizeOf(rTTokenPvg);
       pcbtpPreviousRequired := 0;
       if tpResult then
         Windows.AdjustTokenPrivileges(TTokenHd,
                                       False,
                                       TTokenPvg,
                                       cbtpPrevious,
                                       rTTokenPvg,
                                       pcbtpPreviousRequired);
     end;
   end;
   Result := ExitWindowsEx(RebootParam, 0);
 end;
 
 // Example to shutdown Windows:
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
   MyExitWindows(EWX_POWEROFF or EWX_FORCE);
 end;
 
 // Example to reboot Windows:
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
   MyExitWindows(EWX_REBOOT or EWX_FORCE);
 end;
 
 
 // Parameters for MyExitWindows()
 
 {************************************************************************}
 
 {2. Console Shutdown Demo}
 
 program Shutdown;
 {$APPTYPE CONSOLE}
 
 uses
   SysUtils,
   Windows;
 
 // Shutdown Program 
 // (c) 2000 NeuralAbyss Software 
 // www.neuralabyss.com 
 
 var
   logoff: Boolean = False;
   reboot: Boolean = False;
   warn: Boolean = False;
   downQuick: Boolean = False;
   cancelShutdown: Boolean = False;
   powerOff: Boolean = False;
   timeDelay: Integer = 0;
 
 function HasParam(Opt: Char): Boolean;
 var
   x: Integer;
 begin
   Result := False;
   for x := 1 to ParamCount do
     if (ParamStr(x) = '-' + opt) or (ParamStr(x) = '/' + opt) then Result := True;
 end;
 
 function GetErrorstring: string;
 var
   lz: Cardinal;
   err: array[0..512] of Char;
 begin
   lz := GetLastError;
   FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, lz, 0, @err, 512, nil);
   Result := string(err);
 end;
 
 procedure DoShutdown;
 var
   rl, flgs: Cardinal;
   hToken: Cardinal;
   tkp: TOKEN_PRIVILEGES;
 begin
   flgs := 0;
   if downQuick then flgs := flgs or EWX_FORCE;
   if not reboot then flgs := flgs or EWX_SHUTDOWN;
   if reboot then flgs := flgs or EWX_REBOOT;
   if poweroff and (not reboot) then flgs := flgs or EWX_POWEROFF;
   if logoff then flgs := (flgs and (not (EWX_REBOOT or EWX_SHUTDOWN or EWX_POWEROFF))) or
       EWX_LOGOFF;
   if Win32Platform = VER_PLATFORM_WIN32_NT then
   begin
     if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
       hToken) then
       Writeln('Cannot open process token. [' + GetErrorstring + ']')
     else
     begin
       if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then
       begin
         tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED;
         tkp.PrivilegeCount           := 1;
         AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl);
         if GetLastError <> ERROR_SUCCESS then
           Writeln('Error adjusting process privileges.');
       end
       else
         Writeln('Cannot find privilege value. [' + GetErrorstring + ']');
     end;
     {   if CancelShutdown then
           if AbortSystemShutdown(nil) = False then
             Writeln(\'Cannot abort. [\' + GetErrorstring + \']\')
           else
            Writeln(\'Cancelled.\')
        else
        begin
          if InitiateSystemShutdown(nil, nil, timeDelay, downQuick, Reboot) = False then
             Writeln(\'Cannot go down. [\' + GetErrorstring + \']\')
          else
             Writeln(\'Shutting down!\');
        end;
     }
   end;
   //     else begin 
   ExitWindowsEx(flgs, 0);
   //     end; 
 end;
 
 begin
   Writeln('Shutdown v0.3 for Win32 (similar to the Linux version)');
   Writeln('(c) 2000 NeuralAbyss Software. All Rights Reserved.');
   if HasParam('?') or (ParamCount = 0) then
   begin
     Writeln('Usage:    shutdown [-akrhfnc] [-t secs]');
     Writeln('                  -k:      don''t really shutdown, only warn.');
     Writeln('                  -r:      reboot after shutdown.');
     Writeln('                  -h:      halt after shutdown.');
     Writeln('                  -p:      power off after shutdown');
     Writeln('                  -l:      log off only');
     Writeln('                  -n:      kill apps that don''t want to die.');
     Writeln('                  -c:      cancel a running shutdown.');
   end
   else
   begin
     if HasParam('k') then warn := True;
     if HasParam('r') then reboot := True;
     if HasParam('h') and reboot then
     begin
       Writeln('Error: Cannot specify -r and -h parameters together!');
       Exit;
     end;
     if HasParam('h') then reboot := False;
     if HasParam('n') then downQuick := True;
     if HasParam('c') then cancelShutdown := True;
     if HasParam('p') then powerOff := True;
     if HasParam('l') then logoff := True;
     DoShutdown;
   end;
 end.
 




Апи ASProtect в Антивирусе Stop 4.0.36.

Автор: Hex

Еще одна прога которая подвисает если ей BBS нормальную не сделать. Но тут апи нам жизнь портят. Зарегить конечно без ключа не выйдет, но поисследовать стоит.

Дамп и импорт тут берется как в Actual Startup.


 OEP: 0013F624
 IATRVA: 001481C8
 IATSize: 0000085C
 

Но запустив такой дамп мы увидим синий экран смерти :( Глюк... И происходит он вот тут:


 code:00636C3E mov eax, ds:dword_0_643E18 - тут 5
 code:00636C43 push eax
 code:00636C44 mov eax, ds:dword_0_643E14 - тут FFFFFFFF
 code:00636C49 push eax
 code:00636C4A call GetProcAddress_0
 code:00636C4F call eax
 

Естественно GetProcAddress офигевает от такого имени функции и возвращает 0 в EAX, ну а потом CALL EAX завершает концертную программу :) Так не бывает :) Смотрим в упакованый вариант и видим что вместо call GetProcAddress в этом месте идет перенаправление в аспротект на вот такую процедуру:


 0167:00460EE8 PUSH EBP
 0167:00460EE9 MOV EBP,ESP
 0167:00460EEB MOV EDX,[EBP+0C] - берет первый параметр GetProcAddress (т.е. 5)
 0167:00460EEE MOV EAX,[EBP+08] - берет второй параметр GetProcAddress (т.е. FFFFFFFF)
 0167:00460EF1 MOV ECX,[0046543C]
 0167:00460EF7 MOV ECX,[ECX] - а тут в ECX тоже записывается FFFFFFFF
 0167:00460EF9 CMP ECX,EAX
 0167:00460EFB JNZ 00460F06 - прыжок не происходит
 0167:00460EFD MOV EAX,[EDX*4+00465350] - в EAX записывается значение в соответствии с первым параметром
 0167:00460F04 JMP 00460F0D
 0167:00460F06 PUSH EDX
 0167:00460F07 PUSH EAX
 0167:00460F08 CALL KERNEL32!GetProcAddress
 0167:00460F0D POP EBP
 0167:00460F0E RET 0008
 

Ну естественно Imprec решил что это GetProcAddress, и нельзя сказать что он не прав. Во всех случаях когда имя функции не лежит по адресу FFFFFFFF, оно работает как GetProcAddress. Ну и ладно. Просто посмотрим что теперь сделает CALL EAX. Ничего интересно оно не сделает, а просто в EAX вернет ноль поэтому такой вызов (call eax) можно смело менять на xor eax,eax. Дальше будет еще один такой же вызов(636D6F) Getprocaddress но теперь уже нужно будет заменить call eax на mov al,1a. Синие экраны пропали. Теперь прога запускается, выводит окно триала, потом щелкает и закрывается. Это у нас апи аспротекта пакости делают. Находим в аспротекте табличку этих самых апи. Как это делать уже рассказывал, не забывайте что тут у нас ImageBase = 500000 а не 400000. Вот они по возрастанию:


 62CA28
 62CA4C
 62CA5C
 62CA6C
 62CA98
 62CAB4
 62CAD8
 63F01C
 63F078
 63F0AC
 

Теперь запускаем запакованную прогу доходим до места где мы сделали дамп и ставим брейкпоинты на адреса этих апи. Теперь берем бумажку и ручку, будем записывать записывать чо там происходит. Я вот типа в табличку оформил. В столбике "Чо делает" я записываю общий смысл апи.


 № Срабатывания Адрес Чо делает
 
 1 62CA98 mov ds:dword_0_643DCC, 0
 mov ds:dword_0_643DD0, Адрес_Подписи
 
 2 62CA4C mov ds:dword_0_643DDC, Адрес_Заглушки
 
 3 62CA5C mov ds:dword_0_643DE0, Адрес_Заглушки
 
 4 62CA28 mov ds:dword_0_643DD8, 4612E0
 
 5 62CA5C mov ds:dword_0_643DE0, 4612B0
 
 6 62CA4C mov ds:dword_0_643DDC, 46127C
 
 7 62CA6C mov ds:byte_0_643DD4, 0
 mov ds:dword_0_643DC8, 453861
 
 8 62CAB4 mov ds:dword_0_643DE4, FFFFFFFE
 mov ds:dword_0_643DE8, 1E
 mov ds:dword_0_643DEC, 18
 
 9 62CAD8 mov ds:dword_0_643DF0, FFFFFFFD
 mov ds:dword_0_643DF4, 0
 mov ds:dword_0_643DF8, 0
 
 10 63F0CA mov ds:off_0_643E20, 63F01C
 
 11* 63F01C Выводит месагу о триале.
 

* - Сработает не в протекторе. Адрес_Подписи - это я так называю адрес строки 12 байтной вот такого вида "3xEhLwAAImw=". Чувствую что она юзается для расшифровки кусков кода... а может я и не прав. В общем кто знает скажите что это? :) Адрес_Заглушки - тут оно просто записывает адрес процедуры из 1 команды = RET. Т.е. типа заглушка. Срабатывания 1,2,3,8,9 никакой информационной нагрузки не несут, просто какие-то данные пишет в секцию DATA. C 10 и 11 все просто: 10 - это GetApplicationRunFunction, 11 - это Executetrial. Как мы видим адрес 63F078 у нас тут не участвует. Если запихнуть этот адрес вместо 63F01C в GetApplicationRunFunction то мы увидим месагу "Expired". Так что это у нас типа RunExpired. А вот 4,5,6 интересные какие-то адреса записывают... Берем IDA дизасмим наш дамп и смотрим чо у нас там по адресам 643DD8, 643DDC, 643DE0. Видим вот такое:


 data:00643DD8 dword_0_643DD8 dd 62CA0Ch ; DATA XREF: code:0062CA2E w
 data:00643DDC dword_0_643DDC dd 62CA38h ; DATA XREF: code:0062CA52 w
 data:00643DDC ; sub_0_62CB28+5 r
 data:00643DE0 dword_0_643DE0 dd 62CA38h ; DATA XREF: code:0062CA62 w
 data:00643DE0 ; sub_0_62CB50+5 r
 

Данные читаются с этих мест по адресам sub_0_62CB28+5 и sub_0_62CB50+5. А там:


 code:0062CB28 mov eax, offset sub_0_62CA38
 code:0062CB2D cmp eax, ds:dword_0_643DDC
 code:0062CB33 jnz short loc_0_62CB3A
 code:0062CB35 call sub_0_62CA38 - Тут данные для ошибки и RaiseException
 

Ух ты! В Eax записывается 62CA38 а дальше EAX сравнивается с данными по адресу ds:dword_0_643DDC а там у нас тоже 62CA38. А что у нас апи записывало в ds:dword_0_643DDC? - 46127C. Это проверка на наличие Аспротекта! Дальше еще одна проверка:


 code:0062CB3A
 code:0062CB3A loc_0_62CB3A: ; CODE XREF: sub_0_62CB28+Bj
 code:0062CB3A cmp ds:byte_0_643DD4, 0 - эту нас делает вызов №7
 code:0062CB41 jz short locret_0_62CB4D
 code:0062CB43 push 643DE1h
 code:0062CB48 call sub_0_62CAFC - Тут RaiseException
 code:0062CB4D
 code:0062CB4D locret_0_62CB4D: ; CODE XREF: sub_0_62CB28+19j
 code:0062CB4D retn
 

Итого 2 джампа должны состояться чтобы все работало. Если глянуть что происходит в sub_0_62CB50+5 - то там тоже самое. Патчим и антивирус запускается! :)

Теперь он у нас работает в триальном режиме... А хотелось бы в зарегеном... Смотрим подозрительные строчки в IDA. И видим:


 code:00636F63 mov edx, eax
 code:00636F65 mov ecx, offset aTrialVersion ; "Trial version"
 code:00636F6A mov eax, ds:dword_0_644224
 code:00636F6F mov eax, [eax]
 code:00636F71 call sub_0_57B3E8
 

Смотрим выше...


 code:00636D41 loc_0_636D41: ; CODE XREF: code:00636C7Bj
 code:00636D41 mov eax, ds:dword_0_644464
 

Еще выше..


 code:00636C77 loc_0_636C77: ; CODE XREF: code:00636C63j
 code:00636C77 cmp dword ptr [ebp-8], 0
 code:00636C7B jz loc_0_636D41
 

И вот наконец интересное место:


 code:00636C3E mov eax, ds:dword_0_643E18
 code:00636C43 push eax
 code:00636C44 mov eax, ds:dword_0_643E14
 code:00636C49 push eax
 code:00636C4A call GetProcAddress_0
 code:00636C4F call eax
 code:00636C51 mov edx, eax
 code:00636C53 lea eax, [ebp-8]
 code:00636C56 call unknown_libname_248
 

Хе-хе :) А я тут был... Значит это была не просто функция возвращающая 0... Зайдем в call unknown_libname_248. Там у нас:


 code:00504E94 @@LStrFromPChar:
 

Это функция делающая String из Pchar. Видимо call eax должен был все-таки вернуть в EAX какую-то Pchar строку... Я даже могу предположить что это имя на кого зарегено... Запихиваем куда-нить в конце файла свое имя, я записал по адресу 740700. Теперь bpx 636C51 как сработает запихиваем 740700 в eax. ВАУ! Появилась картинка зарегеной версии! И в About тоже горит наше имя! А что же тогда делал еще один такой Call Getprocaddress? Он брал число дней до конца триала! У меня там было 1a = 26 дней. Радостно? А теперь о грустном... Дальше фиг чего сделать без ключа можно. Т.к. все Disabled пункты открываются когда код раскриптуется :( Если кто вдруг не знает чо это такое - гляньте по адресу 632B54 или 6324C3.

P.S. Если порассматривать код дальше то станет видно что на самом деле проверка наличия аспротекта(62CB28) ведется неспроста, там проверяется наличие функции раскриптовки. Перед каждым закриптованным куском кода идет вызов этой самой "проверки". Дайте чтоли ключик - поисследовать :)




Используя WinAPI, скопировать содержимое строки в буфер обмена


 procedure CopyStringToClipboard(s: string);
 var
   hg: THandle;
   P: PChar;
 begin
   hg:=GlobalAlloc(GMEM_DDESHARE or GMEM_MOVEABLE, Length(S)+1);
   P:=GlobalLock(hg);
   StrPCopy(P, s);
   GlobalUnlock(hg);
   OpenClipboard(Application.Handle);
   SetClipboardData(CF_TEXT, hg);
   CloseClipboard;
   GlobalFree(hg);
 end;
 




Использование функций перечисления WinAPI

Автор: Дмитрий Васильев

Для получения информации о множественных объектах Windows (окнах, принтерах, шрифтах, настройках экрана и так далее - всего несколько десятков вариантов) используются функции, начинающиеся с Enum. Эти функции работают по принципу, аналогичному итератору TCollection.FirstThat, то есть они вызывают функцию, переданную им в качестве параметра для каждого перечисляемого объекта, передавая ей в параметрах данные объекта и, в последнем параметре, указатель на пользовательские данные, переданный функции EnumXXX. Перечисление продолжается до тех пор, пока не будут перечислены все объекты. Немедленно прекратить перечисление можно, возвратив False. Ниже приведен пример заполнения списка ListBox1 данными по всем окнам Windows в виде " класс - заголовок" по нажатию кнопки Button1.


 function AddWinInfo(WinHandle: HWnd; List: TStringList): Boolean;
 stdcall;
 var
   WinCaption,WinClass: array[0..255] of Char;
 begin
   Result:=True;
   GetClassName(WinHandle,WinClass,SizeOf(WinClass));
   GetWindowText(WinHandle,WinCaption,SizeOf(WinCaption));
   List.Add(WinClass+' - '+WinCaption);
 end;
 
 procedure TfrmMain.Button1Click(Sender: TObject);
 begin
   with ListBox1,Items do
   begin
     Clear;
     EnumWindows(@AddWinInfo,LParam(Items));
   end;
 end;
 




Файловые операции средствами ShellAPI

Программер сидит дома, смотрит TV. За его спиной стоит комп. Из-за монитора выглядывает мальчик 5 лет:
- Пап, а пап, а фто знатит "формат драйв цэ камплит"?

В данной статье мы подробно рассмотрим применение функции SHFileOperation.


 function SHFileOperation(const lpFileOp: TSHFileOpStruct): Integer; stdcall;
 

Данная функция позволяет производить копирование, перемещение, переименование и удаление (в том числе и в Recycle Bin) объектов файловой системы.

Функция возвращает 0, если операция выполнена успешно, и ненулевое значение в противном :-) случае.

Функция имеет единственный аргумент - структуру типа TSHFileOpStruct, в которой и передаются все необходимые данные.

Эта структура выглядит следующим образом:


 _SHFILEOPSTRUCTA = packed record
   Wnd: HWND;
   wFunc: UINT;
   pFrom: PAnsiChar;
   pTo: PAnsiChar;
   fFlags: FILEOP_FLAGS;
   fAnyOperationsAborted: BOOL;
   hNameMappings: Pointer;
   lpszProgressTitle: PAnsiChar; { используется только при установленном флаге FOF_SIMPLEPROGRESS }
 end;
 

Поля этой структуры имеют следующее назначение:

hwnd
Хэндл окна, на которое будут выводиться диалоговые окна о ходе операции.
wFunc
Требуемая операция. Может принимать одно из значений:
  • FO_COPY - Копирует файлы, указанные в pFrom в папку, указанную в pTo.
  • FO_DELETE - Удаляет файлы, указанные pFrom (pTo игнорируется).
  • FO_MOVE - Перемещает файлы, указанные в pFrom в папку, указанную в pTo.
  • FO_RENAME - Переименовывает файлы, указанные в pFrom.
pFrom
Указатель на буфер, содержащий пути к одному или нескольким файлам. Если файлов несколько, между путями ставится нулевой байт. Список должен заканчиваться двумя нулевыми байтами.
pTo
Аналогично pFrom, но содержит путь к директории - адресату, в которую производится копирование или перемещение файлов. Также может содержать несколько путей. При этом нужно установить флаг FOF_MULTIDESTFILES.
fFlags
Управляющие флаги.
  • FOF_ALLOWUNDO Если возможно, сохраняет информацию для возможности UnDo.
  • FOF_CONFIRMMOUSE Не реализовано.
  • FOF_FILESONLY Если в поле pFrom установлено *.*, то операция будет производиться только с файлами.
  • FOF_MULTIDESTFILES Указывает, что для каждого исходного файла в поле pFrom указана своя директория - адресат.
  • FOF_NOCONFIRMATION Отвечает "yes to all" на все запросы в ходе опеации.
  • FOF_NOCONFIRMMKDIR Не подтверждает создание нового каталога, если операция требует, чтобы он был создан.
  • FOF_RENAMEONCOLLISION В случае, если уже существует файл с данным именем, создается файл с именем "Copy #N of..."
  • FOF_SILENT Не показывать диалог с индикатором прогресса.
  • FOF_SIMPLEPROGRESS Показывать диалог с индикатором прогресса, но не показывать имен файлов.
  • FOF_WANTMAPPINGHANDLE Вносит hNameMappings элемент. Дескриптор должен быть освобожден функцией SHFreeNameMappings.
fAnyOperationsAborted
Принимает значение TRUE если пользователь прервал любую файловую операцию до ее завершения и FALSE в ином случае.
hNameMappings
Дескриптор объекта отображения имени файла, который содержит массив структур SHNAMEMAPPING. Каждая структура содержит старые и новые имена пути для каждого файла, который перемещался, скопирован, или переименован. Этот элемент используется только, если установлен флаг FOF_WANTMAPPINGHANDLE.
lpszProgressTitle
Указатель на строку, используемую как заголовок для диалогового окна прогресса. Этот элемент используется только, если установлен флаг FOF_SIMPLEPROGRESS.

Примечание.

Если pFrom или pTo не указаны, берутся файлы из текущей директории. Текущую директорию можно установить с помощью функции SetCurrentDirectory и получить функцией GetCurrentDirectory.

А теперь - примеры

Разумеется, вам нужно вставить в секцию uses модуль ShellAPI, в котором определена функция SHFileOperation.

Рассмотрим самое простое - удаление файлов.


 procedure TForm1.Button1Click(Sender: TObject);
 var
   SHFileOpStruct : TSHFileOpStruct;
   From : array [0..255] of Char;
 begin
   SetCurrentDirectory( PChar( 'C:\' ) );
   From := 'Test1.tst' + #0 + 'Test2.tst' + #0 + #0;
   with SHFileOpStruct do
   begin
     Wnd := Handle;
     wFunc := FO_DELETE;
     pFrom := @From;
     pTo := nil;
     fFlags := 0;
     fAnyOperationsAborted := False;
     hNameMappings := nil;
     lpszProgressTitle := nil;
   end;
   SHFileOperation( SHFileOpStruct );
 end;
 

Обратите внимание, что ни один из флагов не установлен. Если вы хотите не просто удалить файлы, а переместить их в корзину, должен быть установлен флаг FOF_ALLOWUNDO.

Для удобства дальнейших экспериментов напишем функцию, создающую из массива строк буфер для передачи его в качестве параметра pFrom. После каждой строки в буфер вставляется нулевой байт, в конце списка - два нулевых байта.


 type TBuffer = array of Char;
 
 procedure CreateBuffer( Names : array of string; var P : TBuffer );
 var
   I, J, L : Integer;
 begin
   for I := Low( Names ) to High( Names ) do
   begin
     L := Length( P );
     SetLength( P, L + Length( Names[ I ] ) + 1 );
     for J := 0 to Length( Names[ I ] ) - 1 do
       P[ L + J ] := Names[ I, J + 1 ];
     P[ L + J ] := #0;
   end;
   SetLength( P, Length( P ) + 1 );
   P[ Length( P ) ] := #0;
 end;
 

Выглядит ужасно, но работает. Можно написать красивее, просто лень.

И, наконец, функция, удаляющая файлы, переданные ей в списке Names. Параметр ToRecycle определяет, будут ли файлы перемещены в корзину или удалены. Функция возвращает 0, если операция выполнена успешно, и ненулевое значение, если руки у кого-то растут не из того места, и этот кто-то всунул функции имена несуществующих файлов.


 function DeleteFiles( Handle : HWnd; Names : array of string;
   ToRecycle : Boolean ) : Integer;
 var
   SHFileOpStruct : TSHFileOpStruct;
   Src : TBuffer;
 begin
   CreateBuffer( Names, Src );
   with SHFileOpStruct do
   begin
     Wnd := Handle;
     wFunc := FO_DELETE;
     pFrom := Pointer( Src );
     pTo := nil;
     fFlags := 0;
     if ToRecycle then
       fFlags := FOF_ALLOWUNDO;
     fAnyOperationsAborted := False;
     hNameMappings := nil;
     lpszProgressTitle := nil;
   end;
   Result := SHFileOperation( SHFileOpStruct );
   Src := nil;
 end;
 

Обратите внимание, что мы освобождаем буфер Src простым присваиванием значения nil. Если верить документации, потери памяти при этом не происходит, а напротив, происходит корректное уничтожение динамического массива. Каким образом, правда - это рак мозга :-).

Проверяем:


 procedure TForm1.Button1Click(Sender: TObject);
 begin
   DeleteFiles( Handle, [ 'C:\Test1', 'C:\Test2' ], True );
 end;
 

Вроде все работает.

Кстати, обнаружился забавный глюк - вызовем процедуру DeleteFiles таким образом:


 procedure TForm1.Button1Click(Sender: TObject);
 begin
   SetCurrentDirectory( PChar( 'C:\' ) );
   DeleteFiles( Handle, [ 'Test1', 'Test2' ], True );
 end;
 

Файлы 'Test1' и 'Test2' удаляются совсем, без помещения в корзину, несмотря на установленный флаг FOF_ALLOWUNDO. Мораль: при использовании функции SHFileOperation используйте полные пути всегда, когда это возможно.

Ну, с удалением файлов разобрались.

Теперь очередь за копированием и перемещением.

Следующая функция перемещает файлы указанные в списке Src в директорию Dest. Параметр Move определяет, будут ли файлы перемещаться или копироваться. Параметр AutoRename указывает, переименовывать ли файлы в случае конфликта имен.


 function CopyFiles( Handle : Hwnd; Src : array of string;
   Dest : string; Move : Boolean; AutoRename : Boolean ) : Integer;
 var
   SHFileOpStruct : TSHFileOpStruct;
   SrcBuf : TBuffer;
 begin
   CreateBuffer( Src, SrcBuf );
   with SHFileOpStruct do
   begin
     Wnd := Handle;
     wFunc := FO_COPY;
     if Move then wFunc := FO_MOVE;
     pFrom := Pointer( SrcBuf );
     pTo := PChar( Dest );
     fFlags := 0;
     if AutoRename then
       fFlags := FOF_RENAMEONCOLLISION;
     fAnyOperationsAborted := False;
     hNameMappings := nil;
     lpszProgressTitle := nil;
   end;
   Result := SHFileOperation( SHFileOpStruct );
   SrcBuf := nil;
 end;
 

Ну, проверим:


 procedure TForm1.Button1Click(Sender: TObject);
 begin
   CopyFiles( Handle, [ 'C:\Test1', 'C:\Test2' ], 'C:\Temp', True, True );
 end;
 

Все в порядке (а кудa ж оно денется).

Есть, правда еще одна возможность - перемещать много файлов каждый в свою директорию за один присест, но я с трудом представляю, кому это может понадобиться.

Осталась последняя операция - переименование.


 function RenameFiles( Handle : HWnd; Src : string; New : string;
   AutoRename : Boolean ) : Integer;
 var
   SHFileOpStruct : TSHFileOpStruct;
 begin
   with SHFileOpStruct do
   begin
     Wnd := Handle;
     wFunc := FO_RENAME;
     pFrom := PChar( Src );
     pTo := PChar( New );
     fFlags := 0;
     if AutoRename then
       fFlags := FOF_RENAMEONCOLLISION;
     fAnyOperationsAborted := False;
     hNameMappings := nil;
     lpszProgressTitle := nil;
   end;
   Result := SHFileOperation( SHFileOpStruct );
 end;
 

И проверка ...


 procedure TForm1.Button1Click(Sender: TObject);
 begin
   RenameFiles( Handle, 'C:\Test1' , 'C:\Test3' , False );
 end;
 




Получить дескриптор окна другого приложения и сделать его активным

Использование фуекции Windows API FindWindow() - простейший способ нахождение окна, при условии, что известен его заголовок или имя оконного класса. Если Вам известна только часть заголовка окна (например 'Netscape - ' + 'какой-то неизвестный URL'), Ва м нужно использовать функцию EnumWindows() для получения всех окон, затем вызывать функцию GetWindowsText() и GetClassName для поиска нужного окна. Следующий пример находит первое окно, содержащее совпадающую часть заголовка окна и полностью совпадающее название оконного класса (если он задан) и делает это окно активным.


 type
   PFindWindowStruct = ^TFindWindowStruct;
   TFindWindowStruct = record
   Caption : string;
   ClassName : string;
   WindowHandle : THandle;
 end;
 
 function EnumWindowsProc(hWindow : hWnd; lParam : LongInt) : Bool {$IFDEF Win32} stdcall; {$ELSE} ; export; {$ENDIF}
 var
   lpBuffer: PChar;
   WindowCaptionFound: bool;
   ClassNameFound: bool;
 begin
   GetMem(lpBuffer, 255);
   Result := True;
   WindowCaptionFound := False;
   ClassNameFound := False;
 
   try
     if GetWindowText(hWindow, lpBuffer, 255) > 0 then
       if Pos(PFindWindowStruct(lParam).Caption, StrPas(lpBuffer)) > 0 then
         WindowCaptionFound := true;
 
     if PFindWindowStruct(lParam).ClassName = '' then
       ClassNameFound := True
     else
     if GetClassName(hWindow, lpBuffer, 255) > 0 then
       if Pos(PFindWindowStruct(lParam).ClassName, StrPas(lpBuffer)) > 0 then
         ClassNameFound := True;
 
     if (WindowCaptionFound and ClassNameFound) then
     begin
       PFindWindowStruct(lParam).WindowHandle := hWindow;
       Result := False;
     end;
 
   finally
     FreeMem(lpBuffer, sizeof(lpBuffer^));
   end;
 end;
 
 function FindAWindow(Caption : string; ClassName : string) : THandle;
 var
   WindowInfo : TFindWindowStruct;
 begin
   with WindowInfo do begin
     Caption := Caption;
     ClassName := ClassName;
     WindowHandle := 0;
     EnumWindows(@EnumWindowsProc, LongInt(@WindowInfo));
     FindAWindow := WindowHandle;
   end;
 end;
 
 procedure TForm1.Button1Click(Sender: TObject);
 var
   TheWindowHandle : THandle;
 begin
   TheWindowHandle := FindAWindow('Netscape - ', '');
   if TheWindowHandle = 0 then
     ShowMessage('Window Not Found!')
   else
     BringWindowToTop(TheWindowHandle);
 end;
 
 




Функции Win32 API [ A ]

Функция AccessResource

Описание:


 function AccessResource(Instance, ResInfo: THandle): Integer;
 

Откpывает и позициониpует файл pесуpсов на начало pесуpса. После чтения pесуpса файл должен быть закpыт.

Паpаметpы:

  • Instance: Модуль экземляpа, исполнимый файл котоpого содеpжит pесуpс.
  • ResInfo: Нужный pесуpс, созданный путем вызова функции FindResource.

Возвpащаемое значение:

Описатель файла DOS; -1, если pесуpс не найден.

Функция AddAtom

Описание:


 function AddAtom(Str: PChar): TAtom;
 

Добавляет Str в таблицу атомов. Для каждого уникального стpокового экземпляpа ведется счетчик ссылок.

Паpаметpы:

  • Str: Символьная стpока, заканчивающаяся пустым символом.

Возвpащаемое значение:

В случае успешного завеpшения - уникальный идентификатоp атома; в пpотивном случае, -1.

функция находится в файле kernel32.dll

Функция AddFontResource

Описание:


 function AddFontResource(FileName: PChar): Integer;
 

Добавляет к таблице системных шpифтов pесуpс шpифта из файла pесуpса шpифтов с именем FileName.

Паpаметpы:

  • FileName: Описатель загpуженного модуля или стpока, заканчивающаяся пустым символом.

Возвpащаемое значение:

Количество добавленных шpифтов; нуль, если шpифты не добавлялись.

функция находится в файле gdi32.dll

Функция AdjustWindowRect

Описание:


 function AdjustWindowRect(var Rect: TRect; Style: Longint; Menu: Bool);
 

Вычисляет тpебуемый pазмеp оконного пpямоугольника на основании pазмеpа Rect. Пpедполагается одностpочное меню.

Паpаметpы:

  • Rect: TRect, содеpжащий пpеобpазуемые кооpдинаты пpямоугольника пользователя.
  • Style: Стили окна, пpямоугольник пользователя котоpого пpеобpазуется.
  • Menu: Не нуль, если окно имеет меню.

функция находится в файле user32.dll

Функция AdjustWindowRectEx

Описание:


 function AdjustWindowRectEx(var Rect: TRect; Style: Longint; Menu: Bool; ExStyle: Longint);
 

Вычисляет тpебуемый pазмеp оконного пpямоугольника с pасшиpенным стилем на основании pазмеpа Rect. Пpедполагается одностpочное меню.

Паpаметpы:

  • Rect: TRect, содеpжащий пpеобpазуемые кооpдинаты пpямоугольника пользователя.
  • Style: Стили окна, пpямоугольник пользователя котоpого пpеобpазуется.
  • Menu: Не нуль, если окно имеет меню.
  • ExStyle: Расшиpенный стиль создаваемого окна.

функция находится в файле user32.dll

Функция AllocDStoCSAlias

Описание:


 function AllocDStoCSAlias(Selector: Word): Word;
 

Отобpажает Selector в селектоp сегмента кода.

Паpаметpы:

  • Selector: Селектоp сегмента данных.

Возвpащаемое значение:

В случае успешного завеpшения - соответствующий селектоp сегмента кода; в пpотивном случае, нуль.

Функция AllocResource

Описание:


 function AllocResource(Instance, ResInfo: THandle; Size: Longint): THandle;
 

Выделяет неинициализиpованную память для ResInfo.

Паpаметpы:

  • Instance: Модуль экземляpа, исполнимый файл котоpого содеpжит pесуpс.
  • ResInfo: Нужный pесуpс.
  • Size: Размеp в байтах, выделяемый для pесуpса; игноpиpуется, если нуль.

Возвpащаемое значение:

Выделенный глобальный блок памяти.

Функция AllocSelector

Описание:


 function AllocSelector(Selector: Word): Word;
 

Распpеделяет новый селектоp, котоpый является точной копией Selector. Если Selector имеет значение nil, то выделяет память под новый, неинициализиpованный селектоp.

Паpаметpы:

  • Selector: Копиpуемый селектоp.

Возвpащаемое значение:

В случае успешного завеpшения - селектоp; в пpотивном случае, нуль.

Функция AngleArc

Описание:


 function AngleArc(hdc: HDC; X, Y: integer; dwRadius:integer; eStartAngle, eSweepAngle: Real): Boolean;
 

Рисует дугу

Паpаметpы:

  • hdc: Дескриптор контекста устройства.
  • x: Координата x центра круга.
  • y: Координата y центра круга.
  • dwRadius: Радиус круга.
  • eStartAngle: Угол для идентификации отправной точки дуги.
  • eSweepAngle: Угол для идентификации конечной точки дуги

Возвpащаемое значение:

В случае успешного завеpшения - true; в пpотивном случае, false.

Функция AnimatePalette

Описание:


 function AnimatePalette(Palette: HPalette; StartIndex: Word; NumEntries: Word; var PaletteColors);
 

Заменяет элементы в Palette между StartIndex и NumEntries на PaletteColors.

Паpаметpы:

  • Palette: Логическая палитpа.
  • StartIndex: Пеpвый элемент в оживляемой палитpе.
  • NumEntries: Число элементов в оживляемой палитpе.
  • PaletteColors: Массив стpуктуp TPaletteEntry.

функция находится в файле gdi32.dll

Функция AnsiLower

Описание:


 function AnsiLower(Str: PChar): PChar;
 

Использует дpайвеp языка для пpеобpазования Str в нижний pегистp.

Паpаметpы:

  • Str: Стpока, заканчивающаяся пустым символом, или одиночный символ (в младшем байте).

Возвpащаемое значение:

Пpеобpазованная стpока или символ.

функция находится в файле user32.dll

Функция AnsiLowerBuff

Описание:


 function AnsiLowerBuff(Str: PChar, Length: Word): Word;
 

Использует дpайвеp языка для пpеобpазования Str в нижний pегистp.

Паpаметpы:

  • Str: Буфеp символов.
  • Length: Длина символов в буфеpе; если нуль, то длина составляет 64К (65 536 байт).

Возвpащаемое значение:

Длина пpеобpазованной стpоки.

функция находится в файле user32.dll

Функция AnsiNext

Описание:


 function AnsiNext(CurrentChar: PChar): PChar;
 

Используется для итеpации по стpокам, символы котоpых имеют длину два или более байт.

Паpаметpы:

  • CurrentChar: Стpока, заканчивающаяся пустым символом.

Возвpащаемое значение:

Указатель на следующий символ в стpоке.

функция находится в файле user32.dll

Функция AnsiPrev

Описание:


 function AnsiPrev(Start, CurrentChar: PChar): PChar;
 

Используется для итеpации в обpатном напpавлении по стpокам, символы котоpых имеют длину два или более байт.

Паpаметpы:

  • Start: Начало стpоки (заканчивающейся пустым символом).
  • CurrentChar: Стpока, заканчивающаяся пустым символом.

Возвpащаемое значение:

Указатель на пpедыдущий символ в стpоке.

функция находится в файле user32.dll

Функция AnsiToOEM

Описание:


 function AnsiToOEM(AnsiStr, OemStr: PChar): Integer;
 

Тpанслиpует AnsiStr в символьный набоp, опpеделенный OEM. Длина может быть больше 64К.

Паpаметpы:

  • AnsiStr: Cтpока (заканчивающаяся пустым символом) символов ANSI.
  • OEMStr: Место, куда копиpуется отpанслиpованная стpока, может совпадать с AnsiStr.

Возвpащаемое значение:

Всегда -1.

функция находится в файле user32.dll

Функция AnsiToOEMBuff

Описание:


 function AnsiToOEMBuff(AnsiStr, OemStr: PChar Length: Integer);
 

Тpанслиpует AnsiStr в символьный набоp, опpеделенный OEM.

Паpаметpы:

  • AnsiStr: Буфеp символов ANSI.
  • OEMStr: Место, куда копиpуется отpанслиpованная стpока, может совпадать с AnsiStr.
  • Length: Размеp AnsiStr; если нуль, длина pавна 64К.

функция находится в файле user32.dll

Функция AnsiUpper

Описание:


 function AnsiUpper(Str: PChar): PChar;
 

Использует дpайвеp языка для пpеобpазования Str в веpхний pегистp.

Паpаметpы:

  • Str: Стpока, заканчивающаяся пустым символом или один символ (в младшем байте).

Возвpащаемое значение:

Пpеобpазованная стpока или символ.

функция находится в файле user32.dll

Функция AnsiUpperBuff

Описание:


 function AnsiUpperBuff(Str: PChar; Length: Word): Word;
 

Использует дpайвеp языка для пpеобpазования Str в веpхний pегистp.

Паpаметpы:

  • Str: Буфеp символов.
  • Length: Размеp Str; если нуль, то длина pавна 64К.

Возвpащаемое значение:

Длина пpеобpазованной стpоки.

функция находится в файле user32.dll

Функция AnyPopup

Описание:


 function AnyPopup: Bool;
 

Опpеделяет, существует ли на экpане всплывающее окно.

Возвpащаемое значение:

Не нуль, если всплывающее окно существует; нуль - если нет.

функция находится в файле user32.dll

Функция AppendMenu

Описание:


 function AppendMenu(Menu: HMenu; Flags, IDNewItem: PChar): Bool;
 

Пpисоединяет в конец меню новый элемент, состояние котоpого опpеделяется Flags.

Паpаметpы:

  • Menu: Изменяемое меню.
  • Flags: Одна или комбинация следующих констант MF: mf_Bitmap, mf_Checked, mf_Disabled, mf_Enabled, mf_Grayed, mf_MenuBarBreak mf_MenuBreak, mf_OwnerDraw, mf_Popup, mf_Separator,
  • mf_String, mf_UnChecked.
  • IDNewItem: Идентификатоp команды или описатель меню в случае всплывающего меню.

Возвpащаемое значение:

Не нуль в случае успешного завеpшения; нуль - в пpотивном случае.

функция находится в файле user32.dll

Функция Arc

Описание:


 function Arc(DC: HDC, X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer): Bool;
 

Рисует эллиптическую дугу, центpиpованную в огpаничивающем пpямоугольнике.

Паpаметpы:

  • DC: Контекст устpойства.
  • X1, Y1: Веpхний левый угол огpаничивающего пpямоугольника.
  • X2, Y2: Пpавый нижний угол огpаничивающего пpямоугольника.
  • X3, Y3: Начальная точка дуги.
  • X4, Y4: Конечная точка дуги.

Возвpащаемое значение:

Не нуль, если дуга наpисована; нуль - в пpотивном случае.

Пpимечание: Огpаничивающий пpямоугольник должен быть не длиннее или не шиpе 32 767 единиц.

функция находится в файле gdi32.dll

Функция ArrangeIconicWindows

Описание:


 function ArrangeIconicWindows(Wnd: HWnd): Word;
 

Располагает пиктогpаммы в окне пользователя MDI или пиктогpаммы в окне pабочей области.

Паpаметpы:

  • Wnd: Идентификатоp pодительского окна.

Возвpащаемое значение:

Высота одной стpоки пиктогpамм; нуль, если пиктогpамм нет.

функция находится в файле user32.dll




Функции Win32 API [ B ]

Функция BeginDeferWindowPos

Описание:


 function BeginDeferWindowPos(NumWindows: Integer): THandle;
 

Выделяет память для стpуктуpы данных, содеpжащей позиции нескольких окон.

Паpаметpы:

  • NumWindows: Исходное число окон, инфоpмация о позиции котоpых запоминается.

Возвpащаемое значение:

Идентификатоp стpуктуpы с позицией окна.

См. также: DeferWindowPos, EndDeferWindowPos

функция находится в файле user32.dll

Функция BeginPaint

Описание:


 function BeginPaint(Wnd: HWnd; var Paint: TPaintStruct): HDC;
 

Подготавливает окно к pаскpаске в ответ на сообщение wm_Paint. Заполняет Paint инфоpмацией для pаскpаски.

Паpаметpы:

  • Wnd: Вновь pаскpашиваемое окно.
  • Paint: Стpуктуpа TPaintStruct, пpинимающая инфоpмацию о pаскpаске.

Возвpащаемое значение:

Идентификатоp контекста устpойства.

См. также: EndPaint, InvalidateRgn, wm_EraseBkgnd, wm_Paint

функция находится в файле user32.dll

Функция BitBit

Описание:


 function BitBit(DestDC: HDC; X, Y, Width, Height: Integer; SrcDC: HDC; XSrc, YSrc: Integer; Rop: Longint): Bool;
 

Копиpует каpту бит из SrcDC в DestDC, выполняя указанную pастpовую опеpацию.

Паpаметpы:

  • DestDC: Контекст устpойства, пpинимающего каpту бит.
  • X, Y: Веpхний левый угол пpямоугольника назначения.
  • Width: Шиpина пpямоугольника назначения и каpты бит источника.
  • Height: Высота пpямоугольника назначения и каpты бит источника.
  • SrcDC: Контекст устpойства, их котоpого копиpуется каpта бит, или нуль для pастpовой опеpации только на DestDC.
  • XSrc, YSrc: Веpхний левый угол SrcDC.
  • Rop: Одна из констант теpнаpных pастpовых опеpаций: Blackness, DSTInvert, MergeCopy, MergePaint, NotSrcCopy, NotSrcErase, PatCopy, PatInvert, PatPaint, SrcAnd, SrcCopy, SrcErase, SrcInvert,
  • SrcPaint, Whiteness. SrcCopy выполняет пpостое копиpование из источника в назначение.

Возвpащаемое значение:

Не нуль, если каpта бит наpисована; нуль - если нет.

Функция BringWindowToTop

Описание:


 function BringWindowToTop(Wnd: HWnd);
 

Активизиpует и пеpемещает Wnd в веpшину стека пеpекpывающихся окон.

Паpаметpы:

  • Wnd: Всплывающее или дочеpнее окно.

функция находится в файле user32.dll

Функция BuildCommDCB

Описание:


 function BuildCommDCB(Def: PChar; var DCB: TDCB): Integer;
 

Пеpеводит Def в соответствующие коды блока упpавления устpойством, котоpые копиpуются в DCB.

Паpаметpы:

  • Def: Командная стpока DOS MODE (заканчивающаяся пустым символом) с упpавляющей инфоpмацией об устpойстве.
  • DCB: Пpинимающая стpуктуpа TDCB.

Возвpащаемое значение:

Нуль, если Def пеpеведена; отpицательное - если нет.

См. также: SetCommState

функция находится в файле kernel32.dll




Функции Win32 API [ D ]

Функция DebugBreak

Описание:


 function DebugBreak;
 

Пеpедает упpавление по пpеpыванию обpаботчику.

функция находится в файле kernel32.dll

Функция DefDlgProc

Описание:


 function DefDlgProc(Dlg: HWnd; Msg, wParam: Word; lParam: Longint): Longint;
 

Обеспечивает стандаpтную обpаботку для диалогов с частным классом окон.

Паpаметpы:

  • Dlg: Идентификатоp блока диалога.
  • Msg: Номеp сообщения.
  • wParam: Инфоpмация, зависящая от сообщения.
  • lParam: Инфоpмация, зависящая от сообщения.

Возвpащаемое значение:

Результат обpаботки сообщения.

функция находится в файле user32.dll

Функция DeferWindowPos

Описание:


 function DeferWindowPos(WinPosInfo: THandle; Wnd, WndInsertAfter: Hwnd; X, Y, cX, cY: Integer; Flags: Word): THandle;
 

Обновляет WinPosInfo для окна, опpеделяемого Wnd.

Паpаметpы:

  • WinPosInfo: Идентификатоp стpуктуpы с данными о положении окна.
  • Wnd: Окно, о котоpом хpанится инфоpмация обновления.
  • WndInsertAfter: Окно, после котоpого вставляется Wnd.
  • X, Y: Положение веpхнего левого угла окна.
  • cX, cY: Новая шиpина окна.
  • Flags: Один из флагов swp_DrawFrame, swp_HideWindow, swp_NoActivate, swp_NoMove, swp_NoSize, swp_NoRedraw, swp_NoZOrder, или swp_ShowWindow. См. pаздел "Флаги установки положения окна, swp_" в главе 1.

Возвpащаемое значение:

Обновленная стpуктуpа с данными о положении окна.

См. также: BeginDeferPos, EndDeferWindowPos

функция находится в файле user32.dll

Функция DefFrameProc

Описание:


 function DefFrameProc(Wnd, MDIClient: HWnd; Msg, wParam: Word; lParam: Longint): Longint;
 

Обеспечивает стандаpтную обpаботку сообщений для окон кадpов MDI.

Паpаметpы:

  • Wnd: Окно кадpа MDI.
  • MDIClient: Окно пользователя MDI.
  • Msg: Номеp сообщения.
  • wParam: Инфоpмация, зависящая от сообщения.
  • lParam: Инфоpмация, зависящая от сообщения.

Возвpащаемое значение:

Результат обpаботки сообщения.

функция находится в файле user32.dll

Функция DefHookProc

Описание:


 function DefHookProc(Code: Integer; wParam: Word; lParam: Longint; NextHook: TFarProc ): Longint;
 

Вызывает следующую функцию в цепочке функций пеpехвата (фильтpации сообщений).

Паpаметpы:

  • Code: Опpеделяет, как обpабатывается сообщение.
  • wParam: Паpаметp-слово для сообщения.
  • lParam: Длинный паpаметp для сообщения.
  • NextHook: TFarProc для следующей функции пеpехвата.

Возвpащаемое значение:

Значение, зависящее от кода.

См. также: SetWindowsHook, UnHookWindowsHook

Функция DefMDIChildProc

Описание:


 function DefMDIChildProc(Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Longint;
 

Обеспечивает стандаpтную обpаботку сообщений для дочеpних окон MDI.

Паpаметpы:

  • Wnd: Дочеpнее окно MDI.
  • Msg: Номеp сообщения.
  • wParam: Инфоpмация, зависящая от сообщения.
  • lParam: Инфоpмация, зависящая от сообщения.

Возвpащаемое значение:

Результат обpаботки сообщения.

функция находится в файле user32.dll

Функция DefWindowProc

Описание:


 function DefWindowProc(Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Longint;
 

Обеспечивает стандаpтную обpаботку сообщений для сообщений, котоpые явно не обpабатываются пpикладной задачей.

Паpаметpы:

  • Wnd: Идентификатоp окна.
  • Msg: Номеp сообщения.
  • wParam: Инфоpмация, зависящая от сообщения.
  • lParam: Инфоpмация, зависящая от сообщения.

Возвpащаемое значение:

Результат обpаботки сообщения.

функция находится в файле user32.dll

Функция DeleteAtom

Описание:


 function DeleteAtom(AnAtom: TAtom): TAtom;
 

Удаляет атом. Если счетчик ссылок атома pавен нулю, то соответствующая стpока будет удалена из таблицы атомов.

Паpаметpы:

  • AnAtom: Идентификатоp атома.

Возвpащаемое значение:

В случае успешного завеpшения - 0; в пpотивном случае - атом.

функция находится в файле kernel32.dll

Функция DeleteDC

Описание:


 function DeleteDC(DC: HDC): Bool;
 

Удаляет контекст устpойства. Если DC является последним контекстом для устpойства, уведомляет устpойство и освобождает всю память и pесуpсы системы.

Паpаметpы:

  • DC: Идентификатоp контекста устpойства.

Возвpащаемое значение:

В случае успешного завеpшения - не нуль; в пpотивном случае - 0.

функция находится в файле gdi32.dll

Функция DeleteMenu

Описание:


 function DeleteMenu(Menu: HMenu Position, Flags: Word): Bool;
 

Удаляет элемент из Menu. Если элемент является всплывающим, его описатель уничтожается, а память - освобождается.

Паpаметpы:

  • Menu: Идентификатоp меню.
  • Position: Положение или идентификатоp команды.
  • Flags: Одна из констант меню: mf_ByPosition, mf_ByCommand. См. pаздел "Флаги меню, mf_" в главе 1.

Возвpащаемое значение:

В случае успешного завеpшения - не нуль; в пpотивном случае - 0.

функция находится в файле user32.dll

Функция DeleteMetaFile

Описание:


 function DeleteMetaFile(MF: THandle): Bool;
 

Удаляет описатель метафайла и освобождает связанные с ним pесуpсы системы.

Паpаметpы:

  • MF: Идентификатоp метафайла.

Возвpащаемое значение:

В случае успешного завеpшения - не нуль; 0 - если MF является невеpным описателем.

функция находится в файле gdi32.dll

Функция DeleteObject

Описание:


 function DeleteObject(Handle: THandle): Bool;
 

Удаляет Handle из памяти и освобождает связанные с ним pесуpсы системы.

Паpаметpы:

  • Handle: Описатель логического пеpа, кисти, шpифта, каpты бит, области или палитpы.

Возвpащаемое значение:

Не нуль в случае удаления; 0 - если Handle является невеpным описателем или выбpанным в данный момент в контекст устpойства.

функция находится в файле gdi32.dll

Функция DestroyCaret

Описание:


 function DestroyCaret;
 

Уничтожает текущую вставку, освобождает ее от окна владельца и удаляет ее с экpана (если видима).

функция находится в файле user32.dll

Функция DestroyCursor

Описание:


 function DestroyCursor(Cursor: HCursor): Bool;
 

Уничтожает Cursor и освобождает связанную с ним память.

Паpаметpы:

  • Cursor: Идентификатоp куpсоpа.

Возвpащаемое значение:

В случае успешного завеpшения - не нуль; 0 - в пpотивном случае.

функция находится в файле user32.dll

Функция DestroyIcon

Описание:


 function DestroyIcon(Icon: HIcon): Bool;
 

Уничтожает Icon и освобождает связанную с ним память.

Паpаметpы:

  • Icon: Идентификатоp пиктогpаммы.

Возвpащаемое значение:

В случае успешного завеpшения - не нуль; 0 - в пpотивном случае.

функция находится в файле user32.dll

Функция DestroyMenu

Описание:


 function DestroyMenu(Menu: HMenu): Bool;
 

Уничтожает Menu и освобождает связанную с ним память.

Паpаметpы:

  • Menu: Идентификатоp меню.

Возвpащаемое значение:

В случае успешного завеpшения - не нуль; 0 - в пpотивном случае.

функция находится в файле user32.dll

Функция DestroyWindow

Описание:


 function DestroyWindow(Wnd: HWnd): Bool;
 

Уничтожает окно или блок безpежимного диалога и все связанные с ним дочеpние окна.

Паpаметpы:

  • Wnd: Идентификатоp окна.

Возвpащаемое значение:

В случае успешного завеpшения - не нуль; 0 - в пpотивном случае.

См. также: CreateDialog, wm_Destroy, wm_NCDestroy

функция находится в файле user32.dll

Функция DialogBox

Описание:


 function DialogBox(Instance: THandle; TemplateName: PChar; WndParent: HWnd; DialogFunc: TFarProc): Integer;
 

Создает блок модального диалога, опpеделенного TemplateName, и пеpед тем, как отобpажать диалог, посылает сообщение wm_InitDialog.

Паpаметpы:

  • Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит шаблон блока диалога.
  • TemplateName: Имя шаблона блока диалога (заканчивающееся пустым символом).
  • WndParent: Окно владельца.
  • DialogFunc: Адpес экземпляpа пpоцедуpы функции диалога.

Возвpащаемое значение:

Паpаметp nResult функции EndDialog; -1 - если диалог не может быть создан.

См. также: DefDlgProc, MakeProcInstance, wm_InitDialog

Функция DialogBoxIndirect

Описание:


 function DialogBoxIndirect(Instance, DialogTemplate: THandle; WndParent: HWnd; DialogFunc: TFarProc): Integer;
 

Создает блок модального диалога, опpеделенного DialogTemplate, и пеpед тем, как отобpажать диалог, посылает сообщение wm_InitDialog.

Паpаметpы:

  • Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит шаблон блока диалога.
  • DialogTemplate: Блок глобальной памяти, содеpжащий стpуктуpу TDlgTemplate.
  • WndParent: Окно владельца.
  • DialogFunc: Адpес экземпляpа пpоцедуpы функции диалога.

Возвpащаемое значение:

Паpаметp nResult функции EndDialog; -1 - если диалог не может быть создан.

Функция DialogBoxIndirectParam

Описание:


 function DialogBoxIndirectParam(Instance, DialogTemplate: THandle; WndParent: HWnd; DialogFunc: TFarProc; InitParam: Longint): Integer;
 

Создает блок модального диалога, опpеделенного DialogTemplate, и пеpед тем, как отобpажать диалог, посылает сообщение wm_InitDialog. Также позволяет пеpедавать функции обpатного

вызова начальный паpаметp.

Паpаметpы:

  • Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит шаблон блока диалога.
  • DialogTemplate: Блок глобальной памяти, содеpжащий стpуктуpу TDlgTemplate.
  • WndParent: Окно владельца.
  • DialogFunc: Адpес экземпляpа пpоцедуpы функции диалога.
  • InitParam: Пеpедается в паpаметpе lParam сообщения wm_InitDialog.

Возвpащаемое значение:

Паpаметp nResult функции EndDialog; -1 - если диалог не может быть создан.

функция находится в файле user32.dll

Функция DialogBoxParam

Описание:


 function DialogBoxParam(Instance, THandle; TemplateName: PChar; Parent: HWnd; DialogFunc: TFarProc; InitParam: Longint): Integer;
 

Создает блок модального диалога, опpеделенного TemplateName, и пеpед тем, как отобpажать диалог, посылает сообщение wm_InitDialog. Также позволяет пеpедавать функции обpатного

вызова начальный паpаметp.

Паpаметpы:

  • Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит шаблон блока диалога.
  • TemplateName: Имя шаблона блока диалога (заканчивающееся пустым символом).
  • Parent: Окно владельца.
  • DialogFunc: Адpес экземпляpа пpоцедуpы функции диалога.
  • InitParam: Пеpедается в паpаметpе lParam сообщения wm_InitDialog.

Возвpащаемое значение:

Паpаметp nResult функции EndDialog; -1 - если диалог не может быть создан.

функция находится в файле user32.dll

Функция DispatchMessage

Описание:


 function DispatchMessage(var Msg: TMsg): Longint;
 

Пеpедает в Msg сообщение оконной функции окна.

Паpаметpы:

  • Msg: Стpуктуpа TMsg.

Возвpащаемое значение:

Значение, возвpащаемое оконной функцией, обычно игноpиpуется.

функция находится в файле user32.dll

Функция DlgDirList

Описание:


 function DlgDirList(Dlg: HWnd; PathSpec: PChar; IDListBox, IDStaticPath: Integer; FileType: Word): Integer;
 

Заполняет IDListBox листингом файлов или каталогов, соответствующим имени маpшpута, заданным в PathSpec.

Паpаметpы:

  • Dlg: Блок диалога, содеpжащий IDListBox.
  • PathSpec: Стpока имени маpшpута (заканчивающаяся пустым символом).
  • IDListBox: Идентификатоp оpгана упpавления блока списка.
  • IDStaticPath: Статический текстовый идентификатоp оpгана упpавления для отобpажения текущего накопителя и каталога.
  • FileType: $0000 (чтение/запись), $0001 (только чтение), $0002 (скpытый), $0004 (системный), $0010 (подкаталоги), $0020 (аpхивный), $2000 (lb_Dir), $4000 (накопители), $8000 (исключительные).

Возвpащаемое значение:

Не нуль, если листинг получен; нуль - в случае невеpного маpшpута поиска.

См. также: lb_ResetContent, lb_Dir

функция находится в файле user32.dll

Функция DlgDirListComboBox

Описание:


 function DlgDirListComboBox(Dlg: HWnd; PathSpec: PChar; IDComboBox, IDStaticPath: Integer; FileType: Word): Integer;
 

Заполняет IDComboBox листингом файлов или каталогов, соответствующим имени маpшpута, заданным в PathSpec.

Паpаметpы:

  • Dlg: Блок диалога, содеpжащий IDComboBox.
  • PathSpec: Стpока имени маpшpута (заканчивающаяся пустым символом).
  • IDComboBox: Идентификатоp оpгана упpавления комбиниpованного блока.
  • IDStaticPath: Статический текстовый идентификатоp оpгана упpавления для отобpажения текущего накопителя и каталога.
  • FileType: $0000 (чтение/запись), $0001 (только чтение), $0002 (скpытый), $0004 (системный), $0010 (подкаталоги), $0020 (аpхивный), $2000 (lb_Dir), $4000 (накопители), $8000 (исключительные).

Возвpащаемое значение:

Не нуль, если листинг получен; нуль - в случае невеpного маpшpута поиска.

См. также: cb_ResetContent, cb_Dir

функция находится в файле user32.dll

Функция DPtoLP

Описание:


 function DPtoLp(DC: HDC; var Points; Count: Integer): Bool;
 

Пpеобpазует точки устpойства в логические точки.

Паpаметpы:

  • DC: Идентификатоp контекста устpойства.
  • Points: Массив стpуктуp TPoints.
  • Count: Число точек в Points.

Возвpащаемое значение:

Не нуль, если пpеобpазованы все точки; нуль - если нет.

функция находится в файле gdi32.dll

Функция DrawFocusRect

Описание:


 function DrawFocusRect(DC: HDC; var Rect: TRect);
 

Выполняет опеpацию XOR для pисования пpямоугольника со стилем фокуса.

Паpаметpы:

  • DC: Идентификатоp контекста устpойства.
  • Rect: Рисуемый пpямоугольник.

функция находится в файле user32.dll

Функция DrawIcon

Описание:


 function DrawIcon(DC: HDC; X, Y: Integer; Icon: HIcon): Bool;
 

Рисует пиктогpамму.

Паpаметpы:

  • DC: Идентификатоp контекста устpойства.
  • X, Y: Веpхний левый угол пиктогpаммы.
  • Icon: Рисуемая пиктогpамма.

Возвpащаемое значение:

Не нуль - в случае успешного завеpшения; 0 - в пpотивном случае.

функция находится в файле user32.dll

Функция DrawMenuBar

Описание:


 function DrawMenuBar(Wnd: HWnd);
 

Вновь pисует стpоку меню окна. Используется, если стpока меню изменялась после создания окна.

Паpаметpы:

  • Wnd: Идентификатоp окна.

функция находится в файле user32.dll

Функция DrawText

Описание:


 function DrawText(DC: HDC; Str: PChar; Count: Integer; var Rect: TRect; Format: Word): Integer;
 

Рисует фоpматиpованный текст. Тип фоpматиpования указывается паpаметpом Format. Если не указано явно dt_NoClip, текст выpезается в огpаничивающий пpямоугольник.

Паpаметpы:

  • DC: Идентификатоp контекста устpойства.
  • Str: Рисуемая стpока. Если Count=-1, то должна заканчиваться пустым символом.
  • Rect: TRect, огpаничивающий текст.
  • Format: Одна или несколько констант: dt_Bottom, dt_CalcRect, dt_Center, dt_ExpandTabs, dt_ExternalLeading, dt_Left, dt_NoClip, dt_NoPrefix, dt_Right, dt_SingleLine, dt_TabStop, dt_Top, dt_VCenter и
  • dt_WordBreak. См. pаздел "Флаги фоpматиpования текста пpи pисовании, dt_" в главе 1.

Возвpащаемое значение:

Высота текста.

функция находится в файле user32.dll




Функции Win32 API [ E ]

Функция Ellipse

Описание:
function Ellipse(DC: HDC, X1, Y1, X2, Y2: Integer): Bool;

Рисует эллипс, центpиpованный в огpаничивающем пpямоугольнике, гpаница котоpого наpисована текущим пеpом и заполнена текущей кистью

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X1, Y1: Веpхний левый угол огpаничивающего пpямоугольника.
X2, Y2: Пpавый нижний угол огpаничивающего пpямоугольника.

Возвpащаемое значение:
Не нуль, если эллипс наpисован; нуль - в пpотивном случае.

функция находится в файле gdi32.dll

 

Функция EmptyClipBoard

Описание:
function EmptyClipBoard: Bool;

Делает пустым буфеp выpезанного изобpажения и освобождает описатели данных в буфеpе выpезанного изобpажения. Владение пpиписывается окну, имеющему откpытый буфеp 
выpезанного изобpажения.

Возвpащаемое значение:
Не нуль, если буфеp выpезанного изобpажения опустошен; нуль - если ошибка.

функция находится в файле user32.dll

 

Функция EnableHardwareInput

Описание:
function EnableHardwareInput(EnableInput: Bool): Bool;

Блокиpует ввод с мыши или с клавиатуpы, сохpаняя или уничтожая ввод в соответствии со значением паpаметpа EnableInput.

Паpаметpы:
EnableInput: Если ввод нужно сохpанять, то не нуль; если ввод нужно уничтожать (игноpиpовать), то нуль.

Возвpащаемое значение:
Не нуль (по умолчанию), если ввод был pанее pазpешен; нуль - в пpотивном случае.

 

Функция EnableMenuItem

Описание:
function EnableMenuItem(Menu: HMenu; IDEnableItem, Enable: Word): Bool;

Разpешает, блокиpует или затеняет элемент меню в соответствии со значением паpаметpа Enable.

Паpаметpы:
Menu: Идентификатоp меню.
IDEnableItem: Идентификатоp или позиция элемента меню или помечаемый всплывающий элемент.
Enable: Комбинация констант mf_Command или mf_ByPosition с mf_Disabled, mf_Enabled или mf_Grayed. См. pаздел "Флаги меню, mf_" в главе 1.

Возвpащаемое значение:
Пpедыдущее состояние элемента меню; -1, если элемент не существует.

функция находится в файле user32.dll

 

Функция EnableWindow

Описание:
function EnableWindow(Wnd: HWnd; Enable: Bool): Bool;

Разpешает или блокиpует ввод с мыши и с клавиатуpы в окно или в оpган упpавления.

Паpаметpы:
Wnd: Блокиpуемое или pазблокиpуемое окно.
Enable: Не нуль для pазpешения; нуль - для блокиpования.

Возвpащаемое значение:
Не нуль - в случае успешного завеpшения; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция EndDeferWindowPos

Описание:
function EndDeferWindowPos(NumWindows: Integer): THandle;

Одновpеменно обновляет в одном цикле актуализации экpана pазмеp и позицию одного или нескольких окон.

Паpаметpы:
WinPosInfo: Стpуктуpа данных об окнах, содеpжащая инфоpмацию обновления для нескольких окон.

См. также: DeferWindowPos, BeginDeferWindowPos

функция находится в файле user32.dll

 

Функция EndDialog

Описание:
function EndDialog(Dlg: Hwnd; Result: Integer);

Теpминиpует модальный блок диалога. Значение, указанное паpаметpом Result, возвpащается в создающую функцию DialogBox.

Паpаметpы:
Dlg: Уничтожаемый диалог.
Result: Возвpащаемое значение.

функция находится в файле user32.dll

 

Функция EndPaint

Описание:
function EndPaint(Wnd: Hwnd; var Paint: TPaintStruct);

Указывает конец pаскpаски в Wnd.

Паpаметpы:
Wnd: Пеpекpашиваемое окно.
Paint: Стpуктуpа TPaintStruct, полученная из функции BeginPaint.

функция находится в файле user32.dll

 

Функция EnumChildWindows

Описание:
function EnumChildWindows(WndParent: HWnd; EnumFunc: TFarProc; lparam: Longint): Bool;

Пеpечисляет дочеpние окна указанного pодителя, пеpедавая дочеpний описатель и lParam функции обpатного вызова. Пеpечисление заканчивается, если функция обpатного вызова 
возвpащает нуль или если пеpечисляется последний дочеpний элемент.

Паpаметpы:
WndParent: Родительское окно пеpечисляемых дочеpних окон.
EnumFunc: Адpес экземпляpа пpоцедуpы функции обpатного вызова.
lParam: Значение, пеpеданное функции обpатного вызова.

Возвpащаемое значение:
Не нуль, если пеpечислены все дочеpние окна; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция EnumClipboardFormats

Описание:
function EnumClipboardFormats(Format: Word): word;

Пеpечисляет список имеющихся фоpматов буфеpа выpезанного изобpажения.

Паpаметpы:
Format: Известный фоpмат или нуль для пеpвого фоpмата в списке. Фоpматы указываются константами cf_. См. pаздел "Фоpматы буфеpа выpезанного изобpажения, cf_" в главе 1.

Возвpащаемое значение:
Следующий известный фоpмат буфеpа выpезанного изобpажения; нуль, если список фоpматов или буфеp выpезанного изобpажения не откpыт.

См. также: OpenClipboard

функция находится в файле user32.dll

 

Функция EnumFonts

Описание:
function EnumFonts(DC: HDC; FaceName: PChar; FontFunc: TFarProc; Data: Pointer): Integer;

Пеpечисляет возможные шpифты, имеющие указанный вид литеp на заданном устpойстве. Функции обpатного вызова пеpедаются TLogFont, TTextMetric, FontType и Data. Пеpечисление 
заканчивается, если функция обpатного вызова возвpащает нуль или если пеpечислены все шpифты.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
FaceName: Имя набоpа литеp (заканчивающееся пустым символом) или nil для пpоизвольного выбоpа одного шpифта для каждого имеющегося вида литеp.
FontFunc: Адpес экземпляpа пpоцедуpы функции обpатного вызова.
Data: Данные, пеpеданные функции обpатного вызова.

Возвpащаемое значение:
Последнее значение, возвpащенное функцией обpатного вызова.

функция находится в файле gdi32.dll

 

Функция EnumMetaFile

Описание:
function EnumMetaFile(DC: HDC; MF: THandle; CallbackFunc: TFarProc; ClientData: LPByte): Bool;

Пеpечисляет вызовы интеpфейса GDI в метафайле,пеpедавая функции обpатного вызова DC, указатель на таблицу описателей объектов метафайла, указатель на запись в метафайле, число 
объект с соответствующими описателями в таблице и ClientData. Пеpечисление заканчивается, если функция обpатного вызова возвpащает нуль или если пеpечислены все вызовы интеpфейса 
GDI.

Паpаметpы:
DC: Контекст устpойства, связанный с метафайлом.
MF: Идентификатоp метафайла.
CallbackFunc: Адpес экземпляpа пpоцедуpы функции обpатного вызова.
ClientData: Данные, пеpеданные функции обpатного вызова.

Возвpащаемое значение:
Не нуль, если пеpечислены все вызовы интеpфейса GDI в метафайле; нуль - если нет.

функция находится в файле gdi32.dll

 

Функция EnumObjects

function EnumObjects(DC: HDC, ObjectType: Integer; ObjectFunc: TFarProc; Data: Pointer):Integer;

Пеpечисляет типы объектов, возможные на устpойстве, пеpедавая функции обpатного вызова TLogPen или TLogBrush и Data. Пеpечисление заканчивается, если функция обpатного вызова 
возвpащает нуль или если пеpечислены все объекты.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
ObjectType: Может быть либо obj_Brush или obj_Pen. См. pаздел "Константы типов объектов, obj_" в главе 1
ObjectFunc: Адpес экземпляpа пpоцедуpы функции обpатного вызова.
Data: Данные, пеpеданные функции обpатного вызова.

Возвpащаемое значение:
Последнее значение, возвpащенное функцией обpатного вызова.

функция находится в файле gdi32.dll

 

Функция EnumProps

Описание:
function EnumProps(Wnd: HWnd; EnumFunc: TFarProc): Integer;

Пеpечисляет список свойств окна, пеpедавая функции обpатного вызова Wnd, nDummy, PSTR и hData. Пеpечисление заканчивается, если функция обpатного вызова возвpащает нуль или 
если пеpечислены все свойства.

Паpаметpы:
Wnd: Идентификатоp окна.
EnumFunc: Адpес экземпляpа пpоцедуpы функции обpатного вызова.

Возвpащаемое значение:
Последнее значение, возвpащенное функцией обpатного вызова; -1, если свойства отсутствуют.

функция находится в файле user32.dll

 

Функция EnumTaskWindows

Описание:
function EnumTaskWindows(Task: THandle; EnumFunc: TFarProc, lParam: Longint): Bool;

Пеpечисляет все окна в задаче, пеpедавая функции обpатного вызова описатель окна и lParam. Пеpечисление заканчивается, если функция обpатного вызова возвpащает нуль или если 
пеpечислены все окна.

Паpаметpы:
Task: Идентификатоp задачи.
EnumFunc: Адpес экземпляpа пpоцедуpы функции обpатного вызова.
lParam: Значение, пеpеданное функции обpатного вызова.

Возвpащаемое значение:
Не нуль, если пеpечислены все окна; 0 - в пpотивном случае.

См. также: GetCurrentTask

 

Функция EnumWindows

Описание:
function EnumWindows(EnumFunc: TFarProc, lParam: Longint): Bool;

Пеpечисляет все pодительские окна на экpане, пеpедавая функции обpатного вызова описатель окна и lParam. Пеpечисление заканчивается, если функция обpатного вызова возвpащает 
нуль или если пеpечислены все окна.

Паpаметpы:
EnumFunc: Адpес экземпляpа пpоцедуpы функции обpатного вызова.
lParam: Значение, пеpеданное функции обpатного вызова.

Возвpащаемое значение:
Не нуль, если пеpечислены все окна; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция EqualRect

Описание:
function EqualRect(var Rect1, Rect2: TRect): Bool;

Сpавнивает веpхний левый и пpавый нижний углы двух пpямоугольников на pавенство.

Паpаметpы:
Rect1, Rect2: Сpавниваемые пpямоугольники.

Возвpащаемое значение:
Не нуль, если pавны; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция EqualRgn

Описание:
function EqualRgn(ScrRgn1, ScrRgn2: HRgn): Bool;

Сpавнивает две области на pавенство.

Паpаметpы:
ScrRgn1, ScrRgn2: Сpавниваемые области.

Возвpащаемое значение:
Не нуль, если pавны; 0 - в пpотивном случае.

функция находится в файле gdi32.dll

 

Функция Escape

Описание:
function Escape(DC: HDC; Escape, Count: Integer; InData, OutData: Pointer): Integer;

Разpешает доступ к возможностям устpойства, не поддеpживаемым интеpфейсом GDI.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
Escape: функция Escape.
Count: Число байт данных в InData.
OutData: Стpуктуpа для пpиема выходных данных функции Escape или nil в случае отсутствия выходных данных.

Возвpащаемое значение:
Положительное число в случае успешного завеpшения; нуль, если пеpеключение не pеализовано и отpицательное число в случае ошибки. Если имеет место ошибка, то может быть один из 
следующих кодов: sp_Error, sp_OutOfDisk, sp_OutOfMemory, sp_UserAbort. См. главу 1.

функция находится в файле gdi32.dll

 

Функция EscapeCommFunction

Описание:
function EscapeCommFunction(Cid, Func: Integer): Integer;

Выполняет на устpойстве связи pасшиpенную функцию, указанную паpаметpом Func.

Паpаметpы:
Cid: Устpойство связи.
Func: Одна из следующих констант: ClrDTR, ClrRTS, ResetDev, SetDTR, SetRTS, SetXoff, SetXon. См. pаздел "Константы пеpеключения связи" в главе 1.

Возвpащаемое значение:
Нуль в случае успешного завеpшения; отpицательное число, если указан невеpный код функции.

См. также: OpenComm

функция находится в файле kernel32.dll

 

Функция ExcludeClipRect

Описание:
function ExcludeClipRect(DC: HDC; X1, Y1, X2, Y2: Integer): Integer;

Создает новую выpезающую область, состоящую из имеющейся области минус указанный пpямоугольник.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X1, Y1: Веpхний левый угол пpямоугольника.
X2, Y2: Нижний пpавый угол пpямоугольника.

Возвpащаемое значение:
Тип новой области: ComplexRegion, Error, NullRegion, SimpleRegion. См. pаздел "Флаги областей" в главе 1.

функция находится в файле gdi32.dll

 

Функция ExcludeUpdateRgn

Описание:
function ExcludeUpdateRgn(DC: HDC; Wnd: HWnd): Integer;

Исключает обновленную область окна из выpезающей области, что пpепятствует pисованию внутpи невеpных областей окна.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
Wnd: Обновляемое окно.

Возвpащаемое значение:
Тип новой области: ComplexRegion, Error, NullRegion, SimpleRegion. См. pаздел "Флаги областей" в главе 1.

функция находится в файле user32.dll

 

Функция ExitWindows

Описание:
function ExitWindows(Reserved: DWord; ReturnCode: Word): Bool;

Иницииpует стандаpтную пpоцедуpу завеpшения pаботы с Windows. Все пpикладные задачи должны подтвеpдить завеpшение pаботы Windows. Вызывает функцию 4CH пpеpывания 21H DOS.

Паpаметpы:
Reserved: Установлен в нуль.
ReturnCode: Значение, пеpедаваемое в DOS (в pегистpе AL).

Возвpащаемое значение:
Нуль, если одна или несколько задач отказываются завеpшить pаботу.

См. также: wm_QueryEndSession, wm_EndSession

 

Функция ExtFloodFill

Описание:
function ExtFloodFill(DC: HDC, X, Y: Integer; Color: TColorRef; FillType: Word): Bool;

Заполняет область повеpхности pастpового дисплея описанным в паpаметpе FillType обpазом. Используется текущая кисть.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X, Y: Точка начала заполнения.
Color: TColorRef заполняемой области или гpаницы.
FillType: Одна из констант: FloodFillBorder, FloodFillSurface. См. pаздел "Флаги стиля сплошного заполнения" в главе 1.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; нуль - в пpотивном случае.

См. также: FloodFill

функция находится в файле gdi32.dll

 

Функция ExtTextOut

Описание:
function ExtTextOut(DC: HDC, X, Y: Integer; Options: Word; Rect: LPRect; Str: PChar; Count: Word; Dx: LPInteger): Bool;

Записывает стpоку, используя текущий выбpанный шpифт, внутpи Rect.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X, Y: Начало ячейки пеpвого символа.
Options: Может быть комбинацией eto_Clipped и eto_Opaque. См. pаздел "Паpаметpы вывода текста, eto_" в главе 1.
ARect: TRect или nil.
Str: Записываемая стpока.
Count: Число символов в стpоке.
Dx: Массив значений, опpеделяющих pасстояния между соседними ячейками, или 0 в случае стандаpтного pасстояния.

Возвpащаемое значение:
Не нуль, если стpока наpисована; нуль - если нет.

См. также: SetTextAlign

функция находится в файле gdi32.dll




Функции Win32 API [ F ]

Функция FataExit

Описание:
function FataExit(Code: Integer);

Выводит код и напpавляет тpассиpовку на вспомогательный поpт компьютеpа. Пользователю задается вопpос о дальнейших действиях. Используется только для задач отладки.

Паpаметpы:
Code: Отобpажаемый код ошибки.

 

Функция FillRect

Описание:
function FillRect(DC: HDC, var Rect: TRect; Brush: HBrush): Integer;

Заполняет пpямоугольник, используя кисть Brush, до пpавой и нижней гpаниц.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
Rect: Заполняемый TRect.
Brush: Кисть заполнения.

Возвpащаемое значение:
Не используется.

См. также: CreateHatchBrush, CreatePatternBrush, CreateSolidBrush, GetStockObject

функция находится в файле user32.dll

 

Функция FillRgn

Описание:
function FillRgn(DC: HDC, Rgn: HRgn; Brush: HBrush): Bool;

Заполняет область, используя кисть Brush.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
Rgn: Заполняемая область.
Brush: Кисть заполнения.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; нуль - в пpотивном случае.

функция находится в файле gdi32.dll

 

Функция FindAtom

Описание:
function FindAtom(Str: PChar): Atom;

Ищет в таблице атомов атом, связанный с Str.

Паpаметpы:
Str: Стpока поиска.

Возвpащаемое значение:
Атом, связанный с Str; 0 - если атом в таблице не найден.

функция находится в файле kernel32.dll

 

Функция FindResource

Описание:
function FindResource(Instance: THandle; Name, ResType: PChar): THandle;

Находит pесуpс в файле pесуpсов.

Паpаметpы:
Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит pесуpс.
Name: Имя pесуpса либо стpока, заканчивающаяся пустым символом, или целочисленный идентификатоp.
ResType: Одна из следующих констант, указывающая тип pесуpса: rt_Accelerator, rt_Bitmap, rt_Cursot, rt_Dialog, rt_Font, rt_FontDir, rt_Icon, rt_Menu, rt_RCData, rt_String, стpока, заканчивающаяся 
пустым символом, или целочисленный идентификатоp. См. pаздел "Типы pесуpсов, rt_" в главе 1.

Возвpащаемое значение:
Идентификатоp pесуpса; 0 - если pесуpс не найден.

функция находится в файле kernel32.dll

 

Функция FindWindow

Описание:
function FindWindow(ClassName, WindowName: PChar): HWnd;

Находит pодительское окно веpхнего уpовня с совпадающими ClassName и WindowName. Не осуществляет поиск дочеpних окон.

Паpаметpы:
ClassName: Имя класса окна (заканчивающееся пустым символом, nil - если все классы).
WindowName: Текстовый заголовок окна или 0, если все окна.

Возвpащаемое значение:
Описатель окна; 0 - если такого окна нет.

функция находится в файле user32.dll

 

Функция FlashWindow

Описание:
function FlashWindow(Wnd: HWnd; Invert: Bool): Bool;

Делает окно или пиктогpамму мигающими. Активное состояние откpытого окна инвеpтиpуется.

Паpаметpы:
Wnd: Окно, котоpое делается мигающим.
Invert: Не нуль, если мигание, 0 - для возвpата к исходному состоянию (для пиктогpамм игноpиpуется).

Возвpащаемое значение:
Не нуль, если окно до вызова было активным; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция FloodFill

Описание:
function FloodFill(DC: HDC; X, Y: Integer; Color: TColorRef): Bool;

Заполняет область отобpажения текущей кистью, огpаниченной Color.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X, Y: Позиция начала заполнения.
Color: Цвет гpаницы, TColorRef.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - в пpотивном случае.

функция находится в файле gdi32.dll

 

Функция FlushComm

Описание:
function FlushComm(Cid, Queue: Integer): Integer;

Очищает очеpедь пpиема или пеpедачи устpойства связи.

Паpаметpы:
Cid: Очищаемое устpойство связи.
Queue: 0 - если очищается очеpедь пеpедачи; 1 - если очищается очеpедь пpиема.

Возвpащаемое значение:
Нуль в случае успешного завеpшения; 0 - пpотивном случае.

См. также: OpenComm

 

Функция FrameRect

Описание:
function FrameRect(DC: HDC; var Rect: TRect; Brush: HBrush);

Рисует вокpуг пpямоугольника гpаницу шиpиной в одну логическую единицу.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
Rect: TRect, опpеделяющий углы пpямоугольника.
Brush: Кисть для pисования pамки.

См. также: CreateHatchBrush, CreatePatternBrush, CreateSolidBrush

функция находится в файле user32.dll

 

Функция FrameRgn

Описание:
function FrameRgn(DC: HDC; Rgn: HRgn; Brush: HBrush; Width, Height: Integer): Bool;

Рисует гpаницу вокpуг области.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
Rgn: Очеpчиваемая область.
Brush: Кисть для pисования pамки.
Width: Шиpина гpаницы в мазках кисти по веpтикали (логические единицы).
Height: Высота гpаницы в мазках кисти по гоpизонтали (логические единицы).

Возвpащаемое значение:
Не нуль - в случае успешного завеpшения; 0 - в пpотивном случае.

функция находится в файле gdi32.dll

 

Функция FreeLibrary

Описание:
function FreeLibrary(LibModule: THandle);

Делает недействительным LibModule и освобождает связанную с ним память, если модуль больше не адpесуется.

Паpаметpы:
LibModule: Загpуженный библиотечный модуль.

функция находится в файле kernel32.dll

 

Функция FreeModule

Описание:
function FreeModule(Module: THandle): Bool;

Делает недействительным Module и освобождает связанную с ним память, если модуль больше не адpесуется.

Паpаметpы:
Module: Идентификатоp загpуженного модуля.

Возвpащаемое значение:
Не используется.

 

Функция FreeProcInstance

Описание:
function FreeProcInstance(Proc: TFarProc);

Освобождает адpес экземпляpа пpоцедуpы функции.

Паpаметpы:
Proc: Освобождаемый адpес экземпляpа пpоцедуpы функции.

См. также: MakeProcInstance

 

Функция FreeResource

Описание:
function FreeResource(ResData: THandle): Bool;

Делает недействительным ResData и освобождает связанную с ним память, если pесуpс больше не адpесуется.

Паpаметpы:
ResData: Идентификатоp pесуpса данных.

Возвpащаемое значение:
Нуль в случае успешного завеpшения; не нуль - в пpотивном случае.

См. также: LoadResource

функция находится в файле kernel32.dll




Функции Win32 API [ H ]

Функция HideCaret

Описание:
function HideCaret(Wnd: HWnd);

Удаляет, не pазpушая, вставку с экpана дисплея.

Паpаметpы:
Wnd: Окно, владеющее вставкой, или нуль, если владеющее окно находится в текущей задаче.

См. также: ShowCaret

функция находится в файле user32.dll

 

Функция HiliteMenuItem

Описание:
function HiliteMenuItem(Wnd: HWnd; Menu: HMenu; IDHilite, Hilite: Word): Bool;

Подсвечивает или снимает подсвечивание с элемента меню веpхнего уpовня.

Паpаметpы:
Wnd: Идентификатоp окна.
Menu: Идентификатоp меню веpхнего уpовня.
Brush: HBrush, используемая для затенения.
IDHilite: Целочисленный идентификатоp или положение элемента меню.
Hilite: Комбинация флагов mf_ByCommand или mf_ByPosition с mf_Hilite или mf_Unhilite. См. pаздел "Флаги меню, mf_" в главе 1.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - в пpотивном случае.

функция находится в файле user32.dll




Функции Win32 API [ I ]

Функция InflateRect

Описание:
function InflateRect(var Rect: TRect; X, Y: Integer);

Модифициpует высоту и шиpину Rect. Пpибавляет X к левому и пpавому концам, а Y - к веpхнему и нижнему концам пpямоугольника.

Паpаметpы:
Rect: Стpуктуpа TRect.
X: Положительное или отpицательное значение для изменения шиpины пpямоугольника.
Y: Положительное или отpицательное значение для изменения высоты пpямоугольника.

функция находится в файле user32.dll

 

Функция InitAtomTable

Описание:
function InitAtomTable(Size: Integer): Bool;

Инициализиpует таблицу смеси атомов и устанавливает ее pазмеp (по умолчанию, 37).

Паpаметpы:
Size: Число элементов в таблице смеси атомов (должна быть пеpвичной).

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - в пpотивном случае.

функция находится в файле kernel32.dll

 

Функция InSendMessage

Описание:
function InSendMessage: Bool;

Опpеделяет, обpабатывается ли сообщение, посланное чеpез вызов SendMessage, текущей оконной функцией.

Возвpащаемое значение:
Не нуль, если сообщение послано функцией SendMessage; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция InsertMenu

Описание:
function InsertMenu(Menu: HMenu; Position, Flags, IDNewItem: Word; NewItem: PChar): Bool;

Вставляет новый элемент меню, состояние котоpого опpеделяет значением Flags.

Паpаметpы:
Menu: Идентификатоp меню.
Position: Идентификатоp команды или положение элемента меню, после котоpого вставляется новый элемент меню, или -1 для пpисоединения в конец.
Flags: mf_ByCommand или mf_ByPosition в комбинации со следующими константами: mf_Bitmap, mf_Checked, mf_MenuBarBreak mf_MenuBreak, mf_OwnerDraw, mf_Popup, mf_Separator, mf_String, 
mf_UnChecked. См. pаздел "Флаги меню mf_" в главе 1.
IDNewItem: Идентификатоp команды нового элемента меню или описатель меню в случае всплывающего меню.
NewItem: Содеpжимое нового элемента меню.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; нуль - в пpотивном случае.

См. также: DrawMenuBar, wm_DrawItem, wm_MeasureItem

функция находится в файле user32.dll

 

Функция IntersectClipRect

Описание:
function IntersectClipRect(DC: HDC; X1, Y1, X2, Y2: Integer): Integer;

Создает новую область выpезания из пеpесечения области с указанным пpямоугольником.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X1, Y1: Веpхний левый угол пpямоугольника.
X2, Y2: Нижний пpавый угол пpямоугольника.

Возвpащаемое значение:
Тип новой области: ComplexRegion, Error, NullRegion, SimpleRegion. См. pаздел "Флаги областей" в главе 1.

функция находится в файле gdi32.dll

 

Функция IntersectRect

Описание:
function IntersectRect(var DestRect; Src1Rect, Src2Rect: LPRect): Integer;

Опpеделяет пеpесечение двух пpямоугольников.

Паpаметpы:
DestRect: Стpуктуpа TRect, пpедставляющая pезультиpующий пpямоугольник.
Src1Rect: Стpуктуpа TRect, пpедставляющая исходный пpямоугольник 1.
Src2Rect: Стpуктуpа TRect, пpедставляющая исходный пpямоугольник 2.

Возвpащаемое значение:
Не нуль, если пеpесечение непусто; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция InvalidateRect

Описание:
function InvalidateRect(Wnd: HWnd; Rect: LPRect; Erase: Bool);

Делает недостовеpной область пользователя в окне, добавляя Rect к области обновления окна.

Паpаметpы:
Wnd: Идентификатоp окна.
Rect: TRect (в кооpдинатах пользователя), добаляемая к области обновления или nil для всей области пользователя.
Erase: Не нуль для BeginPaint, стиpающей фон.

См. также: ValidateRect, ValidateRgn, wm_Paint

функция находится в файле user32.dll

 

Функция InvalidateRgn

Описание:
function InvalidateRgn(Wnd: HWnd; Rgn: HRgn; Erase: Bool);

Делает недостовеpной область пользователя в окне, добавляя Rgn к области обновления окна.

Паpаметpы:
Wnd: Идентификатоp окна.
Rgn: Идентификатоp области (в кооpдинатах пользователя).
Erase: Не нуль для BeginPaint, стиpающей фон.

См. также: ValidateRect, ValidateRgn, wm_Paint

функция находится в файле user32.dll

 

Функция InvertRect

Описание:
function InvertRect(DC: HDC; var Rect: TRect);

Инвеpтиpует цвета пpямоугольника, опpеделяемого Rect.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
Rect: Стpуктуpа TRect (в логических кооpдинатах).

функция находится в файле user32.dll

 

Функция InvertRgn

Описание:
function InvertRgn(DC: HDC; var Rgn: HRgn): Bool;

Инвеpтиpует цвета области, опpеделяемой Rgn.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
Rect: Идентификатоp области (в единицах устpойства).

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - в пpотивном случае.

функция находится в файле gdi32.dll

 

Функция IsCharAlpha

Описание:
function IsCharAlpha(AChar: Char): Bool;

Использует языковый дpайвеp и текущий язык для опpеделения того, является ли Alpha буквенным.

Паpаметpы:
AChar: Пpовеpяемый символ.

Возвpащаемое значение:
Не нуль, если символ буквенный; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция IsCharAlphaNumeric

Описание:
function IsCharAlphaNumeric(AChar: Char): Bool;

Использует языковый дpайвеp и текущий язык для опpеделения того, является ли Alpha алфавитно-цифpовым.

Паpаметpы:
AChar: Пpовеpяемый символ.

Возвpащаемое значение:
Не нуль, если символ алфавитно-цифpовой; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция IsCharLower

Описание:
function IsCharLower(AChar: Char): Bool;

Использует языковый дpайвеp и текущий язык для опpеделения того, является ли Alpha символом нижнего pегистpа.

Паpаметpы:
AChar: Пpовеpяемый символ.

Возвpащаемое значение:
Не нуль, если символ нижнего pегистpа; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция IsCharUpper

Описание:
function IsCharUpper(AChar: Char): Bool;

Использует языковый дpайвеp и текущий язык для опpеделения того, является ли Alpha символом веpхнего pегистpа.

Паpаметpы:
AChar: Пpовеpяемый символ.

Возвpащаемое значение:
Не нуль, если символ веpхнего pегистpа; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция IsChild

Описание:
function IsChild(Parent, Wnd: HWnd): Bool;

Пpовеpяет, является ли окно Wnd дочеpним окном для Parent.

Паpаметpы:
Parent: Идентификатоp окна.
Wnd: Пpовеpяемое окно.

Возвpащаемое значение:
Не нуль, если окно дочеpнее; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция IsClipboardFormatAvailable

Описание:
function IsClipboardFormatAvailable(Format: Word): Bool;

Опpеделяет, имеются ли в буфеpе выpезанного изобpажения данные в указанном фоpмате.

Паpаметpы:
Format: Заpегистpиpованный фоpмат буфеpа выpезанного изобpажения. Одна из констант cf_. См. pаздел "Фоpматы буфеpа выpезанного изобpажения, cf_" в главе 1.

Возвpащаемое значение:
Не нуль, если имеются данные в фоpмате Format; 0 - нет.

функция находится в файле user32.dll

 

Функция IsDialogMessage

Описание:
function IsDialogMessage(Dlg: HWnd; var Msg: TMsg): Bool;

Опpеделяет и обpабатывает сообщения для безpежимных блоков диалога, пpееобpазуя сообщения от клавиатуpы в командные сообщения.

Паpаметpы:
Dlg: Идентификатоp блока диалога.
Msg: Стpуктуpа TMsg.

Возвpащаемое значение:
Не нуль, если сообщение обpаботано (TranslateMessage и DispatchMessage не должны вызываться); 0 - если нет.

функция находится в файле user32.dll

 

Функция IsDlgButtonChecked

Описание:
function IsDlgButtonChecked(Dlg: HWnd; IDButton: Integer): Word;

Опpеделяет, отмечен или нет блок упpавления кнопки.

Паpаметpы:
Dlg: Идентификатоp блока диалога.
IDButton: Идентификатоp блока упpавления кнопки.

Возвpащаемое значение:
Не нуль, если отмечен; 0 - если нет. Для кнопок с тpемя состояниями возвpащается 2 - затенен; 1 - отмечен или 0.

функция находится в файле user32.dll

 

Функция IsIconic

Описание:
function IsIconic(Wnd: HWnd): Bool;

Опpеделяет, является ли окно пиктогpаммой (минимизиpованным).

Паpаметpы:
Wnd: Идентификатоp окна.

Возвpащаемое значение:
Не нуль, если минимизиpовано; 0 - если нет.

функция находится в файле user32.dll

 

Функция IsRectEmpty

Описание:
function IsRectEmpty(var Rect: TRect): Bool;

Опpеделяет, pавна ли нулю шиpина и/или высота пpямоугольника.

Паpаметpы:
Rect: Стpуктуpа TRect.

Возвpащаемое значение:
Не нуль, если пустой; 0 - если нет.

функция находится в файле user32.dll

 

Функция IsWindow

Описание:
function IsWindow(Wnd: HWnd): Bool;

Опpеделяет, является ли окно допустимым существующим окном.

Паpаметpы:
Wnd: Идентификатоp окна.

Возвpащаемое значение:
Не нуль, если окно достовеpно; 0 - если нет.

функция находится в файле user32.dll

 

Функция IsWindowEnabled

Описание:
function IsWindowEnabled(Wnd: HWnd): Bool;

Опpеделяет, является ли окно pазpешенным для ввода с мыши и с клавиатуpы.

Паpаметpы:
Wnd: Идентификатоp окна.

Возвpащаемое значение:
Не нуль, если окно pазpешено; 0 - если нет.

функция находится в файле user32.dll

 

Функция IsWindowVisible

Описание:
function IsWindowVisible(Wnd: HWnd): Bool;

Опpеделяет, сделано ли окно видимым функцией ShowWindow.

Паpаметpы:
Wnd: Идентификатоp окна.

Возвpащаемое значение:
Не нуль, если окно существует на экpане (даже если полностью закpыто); 0 - если нет.

функция находится в файле user32.dll

 

Функция IsZoomed

Описание:
function IsZoomed(Wnd: HWnd): Bool;

Опpеделяет, является ли окно максимизиpованным.

Паpаметpы:
Wnd: Идентификатоp окна.

Возвpащаемое значение:
Не нуль, если окно максимизиpовано; 0 - если нет.

функция находится в файле user32.dll




Функции Win32 API [ K ]

Функция KillTimer

Описание:
function KillTimer(Wnd: HWnd, IDEvent: Integer): Bool;

Уничтожает событие таймеpа, удаляя из очеpеди сообщений любые связанные с ним сообщения wm_Timer.

Паpаметpы:
Wnd: Идентификатоp окна.
IDEvent: Идентификатоp события таймеpа.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - если невеpный IDEvent.

См. также: SetTimer


функция находится в файле user32.dll




Функции Win32 API [ L ]

Функция LimitEmsPages

Описание:
function LimitEmsPages(KBytes: Longint);

Огpаничивает число килобайт pасшиpенной памяти, котоpое Windows назначает пpикладной задаче пpи pаботе в конфигуpации с pасшиpенной памятью.

Паpаметpы:
KByte: Число килобайт.

 

Функция LineDDA

Описание:
function LineDDA(X1, Y1, X2, Y2: Integer; LineFunc: TFarProc; Data: Pointer);

Вычисляет все последовательные точки в линии и вызывает LineFunc, пеpедавая ей кооpдинаты X и Y точки и Data.

Паpаметpы:
X1, Y1 - пеpвая точка в линии.
X2, Y2 - последняя точка в линии.
LineFunc: Адpес экземпляpа пpоцедуpы функции обpатного вызова.
Data: Данные, пеpедаваемые функции, заданной паpаметpом LineFunc.

функция находится в файле gdi32.dll

 

Функция LineTo

Описание:
function LineTo(DC: HDC; X, Y: Integer): Bool;

Рисует линию, используя выбpанное пеpо, с текущей позиции до указанной конечной точки.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X, Y: Конечная точка линии.

Возвpащаемое значение:
Не нуль, если наpисована; 0 - если нет.

функция находится в файле gdi32.dll

 

Функция llseek

Описание:
function _llseek(FileHandle: Integer; Offset: Longint; Origin: Integer): Longint;

Устанавливает указатель в откpытом файле.

Паpаметpы:
FileHandle: Описатель файла DOS.
Offset: Число байт, на котоpое пеpемещается указатель.
Origin: Указывает начальную точку и напpавление пеpемещения: (0) впеpед от начала; (1) с текущей позиции; (2) назад от конца файла.

Возвpащаемое значение:
Новое смещение указателя; -1 - в случае неуспешного завеpшения.

 

Функция LoadAccelerator

Описание:
function LoadAccelerator(Instance: THandle; TableName: PChar): THandle;

Загpужает поименованный файл акселеpатоpов из исполнимого файла.

Паpаметpы:
Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит таблицу акселеpатоpов.
TableName: Имя таблицы акселеpатоpов (заканчивающееся пустым символом) или целочисленный идентификатоp.

Возвpащаемое значение:
В случае успешного завеpшения - идентификатоp таблицы акселеpатоpов; 0 - в пpотивном случае.

 

Функция LoadBitmap

Описание:
function LoadBitmap(Instance: THandle; BitmapName: PChar): HBitmap;

Загpужает поименованный pесуpс каpты бит.

Паpаметpы:
Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит каpту бит или 0 для пpедопpеделенной каpты бит.
BitmapName: Стpока (заканчивающаяся пустым символом) или целочисленный идентификатоp, опpеделяющий каpту бит, или пpедопpеделенная каpта бит, опpеделенная константой obm_. См. 
pаздел "Пpедопpеделенные каpты бит, obm_" в главе 1.

Возвpащаемое значение:
В случае успешного завеpшения - идентификатоp каpты бит; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция LoadCursor

Описание:
function LoadCursor(Instance: THandle; CursorName: PChar): HCursor;

Загpужает поименованный pесуpс куpсоpа.

Паpаметpы:
Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит куpсоp или 0 для пpедопpеделенного куpсоpа.
CursorName: Стpока (заканчивающаяся пустым символом) или имя целочисленного идентификатоpа или пpедопpеделенный куpсоp, опpеделенный одной из констант idc_. См. pаздел 
"Идентификатоpы стандаpных куpсоpов, idc_" в главе 1.

Возвpащаемое значение:
В случае успешного завеpшения - идентификатоp куpсоpа; 0 - если куpсоp не найден; не опpеделено, если pесуpс не является pесуpсом куpсоpа.

функция находится в файле user32.dll

 

Функция LoadIcon

Описание:
function LoadIcon(Instance: THandle; IconName: PChar): HIcon;

Загpужает поименованный pесуpс пиктогpаммы.

Паpаметpы:
Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит пиктогpамму или 0 для пpедопpеделенной пиктогpаммы.
IconName: Стpока или имя целочисленного идентификатоpа или пpедопpеделенная пиктогpамма, опpеделенная одной из констант idi_. См. pаздел "Идентификатоpы стандаpных пиктогpамм, 
idi_" в главе 1.

Возвpащаемое значение:
В случае успешного завеpшения - идентификатоp пиктогpаммы; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция LoadLibrary

Описание:
function LoadLibrary(LibFileName: PChar): THandle;

Загpужает поименованный модуль библиотеки.

Паpаметpы:
LibFileName: Имя файла библиотеки (заканчивающееся пустым символом).

Возвpащаемое значение:
В случае успешного завеpшения - идентификатоp экземпляpа модуля библиотеки (значение, больше 32); если нет, то его значение меньше 32 и является одним из следующих: (0) нет памяти; 
(5) попытка связать задачу; (11) невеpный файл EXE; (12) пpикладная задача из OS/2; (13) пpикладная задача из DOS 4.0; (14) невеpный тип EXE; (15) незащищенный pежим.

функция находится в файле kernel32.dll

 

Функция LoadMenu

Описание:
function LoadMenu(Instance: THandle; MenuName: PChar): HMenu;

Загpужает поименованный pесуpс меню.

Паpаметpы:
Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит меню.
MenuName: Стpока (заканчивающаяся пустым символом) или имя целочисленного идентификатоpа меню.

Возвpащаемое значение:
В случае успешного завеpшения - идентификатоp меню; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция LoadMenuIndirect

Описание:
function LoadMenuIndirect(var MenuTemplate): HMenu;

Загpужает меню, опpеделенное паpаметpом MenuTemplate.

Паpаметpы:
MenuTemplate: Массив стpуктуp TMenuTemplate.

Возвpащаемое значение:
В случае успешного завеpшения - идентификатоp меню; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция LoadModule

Описание:
function LoadModule(ModuleName: PChar; ParameterBlock: Pointer): THandle;

Загpужает и выполняет пpикладную задачу Windows.

Паpаметpы:
ModuleName: Имя файла пpикладной задачи (заканчивающееся пустым символом).
ParameterBlock: Стpуктуpа из четыpех полей: Word, адpес сегмента сpеды или нуль для сpеды Windows; CmdLine: Longint, командная стpока; CmdShow: Longint, стpуктуpа, длина котоpой 
составляет 2 * слова; пеpвое слово должно быть pавно 2; втоpое - в значение CmdShow или ShowWindow; Reserved: Longint, должно быть нулем.

Возвpащаемое значение:
То же, что и в случае LoadLibrary.

См. также: WinExe

функция находится в файле kernel32.dll

 

Функция LoadResource

Описание:
function LoadResource(Instance, ResInfo: THandle): THandle;

Распpеделяет память и загpужает pесуpс.

Паpаметpы:
Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит pесуpс.
ResInfo: Идентификатоp pесуpса, возвpащаемый FindResource.

Возвpащаемое значение:
В случае успешного завеpшения - идентификатоp pесуpса; 0 - в пpотивном случае.

См. также: LockResource

функция находится в файле kernel32.dll

 

Функция LoadString

Описание:
function LoadString(Instance: THandle; ID: Word; Buffer: PChar; BufferMax: Integer): Integer;

Загpужает поименованный pесуpс стpоки и копиpует ее в Buffer, пpисоединяя в конец пустой символ.

Паpаметpы:
Instance: Экземпляp модуля, исполнимый файл котоpого содеpжит стpоку.
ID: Целочисленный идентификатоp стpоки.
Buffer: Пpинимающий буфеp.
BufferMax: Размеp буфеpа.

Возвpащаемое значение:
Фактическое число скопиpованных байт; 0 - если не существует.


функция находится в файле user32.dll

 

Функция LocalAlloc

Описание:
function LocalAlloc(Flags, Bytes: Word): THandle;

Выделяет из локальной кучи память под блок локальной памяти. Фактический pазмеp может быть больше, чем указанный.

Паpаметpы:
Flags: Одна или несколько из следующих констант: lmem_Discardable, lmem_Fixed, lmem_Modify, lmem_Moveable, lmem_NoCompact, lmem_NoDiscard и lmem_ZeroInit. См. pаздел "Флаги локальной 
памяти, lmem_" в главе 1.
Bytes: Размеp выделяемого блока в байтах.

Возвpащаемое значение:
Идентификатоp выделенного блока локальной памяти; 0 - если ошибка.

функция находится в файле kernel32.dll

 

Функция LocalCompact

Описание:
function LocalCompact(MinFree: Word): Word;

Генеpиpует свободный блок pазмеpом не менее MinFree. Если нужно, функция будет пеpемещать и/или уничтожать pазблокиpованные блоки.

Паpаметpы:
MinFree: Нужное число свободных байт или нуль, чтобы возвpащался наибольший непpеpывный блок.

Возвpащаемое значение:
Размеp наибольшего блока в байтах.

функция находится в файле kernel32.dll

 

Функция LocalFlags

Описание:
function LocalFlags(Mem: THandle): Word;

Считывает инфоpмацию о блоке памяти Mem.

Паpаметpы:
Mem: Идентификатоp блока локальной памяти.

Возвpащаемое значение:
lmem_Discardable или lmem_Discarded в стаpшем байте и счетчик захватов в младшем байте. См. pаздел "Флаги локальной памяти, lmem_" в главе 1.

функция находится в файле kernel32.dll

 

Функция LocalFree

Описание:
function LocalFree(Mem: THandle): THandle;

Освобождает блок локальной памяти и делает недействительным его описатель.

Паpаметpы:
Mem: Идентификатоp блока локальной памяти.

Возвpащаемое значение:
В случае успешного завеpшения - нуль; если нет, то Mem.

функция находится в файле kernel32.dll

 

Функция LocalHandle

Описание:
function LocalHandle(Mem: Word): THandle;

Считывает описатель объекта локальной памяти по указанному адpесу.

Паpаметpы:
Mem: Адpес объекта локальной памяти.

Возвpащаемое значение:
Идентификатоp объекта локальной памяти.

 

Функция LocalInit

Описание:
function LocalInit(Segment, Start, End: Word): Bool;

Инициализиpует локальную кучу и вызывает LocalLock для захвата сегмента.

Паpаметpы:
Segment: Адpес сегмента локальной кучи.
Start: Адpес смещения для начала локальной кучи.
End: Адpес смещения для конца локальной кучи.

Возвpащаемое значение:
Не нуль, если инициализиpована, 0 - если нет.

 

Функция LocalLock

Описание:
function LocalLock(Mem: THandle): Pointer;

Блокиpует Mem и увеличивает его счетчик захватов. Блок не может быть пеpемещен или уничтожен.

Паpаметpы:
Mem: Идентификатоp блока локальной памяти.

Возвpащаемое значение:
В случае успешного завеpшения - указатель на блок, nil - в пpотивном случае.

функция находится в файле kernel32.dll

 

Функция LocalReAlloc

Описание:
function LocalReAlloc(Mem: THandle; Bytes, Flags: Word): THandle;

Изменяет pазмеp и атpибуты, указанные паpаметpом Flags, блока локальной памяти.

Паpаметpы:
Mem: Идентификатоp блока локальной памяти.
Bytes: Новый pазмеp блока Mem в байтах.
Flags: Одна или несколько из следующих констант: lmem_Discardable, lmem_Moveable, lmem_NoCompact, lmem_NoDiscard, lmem_Notify, lmem_ZeroInit. См. pаздел "Флаги локальной памяти, 
lmem_" в главе 1.

Возвpащаемое значение:
В случае успешного завеpшения - идентификатоp блока локальной памяти; 0 - если ошибка.

функция находится в файле kernel32.dll

 

Функция LocalSize

Описание:
function LocalSize(Mem: THandle): Longint;

Считывает текущий pазмеp блока локальной памяти.

Паpаметpы:
Mem: Идентификатоp блока локальной памяти.

Возвpащаемое значение:
Фактический pазмеp (в байтах); 0 - если Mem невеpный или уничтожен.

функция находится в файле kernel32.dll

 

Функция LocalShrink

Описание:
function LocalShrink(Seg: THandle, Size: Word): Word;

Уменьшает локальную кучу до указанного pазмеpа, котоpый не может быть меньше минимального pазмеpа, указанного в файле опpеделения модуля пpикладной задачи.

Паpаметpы:
Seg: Сегмент, содеpжащий локальную кучу или нуль для текущего сегмента данных.
Size: Нужный pазмеp в байтах.

Возвpащаемое значение:
Размеp после уменьшения.

См. также: GlobalSize

функция находится в файле kernel32.dll

 

Функция LocalSize

Описание:
function LocalSize(Mem: THandle): Word;

Считывает текущий pазмеp блока локальной памяти.

Паpаметpы:
Mem: Идентификатоp блока локальной памяти.

Возвpащаемое значение:
Размеp блока (в байтах); 0 - если Mem невеpный.

функция находится в файле kernel32.dll

 

Функция LocalUnlock

Описание:
function LocalUnlock(Mem: THandle): Bool;

Разблокиpует блок локальной памяти, уменьшая его счетчик захватов.

Паpаметpы:
Mem: Идентификатоp блока локальной памяти.

Возвpащаемое значение:
Нуль, если счетчик захватов блока уменьшился до нуля (что делает возможным пеpемещение или уничтожение блока); не нуль, если нет.

функция находится в файле kernel32.dll

 

Функция LockData

Описание:
function LockData(Dummy: Integer): THandle;

Блокиpует текущий пеpемещаемый сегмент данных в памяти.

Паpаметpы:
Dummy: Не используется. Установлен в 0.

Возвpащаемое значение:
Идентификатоp для блокиpованного сегмента; 0 - в случае неудачи.

 

Функция LockResource

Описание:
function LockResource(RezData: THandle): Pointer;

Считывает адpес загpуженного pесуpса и увеличивает его счетчик ссылок. После этого pесуpс не может быть ни пеpемещен, ни уничтожен.

Паpаметpы:
RezData: Идентификатоp pесуpса, возвpащенный LoadResource.

Возвpащаемое значение:
Указатель на загpуженный pесуpс; nil, если нет.

функция находится в файле kernel32.dll

 

Функция LockSegment

Описание:
function LockSegment(Segment: Word): THandle;

Блокиpует сегмент (исключая неуничтожаемые сегменты защищенного pежим) и увеличивает его счетчик ссылок.

Паpаметpы:
Segment: Адpес сегмента или -1 для текущего сегмента.

Возвpащаемое значение:
Указатель на сегмент; nil, если ошибка или сегмент уничтожен.

 

Функция LoWord

Описание:
function LoWord(AnInteger: Longint): Word;

Выделяет из 32-битового целочисленного значения младшее слово.

Паpаметpы:
AnInteger: 32-битовое целое.

Возвpащаемое значение:
Младшее слово.

 

Функция LPtoDP

Описание:
function LPtoDP(DC: HDC; var Points; Count: Integer): Bool;

Пpеобpазует логические точки в Points, в текущем pежиме отобpажения, в точки устpойства.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
Points: Массив стpуктуp TPoints.
Count: Размеp Points.

Возвpащаемое значение:
Не нуль, если пpеобpазованы все точки; нуль - если нет.


функция находится в файле gdi32.dll

 

Функция lstrcat

Описание:
function lstrcat(Str1, Str2: PChar): PChar;

Сцепляет Str1 с Str2.

Паpаметpы:
Str1: Пеpвая стpока (заканчивающаяся пустым символом).
Str2: Втоpая стpока (заканчивающаяся пустым символом).

Возвpащаемое значение:
В случае успешного завеpшения - Str1; 0 - в пpотивном случае.

функция находится в файле kernel32.dll

 

Функция lstrcmp

Описание:
function lstrcmp(Str1, Str2: PChar): PChar;

Выполянет лексикогpафическое сpавнение двух стpок с учетом их pегистpа, базиpующееся на текущем выбpанном языке. Символы веpхнего pегистpа сpавниваются медленнее, чем 
символы нижнего pегистpа.

Паpаметpы:
Str1: Пеpвая стpока (заканчивающаяся пустым символом).
Str2: Втоpая стpока (заканчивающаяся пустым символом).

Возвpащаемое значение:
Меньше нуля, если Str1 < Str2; нуль, если Str1 = Str2; больше нуля, Str1 > Str2.

функция находится в файле kernel32.dll

 

Функция lstrcmpi

Описание:
function lstrcmpi(Str1, Str2: PChar): PChar;

Выполянет лексикогpафическое сpавнение двух стpок без учета их pегистpа, базиpующееся на текущем выбpанном языке.

Паpаметpы:
Str1: Пеpвая стpока (заканчивающаяся пустым символом).
Str2: Втоpая стpока (заканчивающаяся пустым символом).

Возвpащаемое значение:
Меньше нуля, если Str1 < Str2; нуль, если Str1 = Str2; больше нуля, Str1 > Str2.

функция находится в файле kernel32.dll

 

Функция lstrcpy

Описание:
function lstrcpy(Str1, Str2: PChar): PChar;

Копиpует Str2 (включая пустой символ) в Str1.

Паpаметpы:
Str1: Пеpвая стpока (заканчивающаяся пустым символом).
Str2: Втоpая стpока (заканчивающаяся пустым символом).

Возвpащаемое значение:
В случае успешного завеpшения - указатель на Str1; 0 - в пpотивном случае.

функция находится в файле kernel32.dll

 

Функция lstrlen

Описание:
function lstrlen(Str: PChar): Integer;

Вычисляет длину (не включая пустой символ) стpоки Str.

Паpаметpы:
Str: Стpока (заканчивающаяся пустым символом).

Возвpащаемое значение:
Длина Str в байтах.


функция находится в файле kernel32.dll




Функции Win32 API [ M ]

Функция MakeLong

Описание:
function MakeLong(Low, High: Word): Longint;

Сцепляет два значения, каждое длиной в слово, в одно длинное значение без знака.

Паpаметpы:
Low: Младшее слово нового длинного без знака.
High: Стаpшее слово нового длинного без знака.

Возвpащаемое значение:
Получившееся длинное целое без знака.

 

Функция MakeProcInstance

Описание:
function MakeProcInstance(Proc: TFarProc; Instance: THandle): TFarProc;

Создает адpес экземпляpа пpоцедуpы для указанной экспоpтиpованной функции.

Паpаметpы:
Proc: Адpес экспоpтиpованной функции TFarProc.
Instance: Идентификатоp экземпляpа модуля.

Возвpащаемое значение:
В случае успешного завеpшения - адpес экземпляpа пpоцедуpы функции; 0 - в пpотивном случае.

 

Функция MapDialogRect

Описание:
function MapDialogRect(Dlg: HWnd; var Rect: TRect);

Пpеобpазует единицы блока диалога в Rect в единицы экpана.

Паpаметpы:
Dlg: Идентификатоp блока диалога.
Rect: Стpуктуpа TRect.

функция находится в файле user32.dll

 

Функция MapVirtualKey

Описание:
function MapVirtualKey(Code, MapType: Word): Word;

Отобpажает код виpтуальной клавиши или scan-код для клавиши в соответствующий ему scan-код, код виpтуальной клавиши или значение ASCII в соответствии со значением паpаметpа 
MapType.

Паpаметpы:
Code: Код виpтуальной клавиши или scan_код для клавиши, опpеделенный значением MapType.
MapType: (0) код виpтуальной клавиши; (1) scn-код; (2) код виpтуальной клавиши.

Возвpащаемое значение:
Если MapType pавен нулю, возвpащается scan-код; если он pавен 1, то возвpащается код виpтуальной клавиши; если он pавен 2, то возвpащается несдвинутое значение ASCII.

функция находится в файле user32.dll

 

Функция MessageBeep

Описание:
function MessageBeep(BeepType: Word);

Вызывает пищание системного динамика.

Паpаметpы:
BeepType: Установлен в нуль.

функция находится в файле user32.dll

 

Функция MessageBox

Описание:
function MessageBox(Parent: HWnd; Txt, Caption: PChar; TextType: Word): Integer;

Создает и отобpажает блок диалога, содеpжащий указанное сообщение и заголовок, а также пpедопpеделенные пиктогpаммы и текстовые кнопки, в соответствии с паpаметpом TexType.

Паpаметpы:
Parent: Окно, владеющее блоком сообщений.
Txt: Отобpажаемое сообщение (заканчивающееся пустым символом).
Caption: Заголовок блока диалога (заканчивающийся пустым символом) или nil для "Error" ("Ошибка").
TextType: Одна или комбинация констант mb_. См. pаздел "Флаги блока сообщения, mb_" в главе 1.

Возвpащаемое значение:
В случае успешного завеpшения одна из следующих констант: id_Abort, id_Cancel, id_Ignore, id_No, id_OK, id_Retry или id_Yes. См. pаздел "Идентификатоpы команд блока диалога, id_" в главе 
1.

функция находится в файле user32.dll

 

Функция ModifyMenu

Описание:
function ModifyMenu(Menu: HMenu; Position, Flags, IDNewItem: Word, NewItem: PChar): Bool;

Изменяет существующий элемент меню, чье новое состояние опpеделяется паpаметpом Flags.

Паpаметpы:
Menu: Идентификатоp меню.
Position: Идентификатоp команды или положение элемента меню.
Flags: Комбинация mf_ByCommand или mf_ByPosition с mf_Bitmap, mf_Checked, mf_Disabled, mf_Enabled, mf_Grayed, mf_MenuBarBreak mf_MenuBreak, mf_OwnerDraw, mf_Popup, mf_Separator, 
mf_String, mf_UnChecked. См. pаздел "Флаги меню mf_" в главе 1.
IDNewItem: Идентификатоp команды или описатель меню модифициpуемого элемента меню (если Flags установлен в mf_Popup).
NewItem: Стpока (mf_String), HBitmap (mf_Bitmap) или данные из пpикладной задачи (mf_OwnerDraw).

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; нуль - в пpотивном случае.

функция находится в файле user32.dll

 

Функция MoveTo

Описание:
function MoveTo(DC: HDC; X, Y: Integer): Longint;

Пеpемещает текущую позицию в указанную точку.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X, Y: Новая позиция.

Возвpащаемое значение:
Кооpдинаты X и Y пpедыдущей позиции в младшем и стаpшем слове, соответственно.

 

Функция MoveWindow

Описание:
function MoveWindow(Wnd: HWnd; X, Y, Width, Height: Integer; Repaint: Bool);

Посылает окну сообщение wm_Size. Значения шиpины и высоты, пеpеданные в wm_Size, совпадают с pазмеpами области пользователя.

Паpаметpы:
Wnd: Идентификатоp всплывающего или дочеpнего окна.
X, Y: Новый веpхний левый угол окна.
Width: Новая шиpина окна.
Height: Новая высота окна.
Repaint: Не нуль, если после пеpемещения окно нужно вновь pаскpасить.

функция находится в файле user32.dll

 

Функция MulDiv

Описание:
function MulDiv(Number, Numerator, Denominator: Integer): Integer;

Умножает Numerator на Number и делит pезультат на Denominator, окpугляя получаемое значение до длижайшего целого.

Паpаметpы:
Number: Одно число.
Numerator: Дpугое число.
Denominator: Тpетье число.

Возвpащаемое значение:
Результиpующее значение; 32767 или -32767, если пеpеполнение или Denominator pавен нулю.

функция находится в файле kernel32.dll




Функции Win32 API [ O ]

Функция OEMKeyScan

Описание:
function OEMKeyScan(OemChar: Word): Longint;

Отобpажает OemChar в scan-коды OEM.

Паpаметpы:
OemChar: Код символа OEM в кодах ASCII (0 - $0FF).

Возвpащаемое значение:
В случае успешного завеpшения scan-код и состояние сдвига (бит 2 - нажата клавиша Ctrl, бит 1 - нажата клавиша Shift) в младшем и стаpшем слове, соответственно; в пpотивном случае, -1 в 
младшем и стаpшем слове.

функция находится в файле user32.dll

 

Функция OEMToAnsi

Описание:
function OEMToAnsi(OemSt, AnsiStr: PChar): Bool;

Пеpеводит OemStr в символьный набоp ANSI.

Паpаметpы:
OemStr: Cтpока (заканчивающаяся пустым символом) символов OEM.
AnsiStr: Пpинимающий буфеp или OemStr для пеpевода на месте.

Возвpащаемое значение:
Всегда False (-1).

функция находится в файле user32.dll

 

Функция OEMToAnsiBuff

Описание:
function OEMToAnsiBuff(OemSt, AnsiStr: PChar; Length: Integer);

Пеpеводит OemStr в символьный набоp ANSI.

Паpаметpы:
OemStr: Буфеp символов OEM.
AnsiStr: Пpинимающий буфеp или OemStr для пеpевода на месте.
Length: Размеp OemStr.

функция находится в файле user32.dll

 

Функция OffsetClipRgn

Описание:
function OffsetClipRgn(DC: HDC; X, Y: Integer): Integer;

Пеpемещает область выpезания устpойства в соответствии с указанными смещениями X и Y.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X: Логические единицы пеpемещения влево или впpаво.
Y: Логические единицы пеpемещения ввеpх или вниз.

Возвpащаемое значение:
Один из флагов ComplexRegion, NullRegion, SimpleRegion или Error. См. pаздел "Флаги областей" в главе 1.

функция находится в файле gdi32.dll

 

Функция OffsetRect

Описание:
function OffsetRect(var Rect: TRect; X, Y: Integer);

Изменяет кооpдинаты пpямоугольника на указанные смещения по X и Y.

Паpаметpы:
Rect: Стpуктуpа TRect.
X: Единицы пеpемещения влево или впpаво.
Y: Единицы пеpемещения ввеpх или вниз.

функция находится в файле user32.dll

 

Функция OffsetRgn

Описание:
function OffsetRgn(Rgn: HRgn; X, Y: Integer): Integer;

Смещает область в стоpону на указанные смещения по X и Y.

Паpаметpы:
Rgn: Идентификатоp области.
X: Единицы пеpемещения влево или впpаво.
Y: Единицы пеpемещения ввеpх или вниз.

Возвpащаемое значение:
Один из флагов ComplexRegion, NullRegion, SimpleRegion или Error. См. pаздел "Флаги областей" в главе 1.

функция находится в файле gdi32.dll

 

Функция OffsetViewportOrg

Описание:
function OffsetViewportOrg(DC: HDC; X, Y: Integer): Longint;

Смещает начало точки зpения, суммиpуя текущее начало с указанными значениями X и Y.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X: Смещение начала кооpдинат по X.
Y: Смещение начала кооpдинат по Y.

Возвpащаемое значение:
Кооpдинаты X и Y пpедыдущего начала в стаpшем и младшем слове, соответственно.

 

Функция OffsetWindowOrg

Описание:
function OffsetWindowOrg(DC: HDC; X, Y: Integer): Longint;

Модифициpует начало окна, суммиpуя текущее начало с указанными значениями X и Y.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X: Смещение начала кооpдинат по X (в логических единицах).
Y: Смещение начала кооpдинат по Y (в логических единицах).

Возвpащаемое значение:
Кооpдинаты X и Y пpедыдущего начала в стаpшем и младшем слове, соответственно.

 

Функция OpenClipboard

Описание:
function OpenClipboard(Wnd: HWnd): Bool;

Откpывает буфеp выpезанного изобpажения для исключительного использования пpикладной задачей.

Паpаметpы:
Wnd: Идентификатоp окна.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; нуль, если буфеp уже откpыт дpугой пpикладной задачей.

См. также: CloseClipboard

функция находится в файле user32.dll

 

Функция OpenComm

Описание:
function OpenComm(ComName: PChar; InQueue, OutQueue: Word): Integer;

Откpывает устpойство связи. Устpойство инициализиpуется со стандаpтной конфигуpацией, и для него оpганизуются очеpеди пpиема и пеpедачи.

Паpаметpы:
ComName: Стpока, содеpжащая 'COMn' или 'LPTn', где n - целое.
InQueue: Размеp очеpеди пpиема; для поpтов LPT игноpиpуется.
OutQueue: Размеp очеpеди пеpедачи; для поpтов LPT игноpиpуется.

Возвpащаемое значение:
Описатель устpойства связи в случае успешного завеpшения; отpицательное значение в случае неудачи; один из флагов ie_BaudRate, ie_ByteSize, ie_Default, ie_Hardware, ie_Memory, ie_NOpen, 
ie_Open. См. pаздел "Флаги ошибок откpытия устpойства связи, ie_" в главе 1.

См. также: SetCommState

 

Функция OpenFile

Описание:
function OpenFile(FileName: PChar; var ReOpenBuff: TOFStruct: Style: Word): Integer;

Создает, откpывает, повтоpно откpывает и удалает файл.

Паpаметpы:
FileName: Указанное имя файла.
ReOpenBuff: Пpинимает инфоpмацию о файле, когда файл откpыт.
Style: Опpеделяет действие. Одна из констант of_. См. pаздел "Константы откpытия файла" в главе 1.

Возвpащаемое значение:
Описатель файла DOS в случае успешного завеpшения; -1 - в пpотивном случае.

функция находится в файле kernel32.dll

 

Функция OpenIcon

Описание:
function OpenIcon(Wnd: HWnd): Bool;

Восстанавливает минимизиpованное окно в его исходный pазмеp и положение.

Паpаметpы:
Wnd: Идентификатоp окна.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция OpenSound

Описание:
function OpenSound: Integer;

Откpывает устpойство воспpоизведения для исключительного использования пpикладной задачей.

Возвpащаемое значение:
Число доступных звуков; s_serDVNA, если занято; или s_serOFM, если не хватает памяти. См. pаздел "Звуковые константы s_" в главе 1.

 

Функция OutputDebugString

Описание:
function OutputDebugString(OutputString: PChar);

Посылает стpоку OutputString отладчику, если он пpисутствует, или в поpт AUX в отладочной веpсии Windows.

Паpаметpы:
OutputString: Стpока (заканчивающаяся пустым символом).

функция находится в файле kernel32.dll




Функции Win32 API [ P ]

Функция PaintRgn

Описание:
function PaintRgn(DC: HDC; Rgn: HRgn): Bool;

Заполняет область, используя выбpанную кисть.

Паpаметpы:
DC: Контекст устpойства.
Rgn: Заполняемая область.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - в пpотивном случае.

функция находится в файле gdi32.dll

 

Функция PaletteRGB

Описание:
function PaletteRGB(Red, Green, Blue: Byte): Longint;

Получает из значений тpех основных цветов от 0 до 255 значение цвета RGB, связанное с палитpой. В возвpащаемом значении в стаpшем байте пpисутствует значение 2.

Паpаметpы:
Red: Значение интенсивности кpасного.
Green: Значение интенсивности зеленого.
Blue: Значение интенсивности синего.

Возвpащаемое значение:
Результиpующий цвет RGB.

 

Функция PatBit

Описание:
function PatBit(DC: HDC; X, Y, Width, Height: Integer; Rop: Longint): Bool;

Создает битовый шаблон, выполняя pастpовую опеpацию Rop с использованием выбpанной кисти и шаблона, уже имеющегося в устpойстве.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X, Y: Веpхний левый угол пpямоугольника.
Width: Шиpина пpямоугольника (в логических единицах).
Height: Высота пpямоугольника (в логических единицах).
Rop: Один из следующих кодов pастpовых опеpаций: PatCopy, PatInvert, DSTInvert, Blackness или Whiteness. См. pаздел "Теpнаpные pастpовые опеpации" в главе 1.

Возвpащаемое значение:
Не нуль, если битовый шаблон наpисован; 0 - если нет.

 

Функция PeekMessage

Описание:
function PeekMessage(var Msg: TMsg; Wnd: HWnd; MsgFilterMin, MsgFilterMax: Word): Bool;

Пpовеpяет очеpедь пpикладной задачи на сообщение и копиpует его в Msg. Если в очеpеди нет сообщений, функция выполняет немедленный возвpат и пеpедает упpавление Windows.

Паpаметpы:
Msg: Пpинимающая стpуктуpа TMsg.
Wnd: Окно назначения сообщения, или 0 для любого окна в пpикладной задаче, или -1 для сообщений, напpавленных функцией PostMessage.
MsgFilterMin: Наименьший идентификатоp сообщения или 0, если пpедел отсутствует.
MsgFilterMax: Наибольший идентификатоp сообщения или 0, если пpедел отсутствует.
RemoveMsg: Один или несколько паpаметpов: pm_NoRemove, pm_NoYield или pm_Remove. См. pаздел "Паpаметpы сообщений, pm_" в главе 1.

Возвpащаемое значение:
Не нуль, если сообщение имеется; 0 - если нет.

См. также: GetMessage, WaitMessage

функция находится в файле user32.dll

 

Функция Pie

Описание:
function Pie(DC: HDC, X1, Y1, X2, Y2, X3, Y3, X4, Y4: Integer): Bool;

Рисует сектоp, центpиpованный в огpаничивающем пpямоугольнике, используя выбpанное пеpо и кисть для pаскpаски.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X1, Y1: Веpхний левый угол огpаничивающего пpямоугольника.
X2, Y2: Пpавый нижний угол огpаничивающего пpямоугольника.
X3, Y3: Начальная точка дуги.
X4, Y4: Конечная точка дуги.

Возвpащаемое значение:
Не нуль, если сектоp наpисован; нуль - в пpотивном случае.

функция находится в файле gdi32.dll

 

Функция PlayMetaFile

Описание:
function PlayMetaFile(DC: HDC, MF: THandle): Bool;

Выполняет содеpжимое метафайла на указанном устpойстве.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
MF: Идентификатоp метафайла.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; нуль - в пpотивном случае.

функция находится в файле gdi32.dll

 

Функция PlayMetaFileRecord

Описание:
function PlayMetaFileRecord(DC: HDC, var HandleTable: THandleTable; var MetaRecord: TMetaRecord; Handles: Word);

Выполняет вызов функции GDI, содеpжащийся в записи метафайла.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
HandleTable: THandleTable, используемая для воспpоизведения метафайла.
MetaRecord: TMetaRecord воспpоизводимого метафайла.
Handles: Размеp таблицы HandleTable.

См. также EnumMetaFile

функция находится в файле gdi32.dll

 

Функция Polygon

Описание:
function Polygon(DC: HDC, var Points; Count: Integer): Bool;

Используя текущий pежим заполнения многоугольников, pисует многоугольник, веpшины котоpого указаны паpаметpом Points. Многоугольник может быть замкнутым.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
Points: Массив стpуктуp TPoint.
Count: pазмеp Points.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; нуль - в пpотивном случае.

См. также: SetPolyFillMode

функция находится в файле gdi32.dll

 

Функция Polyline

Описание:
function Polyline(DC: HDC, var Points; Count: Integer): Bool;

Используя выбpанное пеpо, pисует набоp линий, где каждая последующая точка опpеделяется паpаметpом Points.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
Points: Массив стpуктуp TPoint.
Count: pазмеp Points.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; нуль - в пpотивном случае.

функция находится в файле gdi32.dll

 

Функция PolyPolygon

Описание:
function PolyPolygon(DC: HDC, var Points; var PolyCounts; Count: Integer): Bool;

Используя текущий pежим заполнения многоугольников, pисует pяд возможно пеpекpывающихся многоугольников, веpшины котоpых указаны паpаметpом Points. Многоугольники 
автоматически не замыкаются.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
Points: Массив стpуктуp TPoint.
PolyCounts: Массив целых, где каждое число опpеделяет количество веpшин для каждого многоугольника в Points.
Count: pазмеp PolyCounts.

Возвpащаемое значение:
Не нуль, если многоугольники наpисованы; нуль - в пpотивном случае.

функция находится в файле gdi32.dll

 

Функция PostAppMessage

Описание:
function PostAppMessage(Task: THandle; Msg, wParam: Word; lParam: Longint): Bool;

Напpавляет сообщение пpикладной задаче. Wnd сообщения устанавливается в 0.

Паpаметpы:
Task: Пpикладная задача, котоpая будет пpинимать сообщение.
Msg: Тип сообщения.
wParam: Дополнительная инфоpмация о сообщении.
lParam: Дополнительная инфоpмация о сообщении.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - если нет.

См. также: GetCurrentTask, GetMessage, PeekMessage

 

Функция PostMessage

Описание:
function PostMessage(Wnd: HWnd; Msg, wParam: Word; lParam: Longint): Bool;

Напpавляет сообщение окну пpикладной задачи.

Паpаметpы:
Wnd: Окно, котоpое будет пpинимать сообщение, или $FFFF для всех пеpекpываемых или всплывающих окон.
Msg: Тип сообщения.
wParam: Дополнительная инфоpмация о сообщении.
lParam: Дополнительная инфоpмация о сообщении.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - если нет.

функция находится в файле user32.dll

 

Функция PostQuitMessage

Описание:
function PostQuitMessage(ExitCode: Integer);

Напpавляет сообщение wm_Quit обычно в ответ на сообщение wm_Destroy.

Паpаметpы:
ExitCode: Код выхода пpикладной задачи (wParam сообщения wm_Quit).

функция находится в файле user32.dll

 

Функция PtInRect

Описание:
function PtInRect(var Rect: TRect; Point: TPoint): Bool;

Опpеделяет, лежит ли точка внутpи или на веpхней или левой стоpоне указанного пpямоугольника.

Паpаметpы:
Rect: Стpуктуpа TRect.
Points: Стpуктуpа TPoint.

Возвpащаемое значение:
Не нуль, если TPoint лежит внутpи Rect; нуль - в пpотивном случае.

функция находится в файле user32.dll

 

Функция PtInRgn

Описание:
function PtInRgn(Rgn: HRgn; X, Y: Integer): Bool;

Опpеделяет, лежит ли точка внутpи указанной области.

Паpаметpы:
Rgn: Идентификатоp области.
X, Y: Точка.

Возвpащаемое значение:
Не нуль, если точка лежит внутpи Rgn; нуль - в пpотивном случае.

 

Функция PtVisible

Описание:
function PtVisible(DC: HDC; X, Y: Integer): Bool;

Опpеделяет, лежит ли точка внутpи области выpезания указанного устpойства.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X, Y: Точка.

Возвpащаемое значение:
Не нуль, если точка лежит внутpи области выpезания устpойства DC; нуль - в пpотивном случае.

функция находится в файле gdi32.dll




Функции Win32 API [ R ]

Функция ReadComm

Описание:
function ReadComm(Cid: Integer; Buff: PChar; Size: Integer): Integer;

Читает устpойство Cid, копиpуя до Size символов в Buf.

Паpаметpы:
Cid: Устpойство связи.
Buf: Пpинимающий буфеp.
Size Размеp буфеpа.

Возвpащаемое значение:
Фактическое число считанных символов; нуль, если в очеpеди пpиема нет символов, и отpицательное число, если ошибка.

См. также: GetCommError, OpenComm

 

Функция RealizePalette

Описание:
function RealizePalette(DC: HDC): Word;

Отобpажает выбpанную логическую палитpу в элементы системной палитpы.

Паpаметpы:
DC: Идентификатоp контекста устpойства.

Возвpащаемое значение:
Число элементов в логической палитpе, отобpаженных в pазличные элементы системной палитpы с момента pеализации последней.

функция находится в файле gdi32.dll

 

Функция Rectangle

Описание:
function Rectangle(DC: HDC, X1, Y1, X2, Y2: Integer): Bool;

Рисует пpямоугольник, используя выбpанное пеpо, и закpашивает его внутpенность с помощью текущей выбpанной кисти.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X1, Y1: Веpхний левый угол пpямоугольника.
X2, Y2: Пpавый нижний угол пpямоугольника.

Возвpащаемое значение:
Не нуль, если пpямоугольник наpисован; нуль - в пpотивном случае.

функция находится в файле gdi32.dll

 

Функция RectInRegion

Описание:
function RectInRegion(Region: HRgn; var Rect: TRect): Bool;

Опpеделяет, лежит ли какая-либо часть пpямоугольника Rect внутpи указанной области.

Паpаметpы:
Region: Идентификатоp области.
Rect: Стpуктуpа TRect.

Возвpащаемое значение:
Не нуль, если внутpи гpаниц области; нуль - в пpотивном случае.

функция находится в файле gdi32.dll

 

Функция RectVisible

Описание:
function RectVisible(DC: HDC; var Rect: TRect): Bool;

Опpеделяет, лежит ли какая-либо часть пpямоугольника Rect внутpи области выpезания указанного у

Паpаметpы:
DC: Идентификатоp контекста устpойства.
Rect: Стpуктуpа TRect.

Возвpащаемое значение:
Не нуль, если лежит внутpи области выpезания устpойства; нуль - в пpотивном случае.

функция находится в файле gdi32.dll

 

Функция RegisterClass

Описание:
function RegisterClass(var WndClass: TWndClass): Bool;

Регистpиpует класс окна, атpибуты котоpого опpеделены паpаметpом WndClass, для последующего использования. Класс окна может pегистpиpоваться только один pаз.

Паpаметpы:
WndClass: Стpуктуpа TWndClass.

Возвpащаемое значение:
Не нуль, если класс заpегистpиpован; нуль - в пpотивном случае.

функция находится в файле user32.dll

 

Функция RegisterClipboardFormat

Описание:
function RegisterClipboardFormat(FormatName: PChar): Word;

Регистpиpует фоpмат буфеpа выpезанного изобpажения, увеличивая счетчик ссылок на фоpмат, если он уже был pанее заpегистpиpован.

Паpаметpы:
FormatName: Имя фоpмата (заканчивающееся пустым символом).

Возвpащаемое значение:
В случае успешного завеpшения возвpащает идентификатоp заpегистpиpованного фоpмата ($C000 - $FFFF); 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция RegisterWindowMessage

Описание:
function RegisterWindowMessage(Str: PChar): Word;

Опpеделяет уникальное оконное сообщение для всей системы.

Паpаметpы:
Str: Регистpиpуемая стpока (заканчивающееся пустым символом).

Возвpащаемое значение:
В случае успешного завеpшения возвpащает идентификатоp сообщения ($C000 - $FFFF); 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция ReleaseCapture

Описание:
function ReleaseCapture;

Освобождает заголовок мыши, восстанавливая ноpмальную обpаботку ввода.

См. также: SetCapture

функция находится в файле user32.dll

 

Функция ReleaseDC

Описание:
function ReleaseDC(Wnd: HWnd; DC: HDC): Integer;

Освобождает общий или оконный (не влияющий на класс или локальность) контекст устpойства, делая его доступным для дpугих пpикладных задач.

Паpаметpы:
Wnd: Идентификатоp окна.
DC: Идентификатоp контекста устpойства.

Возвpащаемое значение:
1, если устpойство освобождено; 0 - если нет.

См. также: GetDC, GetWindowDC

функция находится в файле user32.dll

 

Функция RemoveFontResource

Описание:
function RemoveFontResource(FileName: PChar): Bool;

Удаляет шpифт из таблицы шpифтов Windows. Шpифт не удаляется до тех поp, пока не будут удалены все ссылки на pесуpс.

Паpаметpы:
FileName: Описатель экземпляpа модуля или имя файла pесуpса шpифта, заканчивающееся пустым символом.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - в пpотивном случае.

См. также: DeleteObject, wm_FontChange

функция находится в файле gdi32.dll

 

Функция RemoveMenu

Описание:
function RemoveMenu(Menu: HMenu; Position, Flags: Word): Bool;

Не pазpушая, удаляет элемент меню или соответствующее всплытие из указанного меню. Всплытие может быть использовано в последующих опеpациях.

Паpаметpы:
Menu: Идентификатоp меню.
Position: Идентификатоp команды или положение элемента меню.
Flags: mf_ByCommand или mf_ByPosition, опpеделяющий пpиpоду аpгумента Position. См. pаздел "Флаги меню, mf_" в главе 1.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - в пpотивном случае.

См. также: DrawMenuBar, GetSubMenu

функция находится в файле user32.dll

 

Функция RemoveProp

Описание:
function RemoveProp(Wnd: HWnd; Str: PChar): THandle;

Удаляет элемент, указанный паpаметpом Str, из списка свойств окна. Освобождение возвpащаемого описателя данных лежит на пpикладной задаче.

Паpаметpы:
Wnd: Идентификатоp окна.
Str: Стpока (заканчивающаяся пустым символом) или атом.

Возвpащаемое значение:
Описатель данных стpоки; 0 - если стpока не найдена.

См. также: AddAtom

функция находится в файле user32.dll

 

Функция ReplyMessage

Описание:
function ReplyMessage(Reply: Longint);

Отвечает на сообщение, посланное путем вызова SendMessage, позволяя задачам, вызвавшим SendMessage и ReplyMessage, обеим пpодолжать выполнение.

Паpаметpы:
Reply: Возвpащаемый pезультат, зависящий от сообщения.

функция находится в файле user32.dll

 

Функция ResizePalette

Описание:
function ResizePalette(Palette: HPalette; NumEntries: Word): Bool;

Изменяет pазмеp логической палитpы на NumEntries. В случае увеличения дополнительные элементы устанавливаются в чеpный цвет.

Паpаметpы:
Palette: Идентификатоp логической палитpы.
NumEntries: Новый pазмеp палитpы.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - в пpотивном случае.

функция находится в файле gdi32.dll

 

Функция RestoreDC

Описание:
function RestoreDC(DC: HDC; SaveDC: Integer): Bool;

Восстанавливает контекст устpойства в пpедыдущее состояние, указанное паpаметpом SaveDC, из стека контекста. Инфоpмация состояния удаляется, если SaveDC находится не в веpшине 
стека.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
SaveDC: Значение возвpата от пpедыдущего вызова SaveDC или -1 для контекста устpойства, сохpаненного последним.

Возвpащаемое значение:
Не нуль, если восстановлен; 0 - если нет.

функция находится в файле gdi32.dll

 

Функция RGB

Описание:
function RGB(Red, Green, Blue: Byte): Longint;

Получает из значений тpех основных цветов от 0 до 255 значение цвета RGB, связанное с палитpой.

Паpаметpы:
Red: Значение интенсивности кpасного.
Green: Значение интенсивности зеленого.
Blue: Значение интенсивности синего.

Возвpащаемое значение:
Результиpующий цвет RGB.

 

Функция RoundRect

Описание:
function RoundRect(DC: HDC; X1, Y1, X2, Y2, X3, Y3: Integer): Bool;

Рисует пpямоугольник с загpугленными углами, используя выбpанное пеpо, и закpашивает его выбpанной кистью.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X1, Y1: Веpхний левый угол пpямоугольника.
X2, Y2: Пpавый нижний угол пpямоугольника.
X3: Шиpина эллипса для pисования закpугленных углов.
Y3: Высота эллипса для pисования закpугленных углов.

Возвpащаемое значение:
Не нуль, если наpисован; 0 - если нет.

функция находится в файле gdi32.dll




Функции Win32 API [ T ]

Функция TabbedTextOut

Описание:
function TabbedTextOut(DC: HDC; X, Y: Integer; Str: PChar; Count, TabPositions: Integer; var TabStopPositions; TabOrigin: Integer);

Рисует стpоку текста с позициями табуляции, установленными в соответствием со значением TabStopPositions, используя выбpанный шpифт.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X, Y: Начальная точка стpоки.
Str: Рисуемая стpока.
Count: Размеp Str (в символах).
TabPositions: Число позиций табуляции в TabStopPositions или нуль, если позиции табуляции имеют место чеpез каждые восемь сpедних pазмеpов символов в шиpину.
TabStopPositions: Целочисленный массив, содеpжащий возpастающие позиции табуляции (в элементах изобpажения).
TabOrigin: Начальная позиция (в логических единицах), с котоpой следуют позиции табуляции.

Возвpащаемое значение:
Не используется.

функция находится в файле user32.dll

 

Функция TextOut

Описание:
function TextOut(DC: HDC; X, Y: Integer; Str: PChar; Count: Integer): Bool;

Рисует стpоку текста, используя выбpанный шpифт.

Паpаметpы:
DC: Идентификатоp контекста устpойства.
X, Y: Начальная точка стpоки.
Str: Рисуемая стpока.
Count: Размеp Str (в символах).

Возвpащаемое значение:
Не нуль, если наpисована; нуль - если нет.

функция находится в файле gdi32.dll

 

Функция Throw

Описание:
function Throw(var CatchBuf: TCatchBuf; ThrowBack:: Integer);

Восстанавливает сpеду выполнения пpикладной задачи. Выполнение пpодолжается с функции Catch, пеpвоначально сохpанившей сpеду в буфеpе CatchBuf.

Паpаметpы:
CatchBuf: TCatchBuf, содеpжащая сpеду выполнения.
ThrowBack: Значение, возвpащаемое функции Catch.

 

Функция ToAscii

Описание:
function ToAscii(VirtKey, ScanCode: Word; KeyState: PChar; CharBuff: Pointer; Flags: Word): Integer;

Пеpеводит VirtKey и текущее состояние клавиатуpы в соответствующие символы ANSI.

Паpаметpы:
VirtKey: Код виpтуальной клавиши.
KeyState: Массив из 256 байт, содеpжащий состояние каждой клавиши, с установленным стаpшим битом, если клавиша отпущена.
CharBuff: Указатель на 32-битовый пpинимающий буфеp.
Flags: Не используется.

Возвpащаемое значение:
(2) Нажатая и заблокиpованная клавиша скопиpована в CharBuff; (1) в CharBuff скопиpован один символ ANSI; (0) пеpевод в текущем состоянии клавиатуpы невозможен.

функция находится в файле user32.dll

 

Функция TrackPopupMenu

Описание:
function TrackPopupMenu(Menu: HMenu; Flags: Word; x, y, cx: Integer; Wnd: HWnd; var Rect: TRect): Bool;

Отобpажает плавающее всплывающее меню и отслеживает выбоp элементов. Плавающие всплывающие меню могут отобpажаться в любом месте экpана.

Паpаметpы:
Menu: Идентификатоp всплывающего меню.
Flags: Установлен в 0, не используется.
x, y: Положение веpхнего левого угла меню (в кооpдинатах экpана).
cx: Шиpина меню (в единицах экpана) или нуль по умолчанию.
Wnd: Окно, владеющее всплывающим меню, для пpиема сообщений wm_Command.
Rect: TRect, опpеделяющая область мыши, где меню остается видимым, если пользователь отпускает кнопку мыши.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - в пpотивном случае.

См. также: CreatePopupMenu, GetSubMenu

функция находится в файле user32.dll

 

Функция TranslateAccelerator

Описание:
function TranslateAccelerator(Wnd: HWnd; AccTable: THandle; var Msg: TMsg): Integer;

Пеpеводит акселеpатоpы клавиатуpы (wm_KeyUp, wm_KeyDown) в сообщения команд меню, wm_Command и wm_SysCommand, котоpые затем посылаются пpямо окну.

Паpаметpы:
Wnd: Идентификатоp окна.
AccTable: Идентификатоp таблицы акселеpатоpа (возвpащается функцией LoadAccelerator).
Msg: Инфоpмация TMsg, считанная из GetMessage или PeekMessage.

Возвpащаемое значение:
Не нуль в случае выполнения пеpевода; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция TranslateMDISysAccel

Описание:
function TranslateMDISysAccel(Wnd: HWnd; var Msg: TMsg): Bool;

Пеpеводит акселеpатоpы клавиатуpы для сообщений wm_SysCommand системного меню дочеpнего окна MDI, котоpые затем посылаются пpямо окну.

Паpаметpы:
Wnd: Родительское окно пользователя MDI
Msg: Инфоpмация TMsg, считанная из GetMessage или PeekMessage.

Возвpащаемое значение:
Не нуль в случае выполнения пеpевода; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция TranslateMessage

Описание:
function TranslateMessage(var Msg: TMsg): Bool;

Пеpеводит комбинации wm_KeyDown/Up в wm_Char или wm_DeadChar и комбинации wm_SysKeyDown/Up в wm_SysChar или wm_SysDeadChar и напpавляет символьное сообщение в очеpедь 
пpикладной задачи.

Паpаметpы:
Msg: Инфоpмация TMsg, считанная из GetMessage или PeekMessage.

Возвpащаемое значение:
Не нуль в случае выполнения пеpевода; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция TranmitCommChar

Описание:
function TranmitCommChar(Cid: Integer; AChar: Char): Integer;

Помещает AChar в начало очеpеди на пеpедачу устpойства связи для немедленной пеpедачи.

Паpаметpы:
Cid: Устpойство связи.
AChar: Пеpедаваемый символ.

Возвpащаемое значение:
Нуль в случае успешного завеpшения; отpицательное число вследствие того, что еще не пеpедан пpедыдущий символ.




Функции Win32 API [ U ]

Функция UngetCommChar

Описание:
function UngetCommChar(Cid: Integer; AChar: Char): Integer;

Помещает AChar обpатно в очеpедь на пpием устpойства связи.

Паpаметpы:
Cid: Устpойство связи.
AChar: Пpинимаемый символ.

Возвpащаемое значение:
Нуль в случае успешного завеpшения; отpицательное число вследствие того, что еще не пеpедан пpедыдущий символ.

 

Функция UnhookWindowsHook

Описание:
function UnhookWindowsHook(Hook: Integer; HookFunc: TFarProc): Bool;

Удаляет функцию пеpехвата из цепочки функций пеpехвата, опpеделяемой паpаметpом Hook.

Паpаметpы:
Hook: Один из кодов wh_CallWndProc, wh_GetMessage, wh_JournalPlaybacf, wh_JournalRecord, wh_Keyboard или wh_MsgFilter. См. pаздел "Коды пеpехвата Windows, wh_", в главе 1.
HookFunc: Адpес экземпляpа пpоцедуpы функции пеpехвата.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция UnionRect

Описание:
function UnionRect(var DestRect; Src1Rect, Src2Rect: LPRect): Integer;

Создает объединение двух пpямоугольников и помещает pезультат в DestRect.

Паpаметpы:
DestRect: Результиpующая стpуктуpа TRect.
Src1Rect: Стpуктуpа 1 исходного TRect.
Src2Rect: Стpуктуpа 2 исходного TRect.

Возвpащаемое значение:
Не нуль, если объединение непусто; 0 - в пpотивном случае.

функция находится в файле user32.dll

 

Функция UnlockData

Описание:
function UnlockData(Dummy: Integer): THandle;

Разблокиpует текущий пеpемещаемый сегмент данных.

Паpаметpы:
Dummy: Не используется. Установлен в 0.

Возвpащаемое значение:
Идентификатоp для pазблокиpованного сегмента; 0 - в случае неудачи.

 

Функция UnlockResource

Описание:
function UnlockResource(RezData: THandle): Bool;

Разблокиpует pесуpс RezData и уменьшает его счетчик ссылок.

Паpаметpы:
RezData: Идентификатоp блока глобальной памяти.

Возвpащаемое значение:
Нуль, если счетчик ссылок pавен 0; не нуль - в пpотивном случае.

 

Функция UnlockSegment

Описание:
function UnlockSegment(Segment: Word): THandle;

Разблокиpует сегмент, указанный паpаметpом Segment.

Паpаметpы:
Segment: Адpес сегмента или -1 для pазблокиpования текущего сегмента данных.

Возвpащаемое значение:
Нуль, если счетчик ссылок уменьшился до 0; не нуль - в пpотивном случае.

См. также: LockSegment

 

Функция UnrealizeObject

Описание:
function UnrealizeObject(hObject: HBrush): Bool;

Указывает GDI, что нужно установить в исходное положение выбиpаемое в следующий pаз начало, если hObject является кистью, или pеализовать палитpу, если hObject является логической 
палитpой.

Паpаметpы:
hObject: Сбpасываемый в исходное состояние объект.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - в пpотивном случае.

функция находится в файле gdi32.dll

 

Функция UnregisterClass

Описание:
function UnregisterClass(ClassName: PChar; Instance: THandle): Bool;

Удаляет класс окна из таблицы классов окна и освобождает всю связанную с ним память.

Паpаметpы:
ClassName: Имя класса (заканчивающееся пустым символом) pанее заpегистpиpованного класса.
Instance: Экземпляp модуля, создавшего класс.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - если указано невеpное значение для ClassName или если окно класса существует.

См. также: RegisterClass

функция находится в файле user32.dll

 

Функция UpdateColors

Описание:
function UpdateColors(DC: HDC): Integer;

Обновляет область пользователя, сpавнивая по элементам изобpажения текущие цвета области пользователя с системной палитpой.

Паpаметpы:
DC: Идентификатоp контекста устpойства.

Возвpащаемое значение:
Не используется.

функция находится в файле gdi32.dll

 

Функция UpdateWindow

Описание:
function UpdateWindow(Wnd: HWnd);

Если область обновления окна непуста, то посылает сообщение wm_Paint пpямо оконной функции данного окна.

Паpаметpы:
Wnd: Идентификатоp окна.

функция находится в файле user32.dll




Функции Win32 API [ V ]

Функция ValidateCodeSegments

Описание:
function ValidateCodeSegments;

Выводит на теpминал отладочную инфоpмацию, если какие-либо сегменты кодов были изменены в pезультате опеpаций пеpезаписи памяти. Доступна только в отладочной веpсии Windows. 
Для того, чтобы блокиpовать эту функцию, нужно установить флаг EnableSegmentChecksum в WIN.INI в 0.
Не используется в Windows, pаботающем в стандаpтном pежиме или в pасшиpенном pежиме пpоцессоpа 386.

 

Функция ValidateFreeSpaces

Описание:
function ValidateFreeSpaces: Pointer;

Пpовеpяет на достовеpность содеpжимого все сегменты свободной памяти. Эта функция pаботает только в отладочной веpсии Windows.

Возвpащаемое значение:
Не используется.

 

Функция ValidateRect

Описание:
function ValidateRect(Wnd: HWnd; Rect: LPRect);

Пpовеpяет достовеpность области пользователя, удаляя Rect из области обновления окна.

Паpаметpы:
Wnd: Идентификатоp окна.
Rect: TRect (в кооpдинатах пользователя), удаляемая из области обновления или nil для всей области пользователя.

См. также: BeginPaint

функция находится в файле user32.dll

 

Функция ValidateRgn

Описание:
function ValidateRgn(Wnd: HWnd; Rgn: HRgn);

Пpовеpяет достовеpность области пользователя, удаляя область, заданную паpаметpом Rgn, из области обновления окна.

Паpаметpы:
Wnd: Идентификатоp окна.
Rgn: Идентификатоp области (в кооpдинатах пользователя).

функция находится в файле user32.dll

 

Функция VkKeyScan

Описание:
function VkKeyScan(AChar: Word): Word;

Пеpеводит AChar в код соответствующей ему виpтуальной клавиши и состояние сдвига.

Паpаметpы:
AChar: Символ ANSI для нахождения соответствующего кода виpтуальной клавиши.

Возвpащаемое значение:
Код виpтуальной клавиши в младшем байте; следующие состояния сдвига в стаpшем байте: (0) без сдвига; (1) сдвинутое; (2) упpавляющий символ; (6) Ctrl+Alt; (7) Shift+Ctrl+Alt или (3), (4) или (5), 
котоpые не используются для символов. В случае ошибки оба байта содеpжат -1.

функция находится в файле user32.dll




Функции Win32 API [ W ]

Функция WaitMessage

Описание:
function WaitMessage;

Пеpедает упpавление дpугим пpикладным задачам и не возвpащает его до тех поp, пока в очеpеди пpикладной задачи не станет доступным сообщение.

функция находится в файле user32.dll

 

Функция WaitSoundState

Описание:
function WaitSoundState(State: Integer): Integer;

Ожидает дpайвеp воспpоизведения для пеpехода в состояние, указанное State.

Паpаметpы:
State: Одна из констант s_AllThreshold, s_QueueEmpty или s_Threshold. См. "Звуковые константы, s_" в главе 1.

Возвpащаемое значение:
Нуль в случае успешного завеpшения; s_SerDst в случае невеpного State.

 

Функция WindowFromPoint

Описание:
function WindowFromPoint(Point: TPoint): HWnd;

Опpеделяет окно, содеpжащее указанную точку.

Паpаметpы:
Point: Пpовеpяемая TPoint (в кооpдинатах экpана).

Возвpащаемое значение:
Идентификатоp окна; 0 - если в указанной точке нет окна.

функция находится в файле user32.dll

 

Функция WinExe

Описание:
function WindExe(CmdLine: PChar; CmdShow: Word): Word;

Выполняет пpикладную задачу, указанную паpаметpом CmdLine.

Паpаметpы:
CmdLine: Командная стpока для выполнения пpикладной задачи (заканчивающаяся пустым символом).
CmdShow: Опpеделяет, как будет изначально отобpажаться окно пpикладной задачи (см. ShowWindow).

Возвpащаемое значение:
Значение больше 32 в случае успешного завеpшения; в пpотивном случае, возвpащается одно из следующих значений: (0) не хватает памяти; (5) попытка динамически связать задачу; (6) 
библиотека имеет несколько сегментов данных; (10) невеpная веpсия Windows; (11) невеpный файл EXE; (12) пpикладная задача для OS/2; (13) пpикладная задача для DOS 4.0; (14) неизвестный 
тип файла EXE или (15) пpикладная задача не для защищенного pежима.

 

Функция WinHlp

Описание:
function WindHlp(Wnd: HWnd; HelpFile: PChar; Command: Word; Data: Longint): Bool;

Вызывает механизм Windows получения спpавочной инфоpмации с командой Command.

Паpаметpы:
Wnd: Идентификатоp окна.
HelpFile: Имя файла спpавочной инфоpмации (заканчивающееся пустым символом), включающее пpи необходимости имя маpшpута.
Command: Одна из команд help_Context, help_HelpOnHelp, help_Index, help_Key, help_Quit или help_SetIndex. См. pаздел "Команды получения спpавочной инфоpмации, help_" в главе 1.
Data: Номеp идентификатоpа контекста, если Command имеет значение help_Context, или ключевое слово спpавочной темы (заканчивающееся пустым символом), если Command имеет 
значение help_Key.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - в пpотивном случае.

 

Функция WriteComm

Описание:
function WriteComm(Cid: Integer; Buf: PChar; Size: Integer): Integer;

Выводит буфеp, указанный Buf, в устpойство связи.

Паpаметpы:
Cid: Устpойство связи.
Buf: Буфеp, содеpжащий записываемый символ.
Size: Число выводимых символов.

Возвpащаемое значение:
Фактическое число записанных символов; отpицательное число, если ошибка, абсолютное значение котоpой есть число символов, записанных до того, как возникла ошибка.

 

Функция WritePrivateProfileString

Описание:
function WritePrivateProfileString(ApplicationName, KeyName, Str, Filename: PChar): Bool;

Ищет в FileName указанный заголовок пpикладной задачи и имя клавиши, заменяя значение на указанное в Str.

Паpаметpы:
ApplicationName: Имя заголовка пpикладной задачи.
KeyName: Имя клавиши, появляющееся под именем заголовка пpикладной задачи или nil для удаления всей секции.
Str: Стpока с новым значением клавиши или nil для удаления имени клавиши.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - в пpотивном случае.

функция находится в файле kernel32.dll

 

Функция WriteProfileString

Описание:
function WriteProfileString(ApplicationName, KeyName, Str: PChar): Bool;

Ищет в файле WIN.INI указанный заголовок пpикладной задачи и имя клавиши, заменяя значение на указанное в Str.

Паpаметpы:
ApplicationName: Имя пpикладной задачи.
KeyName: Имя клавиши, появляющееся под именем заголовка пpикладной задачи или nil для удаления всей секции пpикладной задачи.
Str: Значение нового имени клавиши или nil для удаления имени клавиши.

Возвpащаемое значение:
Не нуль в случае успешного завеpшения; 0 - в пpотивном случае.

функция находится в файле kernel32.dll

 

Функция wvsprinf

Описание:
function wvsprinf(Output, Format, ArgList: PChar): Integer;

Фоpматиpует и записывает в буфеp последовательность символов.

Паpаметpы:
Output: Буфеp для пpиема отфоpматиpованных символов.
Format: Стpока упpавления фоpматом.
ArgList: Массив аpгументов для стpоки упpавления фоpматом.

Возвpащаемое значение:
В случае успешного завеpшения - число символов в Output, не считая 0; в пpотивном случае - меньше, чем длина Format.




Функции Win32 API [ Y ]

Функция Yield

Описание:
function Yield: Bool;

Останавливает текущую задачу и запускает ожидающую задачу.




Функции Win32 API [ Z ]

Функция ZeroMemory

Описание:
function ZeroMemory(Destination:Pointer, Length: DWORD);

Заполняет область памяти нулями.

Паpаметpы:
Destination: Указатель на начальный адрес области памяти.
Length: Размер области памяти.




Функции Win32 API [ _ ]

Функция _lcreat

Описание:


 function _lcreat(PathName: PChar; Attribute: Integer): Integer;
 

Откpывает указанный файл.

Паpаметpы:

  • PathName: Полное имя маpшpута DOS в откpываемому файлу.
  • Attribute: (0) чтение или запись; (1) только чтение; (2) невидимый или (3) системный.

Возвpащаемое значение:

Описатель файла DOS в случае успешного завеpшения; -1 - в пpотивном случае.

функция находится в файле kernel32.dll

Функция _lclose

Описание:


 function _lclose(FileHandle: Integer): Integer;
 

Закpывает указанный файл.

Паpаметpы:

  • FileHandle: Описатель файла DOS.

Возвpащаемое значение:

Нуль в случае успешного завеpшения; -1 - в пpотивном случае.

функция находится в файле kernel32.dll

Функция _lopen

Описание:


 function _lopen(PathName: Char; ReadWrite: Integer): Integer;
 

Откpывает указанный файл.

Паpаметpы:

  • PathName: Стpока, опpеделяющая путь и имя файла.
  • ReadWrite: Опpеделяет доступ по чтению и записи, используя для этого одну из констант of_: of_Read, of_ReadWrite или of_Write. См. pаздел "Константы откpытия файла, of_" в главе 1.

Возвpащаемое значение:

В случае успешного завеpшения - описатель файла DOS; -1 - в пpотивном случае.

функция находится в файле kernel32.dll

Функция _lread

Описание:


 function _lread(FileHandle: Integer; Buffer: PChar; Bytes: Integer): Word;
 

Считывает из откpытого файла указанное число байт.

Паpаметpы:

  • FileHandle: Описатель файла DOS.
  • Buffer: Пpинимающий буфеp.
  • Bytes: Число считываемых байт.

Возвpащаемое значение:

В случае успешного завеpшения - число считанных байт; -1 - в пpотивном случае; 0 - если конец файла.

функция находится в файле kernel32.dll

Функция _lwrite

Описание:


 function _lwrite(FileHandle: Integer; Buffer: PChar; Bytes: Integer): Word;
 

Записывает данные из буфеpа Buffer в указанный файл.

Паpаметpы:

  • FileHandle: Описатель файла DOS.
  • Buffer: Содеpжит записываемые данные.
  • Bytes: Число записываемых байт.

Возвpащаемое значение:

В случае успешного завеpшения - число байт, записанных в файл; -1 - в пpотивном случае.

функция находится в файле kernel32.dll




Определение параметров принтера через API

Для определения информации о принтере (плоттере, экране) необходимо знать Handle этого принтера, а его можно узнать объекта TPrinter - Printer.Handle. Далее вызывается функция API (unit WinProcs) :

 GetDevice(Handle:HDC; Index:integer):integer;
 

Index - код параметра, который необходимо вернуть. Для Index существует ряд констант :

  • DriverVersion - вернуть версию драйвера
  • Texnology - Технология вывода, их много, основные
    • dt_Plotter - плоттер
    • dt_RasPrinter - растровый принтер
    • dt_Display - дисплей
  • HorzSize - Горизонтальный размер листа (в мм)
  • VertSize - Вертикальный размер листа (в мм)
  • HorzRes - Горизонтальный размер листа (в пикселах)
  • VertRes - Вертикальный размер листа (в пикселах)
  • LogPixelX - Разрешение по оси Х в dpi (пиксел /дюйм)
  • LogPixelY - Разрешение по оси Y в dpi (пиксел /дюйм)

Кроме перечисленных еще около сотни, они позволяют узнать о принтере практически все.

Параметры, возвращаемые по LogPixelX и LogPixelY очень важны - они позволяют произвести пересчет координат из миллиметров в пиксели для текущего разрешения принтера. Пример таких функций:


 { Получить информацию о принтере }
 Procedure TForm1.GetPrinterInfo;
 begin
   PixelsX:=GetDeviceCaps(printer.Handle,LogPixelsX);
   PixelsY:=GetDeviceCaps(printer.Handle,LogPixelsY);
 end;
 
 { переводит координаты из мм в пиксели }
 Function TForm1.PrinterCoordX(x:integer):integer;
 begin
  PrinterCoordX:=round(PixelsX/25.4*x);
 end;
 
 { переводит координаты из мм в пиксели }
 Function TForm1.PrinterCoordY(Y:integer):integer;
 begin
  PrinterCoordY:=round(PixelsY/25.4*Y);
 end;
 
 ...
 
 GetPrinterInfo;
 Printer.Canvas.TextOut(PrinterCoordX(30), PrinterCoordY(55),
  'Этот текст печатается с отступом 30 мм от левого края и '+
  '55 мм от верха при любом разрешении принтера');
 

Данную методику можно с успехом применять для печати картинок - зная размер картинки можно пересчитать ее размеры в пикселах для текущего разрешения принтера, масштабировать, и затем уже распечатать. Иначе на матричном принтере (180 dpi) картинка будет огромной, а на качественном струйнике (720 dpi) - микроскопической.




Как добавить копию текущей записи


 procedure AppendCurrent(Dataset:Tdataset);
 var
   aField: Variant ;
   i: Integer ;
 begin
   // Создаём массив
   aField := VarArrayCreate([0,DataSet.Fieldcount-1],VarVariant);
 
   // считываем значения в массив
   for i := 0 to (DataSet.Fieldcount-1) do
     aField[i] := DataSet.fields[i].Value ;
 
   DataSet.Append ;
 
   // помещаем значения массива в новую запись
   for i := 0 to (DataSet.Fieldcount-1) do
     DataSet.fields[i].Value := aField[i] ;
 end;
 




Application.Initialize

Автор: Anders Hejlsberg

Метод Application.Initialize выполняет соответствующие задачи инициализации OLE Automation, например, регистрацию или "отрегистрацию" классов OLE Automation в системных регистрах, или завершение приложения, если оно было запущено с единственной целью - регистрацией. По своей сути, если приложение не является OLE Automation сервером, то такой вызов будет являться пустым оператором, и, если вы не создаете OLE Automation сервер, то можно спокойно удалить строку "Application.Initialize;" из исходного кода вашего проекта. Следовательно, если вы не добавляете функциональность OLE Automation сервера к 16-битному проекту, то при перекомпиляции старых проектов нет необходимости добавлять данный вызов.

Тут может помочь директива компилятора $IFDEF WIN32?

Да, вы можете сделать так:


 {$IFDEF WIN32}
 Application.Initialize; {$ENDIF}
 




Как написать приложение, адекватно отображающееся на экранах с различным разрешением монитора


Существует ровно один интуитивно понятный интерфейс - соска. Остальные осваиваются путем обучения.


 unit Main;
 
 interface
 
 uses
   Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls;
 
 type
   TForm1 = class(TForm)
   Button1: TButton;
   Edit1: TEdit;
   procedure Button1Click(Sender: TObject);
   procedure FormCreate(Sender: TObject);
   private
     { Private declarations }
     // Отлавливаем, сообщение о изменении разрешения экрана
     procedure WMDisplayChange(var message: TMessage); message WM_DISPLAYCHANGE;
   public
     { Public declarations }
     W, H: integer;
 end;
 
 var
   Form1: TForm1;
 
 implementation
 
 {$R *.DFM}
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
   Width := Round(Width * 1.5);
   Height := Round(Height * 1.5);
   ScaleBy(150, 100)
 end;
 
 procedure TForm1.WMDisplayChange(var message: TMessage);
 begin
   inherited;
   Width := Round(Width * LOWORD(message.LParam) / W);
   Height := Round(Height * HIWORD(message.LParam) / H);
   ScaleBy(LOWORD(message.LParam), W);
   W := Screen.Width;
   H := Screen.Height;
 end;
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
   W := Screen.Width;
   H := Screen.Height;
 end;
 
 end.
 




Анимированная иконка приложения

Увидев анимацию на форме, мы не удивимся, но сейчас нам предстоит освоить более сложную технологию: мы попытаемся анимировать иконку приложения, ту самую, которая находится на панели задач на кнопке нашего exe-файла!

Сначала нужно будет создать каждый кадр потенциального анимационного клипа. Для этого запустим утилиту "Image Editor", которая в ходит в стандартный пакет Delphi. Запустить её можно одноимённой командой из меню Tools[инструменты]. Там создаём несколько bmp-файлов размером 16х16.

После чего возвращаемся в Delphi и выносим на форму компонент класса TImageList, дважды щёлкаем на нём и с помощью кнопки Add последовательно добавляем созданные кадры. В каком порядке изображения будут добавляться, в таком же порядке они затем будут выводится.

Далее выносим таймер[Timer], его свойство Interval устанавливаем в нужное значение[например - 5], и именно через заданное здесь количество миллисекунд будут меняться кадры. По событию OnTimer пишем такой код:


 ImageList1.GetIcon(iconindex, Application.Icon);
 iconindex := iconindex + 1;
 if iconindex > 5 then
   iconindex := 0;
 

В строке [if iconindex>5 then iconindex:=0;] число 5 замените на индекс последней иконки в вашем ImageList'e[это количество иконок -1]

Не забудьте объявить глобальную переменную iconindex, которая должна быть целочисленного типа[integer]

А по созданию окна инициализируйте иконку приложения первым изображением в списке


 iconindex := 0;
 ImageList1.GetIcon(iconindex, Application.Icon);
 

Посмотрите на иконку программы ACDSee, которая показана в левом верхнем углу. На ней изображён глаз. По-моему, было бы довольно эффектно, если бы время от времени он подмигивал пользователю!




Работа в фоне

Я пишу программу в Delphi, которая каждый час должна проверять размер файла. Это также предполагает, что в случае неактивности приложения оно должно работать сторожевым псом в фоновом режиме win 95 и NT. Как мне сделать это...?? Вот некоторый исходный код, который должен делать то, что вы хотите. Я его только что создал и еще не успел проверить, но что-то подобное я уже делал, так что это должно работать. Код допускает одно предположение, о котором вы должны отдавать себе отчет. Оно заключается в том, что приложение должно запускатьтся одновременно с Windows (может быть из группы автозапуска), так как код использует GetTickCount, возвращающий в миллисекундах время с момента старта системы, это необходимо для ежечасной инициализац ии кода выполнения задачи. По-моему это то, что вам нужно. Величина, возвращаемая GetTickCount имеет тип DWORD, но Delphi ее хранит как LongInt, поэтому большие значения могут иметь отрицательную величину (после примерно 25 дней). Данный эффект в алгоритм е проверки наступления часа неопределен (я действительно не считал это). Аналогично, значение будет повторяться в цикле каждые 49.7 дней и может появиться другой эффект, когда раз в 49.7 дней в одном реальном часе алгоритм сработает дважды. Надеюсь это ни как не скажется на вашей задаче. Во всяком случае разве это не то, что вы хотели? Успехов!


 program Project1;
 
 uses Messages, Windows;
 
 {$R *.RES}
 
 function KeepRunning: Boolean;
 var
   Msg: TMsg;
 begin
   Result := True;
   while PeekMessage(Msg, 0, 0, 0, PM_REMOVE) do
   begin
     if (Msg.Message = WM_QUIT) then
       Result := False;
     DispatchMessage(Msg);
   end;
 end;
 
 function OnTheHour: Boolean;
 begin
   { Это действительно проверяется в течение одной секунды    }
   { (или меньше) для проверки наступления нового часа,       }
   { когда нам необходимо запустить нашу задачу на выполнение }
   Result := (GetTickCount mod
     (1 {hr} * 60 {min} * 60 {sec} * 1000 {msec}) < 1000);
 end;
 
 const
   filetocheck = 'c:\somedir\somefile.ext';
   magicsize = 1000000;
 var
   f: file;
   size: longint;
 begin
   { проверка наступления нового часа с момента запуска системы }
   while keeprunning do
   begin
     { проверяем наступление часа }
     if onthehour then
     begin
       { открываем файл с размером записи 1 байт }
       { и проверяем его размер                  }
       assignfile(f, filetocheck);
       reset(f, 1);
       size := filesize(f);
       closefile(f);
       { теперь проверяем изменение размера файла }
       if (size >= MAGICSIZE) then
       begin
         { Предпринимаем какие-то действия }
       end;
       { Теперь "сидим" в этом участке кода                 }
       { и ожидаем очередного часа, здесь можно             }
       { предусмотреть выход из программы или иное действие }
       while (KeepRunning and OnTheHour) do
         {ничего};
     end;
   end;
 end.
 




Взлом Windows-приложений

Если у тебя на компьютере постоянно живут вирусы, то еще не известно, кому в первую очередь надо лечиться.

Введение

Для начала я научу вас пользоваться W32Dasm. Я не хочу вам давать детальную помощь, как делать краки, но я могу научить вас самим добывать себе умения и навыки взлома. Когда вы используете W32Dasm, знайте, что он не даст вам серийные номера или коды, он лишь покажет путь, где находится место, где можно эти номера вводить. То, что я делаю каждый день при взломе программ, будет описано в этом справочнике, шаг за шагом.

Инструменты

Из инструментов взлома вам нужно следующее:

  • W32Dasm 8.5 или боолее позднюю версию,
  • Hacker's View 5.24,
  • Norton Commander (я позднее объясню, почему я его использую).
  • Turbo Pascal 7.0
  • TASM и TLINK 3.0

Как кракнуть Quick View Plus 4.0

  1. Запустите ORDER32.EXE
  2. Кликните на $49 Single User License (вы можете кликнуть и на $59), затем ACCEPT, потом UNLOCK BY PHONE.
  3. Введите любой код для получения сообщения об ошибке (вы должны записать это сообщение), потом выйдите из программы, кликнув на CANCEL.
  4. Запустите Norton Comander, перейдите в директорию QVP.
  5. Скопируйте ORDER32.EXE в ORDER32.EXX (для сохранности), а затем скопируйте ORDER32.EXE в 1.EXE (для использования в W32Dasm).
  6. Запустите W32Dasm и раздессимблируйте 1.EXE.
  7. После этого, кликните на STRING DATA REFERENCE, найдите там сообщение "You have entered an incorrect code.Please check your entry" (вы должны помнить,что это было сообщение об ошибке) и дважды щелкните мышью по нему.
  8. Закройте SDR окно. Вы должны увидеть сообщение:

     * Possible reference to String Resource ID=00041: "You have entered...
     :004049F8 6A29 push 00000029
     :004049FA FF353CCE4000 push dword ptr [0040CE3C]
     

  9. ОК, теперь вы должны найти последнее сравнение типа CMP,JNE, JE,TEST и т.д. перед сообщением об ошибке. Нажимайте стрелку "вверх", пока не найдете:

     :004049CD 755A jne 00404A29
     * Possible reference to String Resource ID=00032: "You must select...
     :004049CF 6A20 push 00000020
     ...
     ...
     * Possible reference to String Resource ID=00040: "Unlock Error"
     

  10. Теперь вы знаете, куда идет скачок при введении неправильного кода. Теперь можно посмотреть, что произойдет, если "jne" на "je". Убедитесь, что зеленая полоска находится на надписи:

     004049CD 755A jne 00404A29, вы должны увидеть Offset address внизу на статусной строке типа @Offset 00003DCDh Это место, где вы можете внести изменения в ORDER32.EXE.
     

    Перейдите обратно в Norton Commander, запустите HIEW ORDER32.EXE, нажмите F4 для выбора режима декодирования (Decode Mode), нажмите F5 и введите 3DCD. Вы должны увидеть следующее :

     00003DCD: 755A jne 000003E29
     00003DCF: 6A20 push 020
     00003DD1: FF15 call w,[di]
     

  11. Это то место, где вы можете изменить байты, нажмите F3, введите 74, нажмите F9 для обновления ORDER32.EXE. Выйдите из HIEW.
  12. Запустите ORDER32.EXE, введите любой код. Ура ! Мы сломали QVP 4.0 ! Но ! Что будет, если ввести настоящий серийный номер ? Появляется сообщение об ошибке ! Что это ?
  13. Снова запустиите HIEW ORDER32.EXE, нажмите F4, выберите Decode, нажмите F5 и введите 3DCD. Нажмите F3, введите EB, нажмите F9. Вы прямо "прыгнете" на Unlocked диалог.

Как кракнуть Hex WorkShop 2.51

  1. Запустите HWORKS32.EXE
  2. Кликните на HELP, About HEX Wo..
  3. Введите любой код, чтобы получить сообщение об ошибке (вы должны записать это сообщение) и выйдите из программы.
  4. Запустите Norton Commander, перейдите в директорию HWS.
  5. Скопируйте файл HWORKS32.EXE в HWORKS32.EXX (для сохранности) и скопируйте файл HWORKS32.EXE в 1.EXE (для использования в W32Dasm).
  6. Запустите W32Dasm и "разберите" 1.EXE.
  7. После этого, нажмите мышью на FIND TEXT, введите "You have entered an" (вы должны помнить, что это сообщение об ошибочно введенном серийном номере) и найдите соответствующую строку (вы не сможете сделать это в SDR-окне !)
  8. Вы должны увидеть следующую строку:

     Name: DialogID_0075, # of Controls=003, Caption: "Registration Unsucce..
     001-ControlID:FFFF, Control Class:""Control Text:"You have entered an..
     002-ControlID:FFFF, Control Class:""Control Text:"Please confirm you..
     

  9. Оk, теперь вы знаете, что ControlID будет использоваться, когда вы введете неверный код. Кликните FIND TEXT, введите "dialogid_0075" и вы найдете:

     * Possible reference to DialogID_0075
     :0041E233 6A75 push 00000075
     :0041E235 8D8D10FFFFFF lea ecx, dword ptr [ebp+FF10]
     

  10. Теперь вы должны поискать последнюю ссылку, типа CMP, JNE, JE и пр. перед диалогом об ошибке. Нажимайте клавишу "вверх", пока не найдете :

     :0041E145 837DEC00 cmp dword ptr [ebp-14], 00000000
     :0041E149 0F8479000000 je 0041E1C8
     :0041E14F 8B8DFCFEFFFF mov ecx, dword ptr [ebp+FEFC]
     

  11. Теперь вам нужно посмотреть, что произойдет, если "je" заменить на "jne". Убедитесь, что зеленая полоска установлена на строке

     :0041E149 0F8479000000 je 0041E1C8.
     

    Вы должны на нижней статусной строке увидеть оффсетный адрес, типа:

     @Offset0001D549h.
     

    Это то место, где вы сможете кракнуть HWORKS32.EXE
  12. Перейдите обратно в Norton Commander, запустите HIEW HWORKS32.EXE, нажмите F4 для выбора режима декодирования (Decode Mode), нажмите F5 и введите ID549. Вы должны увидеть следующее :

     0001D549: 0F847900 je 00001D5C6 ---------- (1)
     0001D54D: 0000 add [bx][si],al
     0001D54F: 8B8DFCFE mov cx,[di][0FEFC]
     

  13. Это то место, где вы сможете изменить несколько байтов, нажмите F3, введите 0F85, нажмите F9 для обновления файла HWORKS32.EXE. Выйдите из HIEW.
  14. Запустите HWORKS32.EXE и введите любой код, работает ? НЕТ !?!??!?! Хе-хе-хе... Не волнуйтесь ! Снова перейдите в Нортон. Скопируйте HWORKS32.EXX в HWORKS32.EXE (теперь вы видите, почему я делаю копию файла с расширением ЕХХ для сохранности). Теперь перейдите в W32Dasm, вы должны перейти туда, где только что были (на 0041У145).
  15. Нажмите F3 для очередного поиска "DialogID_0075", вы должны найти:

     * Possible reference to DialogID_0075
     :00430ADD 6A75 push 00000075
     :00430ADF 8D8D10FFFFFF lea ecx, dword ptr [ebp+FF10]
     

  16. Ok, теперь вы теперь можете посмотреть на последние ссылки, типа CMP, JNE, JE и т.д. перед диалогом об ошибке. Нажимайте стрелку вверх, пока не найдете :

     :004309EF 837DEC00 cmp dword ptr [ebp-14], 00000000
     :004309F3 0F8479000000 je 00430A72
     :004309F9 8B8DFCFEFFFF mov ecx, dword ptr [ebp+FEFC]
     

  17. Теперь вы можете посмотреть, что произойдет, если "je" заменить на 'jne". (это должно сработать). Переместите полоску на:

     004309F3 0F8479000000 je 00430A72.
     

    На статусной строке внизу экрана вы должны следующее:

     @Offset0002FDF3h (оффсетный адрес).
     

    Это то место, где вы сможете кракнуть HWORKS32.EXE.
  18. Перейдите в Norton Commander, запустите HIEW HWORKS32.EXE, нажмите F4 для выбора Decode Mode (ASM), нажмите F5 и введите 2FDF3. Вы должны увидеть:

     0002FDF3: 0F847900 je 00001D5C6 ---------- (1)
     0002FDF7: 0000 add [bx][si],al
     0002FDF9: 8B8DFCFE mov cx,[di][0FEFC]
     

  19. Это то место, где вы сможете изменить несколько байтов, нажмите F3, введите 0F85, нажмите F9 для обновления файла HWORKS32.EXE. Выйдите из HIEW.
  20. Запустите снова HWORKS32.EXE и введите любой код. Работает ? Виола !!! Поздравляю !!! Вы крякнули HEX WorkShop 2.51 !

Как сделать собственный патч

Здесь напечатан исходный код на Паскале :


 uses Crt;
 
 const
   A: array[1..1] of record {<-------- 1 byte to be patched}
     A: Longint;
     B: Byte;
 
   end =
   ((A: $3DCD; B: $EB));
     {<--------------- offset "3DCD" and byte "EB" to be changed}
 
 var
   Ch: Char;
   I: Byte;
   F: file;
   FN: file of byte;
   Size: longint;
 
 begin
   Writeln('TKC''s Little Patch');
   writeln('Crack for QVP 4.0 by TKC/PC ''97');
   Assign(F, 'ORDER32.EXE'); {<-------------- filename to be patched}
 {$I-}Reset(F, 1);
 {$I+}
   if IOResult <> 0 then
   begin
     writeln('File not found!');
     halt(1);
   end;
   for I := 1 to 1 do {<---------------------- 1 byte to be patched}
 
   begin
     Seek(F, A[I].A);
     Ch := Char(A[I].B);
     Blockwrite(F, Ch, 1);
   end;
   Writeln('File successfully patched!');
 
 end.
 

Исходник на ассемблере (для изучающих ассемблер):


 DOSSEG
 .MODEL SMALL
 .STACK 500h
 .DATA
 .CODE
 PatchL EQU 6
 Buffer Db PatchL Dup(1)
 handle dw ?
 intro db "TKC's Little Patch",0dh,0ah,"Crack for QVP 4.0 by TKC/PC '97$"
 
 FileName db "ORDER32.EXE",0 ;<------- filename to be patched
 notfound db 0dh,0ah,"File not found!$"
 cracked db 0dh,0ah,"File successfully patched. Enjoy!$"
 Cant db 0dh,0ah,"Can't write to file.$"
 Done db "File has been made.$"
 String db 0EBh,0 ;<------------- byte "EB" to be patched
 
 START:
 mov ax,cs
 mov ds,ax
 mov dx,offset intro ;point to the time prompt
 mov ah,9 ;DOS: print string
 int 21h
 jmp openfile
 
 openfile:
 
 mov ax,cs
 mov ds,ax
 mov ax,3d02h
 mov dx,offset FileName
 int 21h
 mov handle,ax
 cmp ax,02h
 je filedontexist
 jmp write
 
 filedontexist:
 mov ax,cs
 mov ds,ax
 mov dx,offset notfound
 mov ah,9 ;DOS: print string
 int 21h ;display the time prompt
 jmp exit
 
 Write:
 mov bx,handle
 mov cx,0000h
 mov dx,3DCDh ;<------------- offset "3DCD"
 mov ax,4200h
 int 21h
 
 mov cx,patchl
 mov dx,offset String
 mov ah,40h
 mov cx,01h
 int 21h
 mov ax,cs
 mov ds,ax
 mov dx,offset cracked
 mov ah,9 ;DOS: print string
 int 21h ;display the time prompt
 jmp Exit
 
 
 Exit:
 mov ah,3eh
 int 21h
 mov ax,4c00h
 int 21h
 END START
 

Заключительные слова

Здесь несколько важных функций, используемых для крэкинга :


 Hex: Asm: Means
 75	or 0F85 jne jump if not equal
 74	or 0F84 je jump if equal
 EB	jmp 	jump directly to
 90 	nop 	no operation
 77 	or 0F87 ja jump if above
 0F86 	jna 	jump if not above
 0F83 	jae 	jump if above or equal
 0F82 	jnae 	jump if not above or equal
 0F82 	jb 	jump if below
 0F83 	jnb 	jump if not below
 0F86 	jbe 	jump if below or equal
 0F87 	jnbe 	jump if not below or equal
 0F8F 	jg 	jump if greater
 0F8E 	jng 	jump if not greater
 0F8D 	jge 	jump if greater or equal
 0F8C 	jnge 	jump if not greater or equal
 0F8C 	jl 	jump if less
 0F8D 	jnl 	jump if not less
 0F8E 	jle 	jump if less or equal
 0F8F 	jnle 	jump if not less or equal
 

Ваши небольшие знания по Ассемберу, вам, естественно, помогут, и они вам потребуются для использования Soft-ICE. Кроме того, вы сможете кракать эти куски с помощью W32Dasm как маньяк :-) Вы не сможете дизассемблировать программы на Visual Basic, для него вам понадобятся специальные декомпилеры, но с помощью SoftIce'a поломать их можно и без декомпилятора.

Удачи !




Как получить имя программы, с которой ассоциировано то или иное расширение

Автор: Олег Кулабухов

Юзер подходит к программисту и спрашивает:
- У меня почемуто пейджмейкеровский файл в ворде не открывается.
- И не откроется, там же расширения разные.
- Так я его переименовал.


 uses
 {$IFDEF WIN32}
   Registry; {We will get it from the registry}
 {$ELSE}
   IniFiles; {We will get it from the win.ini file}
 {$ENDIF}
 
 {$IFNDEF WIN32}
 const
   MAX_PATH = 144;
 {$ENDIF}
 
 function GetProgramAssociation(Ext: string): string;
 var
 {$IFDEF WIN32}
   reg: TRegistry;
   s: string;
 {$ELSE}
   WinIni: TIniFile;
   WinIniFileName: array[0..MAX_PATH] of char;
   s: string;
 {$ENDIF}
 begin
 {$IFDEF WIN32}
   s := '';
   reg := TRegistry.Create;
   reg.RootKey := HKEY_CLASSES_ROOT;
   if reg.OpenKey('.' + ext + '\shell\open\command',
     false) <> false then
   begin
     {The open command has been found}
     s := reg.ReadString('');
     reg.CloseKey;
   end
   else
   begin
     {perhaps thier is a system file pointer}
     if reg.OpenKey('.' + ext,
       false) <> false then
     begin
       s := reg.ReadString('');
       reg.CloseKey;
       if s <> '' then
       begin
         {A system file pointer was found}
         if reg.OpenKey(s + '\shell\open\command',
           false) <> false then
           {The open command has been found}
           s := reg.ReadString('');
         reg.CloseKey;
       end;
     end;
   end;
   {Delete any command line, quotes and spaces}
   if Pos('%', s) > 0 then
     Delete(s, Pos('%', s), length(s));
   if ((length(s) > 0) and
     (s[1] = '"')) then
     Delete(s, 1, 1);
   if ((length(s) > 0) and
     (s[length(s)] = '"')) then
     Delete(s, Length(s), 1);
   while ((length(s) > 0) and
     ((s[length(s)] = #32) or
     (s[length(s)] = '"'))) do
     Delete(s, Length(s), 1);
 {$ELSE}
   GetWindowsDirectory(WinIniFileName, sizeof(WinIniFileName));
   StrCat(WinIniFileName, '\win.ini');
   WinIni := TIniFile.Create(WinIniFileName);
   s := WinIni.ReadString('Extensions',
     ext,
     '');
   WinIni.Free;
   {Delete any command line}
   if Pos(' ^', s) > 0 then
     Delete(s, Pos(' ^', s), length(s));
 {$ENDIF}
   result := s;
 end;
 
 procedure TForm1.Button1Click(Sender: TObject);
 begin
   ShowMessage(GetProgramAssociation('gif'));
 end;
 




Как программе удалить саму себя

Если вы решили удалить Windows, сделайте это медленно с удовольствием, побайтно...


 uses
   Windows, SysUtils;
 
 procedure DeleteMe;
 var
   BatchFile: TextFile;
   BatchFileName: string;
   ProcessInfo: TProcessInformation;
   StartUpInfo: TStartupInfo;
 begin
   { создаём бат-файл в директории приложения }
   BatchFileName := ExtractFilePath(ParamStr(0)) + '$$336699.bat';
 
   { открываем и записываем в файл }
   AssignFile(BatchFile, BatchFileName);
   Rewrite(BatchFile);
 
   Writeln(BatchFile, ':try');
   Writeln(BatchFile, 'del "' + ParamStr(0) + '"');
   Writeln(BatchFile,
   'if exist "' + ParamStr(0) + '"' + ' goto try');
   Writeln(BatchFile, 'del "' + BatchFileName + '"');
   CloseFile(BatchFile);
 
   FillChar(StartUpInfo, SizeOf(StartUpInfo), $00);
   StartUpInfo.dwFlags := STARTF_USESHOWWINDOW;
   StartUpInfo.wShowWindow := SW_HIDE;
 
   if CreateProcess(nil, PChar(BatchFileName), nil, nil,
   False, IDLE_PRIORITY_CLASS, nil, nil, StartUpInfo,
   ProcessInfo) then
   begin
     CloseHandle(ProcessInfo.hThread);
     CloseHandle(ProcessInfo.hProcess);
   end;
 end;
 

А вот тот же способ, но немного модифицированный:


 program delete2;
 
 uses
   SysUtils, windows;
 
 var
   BatchFile: TextFile;
   BatchFileName: string;
   TM: Cardinal;
   TempMem: PChar;
 
 begin
   BatchFileName:=ExtractFilePath(ParamStr(0))+ '$$336699.bat';
 
 
   AssignFile(BatchFile, BatchFileName);
   Rewrite(BatchFile);
 
   Writeln(BatchFile,':try');
   Writeln(BatchFile,'del "' + ParamStr(0) + '"');
   Writeln(BatchFile,'if exist "' + ParamStr(0) + '" goto try');
   Writeln(BatchFile,'del "' + BatchFileName + '"');
   CloseFile(BatchFile);
 
   TM:=70;
   GetMem (TempMem,TM);
   GetShortPathName (pchar(BatchFileName), TempMem, TM);
   BatchFileName:=TempMem;
   FreeMem(TempMem);
 
   winexec(Pchar(BatchFileName),sw_hide);
 
   halt;
 end.
 




Как программе удалить саму себя 2

Если ваш руководитель
Заблуждаясь утверждает,
Что в его машине вирус
И он вами занесен,
То когда он отлучится,
Выньте из нее винчестер
И в кастрюле кипятите,
Пока вирус не помрет!!!


 procedure DeleteSelf;
 var
   module: HModule;
   buf: array [0..MAX_PATH - 1] of char;
   p: ULong;
   hKrnl32: HModule;
   pExitProcess,
   pDeleteFile,
   pFreeLibrary: pointer;
 begin
   module := GetModuleHandle(nil);
   GetModuleFileName(module, buf, SizeOf(buf));
   CloseHandle(THandle(4));
   p := ULONG(module) + 1;
   hKrnl32 := GetModuleHandle('kernel32');
   pExitProcess := GetProcAddress(hKrnl32, 'ExitProcess');
   pDeleteFile := GetProcAddress(hKrnl32, 'DeleteFileA');
   pFreeLibrary := GetProcAddress(hKrnl32, 'FreeLibrary');
   asm
     lea eax, buf
     push 0
     push 0
     push eax
     push pExitProcess
     push p
     push pDeleteFile
     push pFreeLibrary
     ret
   end;
 end;
 




Управление приложением через Telnet

Надпись на могиле немодернизированного компьютера 276: "Он не мог войти в интернет".

Итак, начнем с главного - почему для удаленного администрирования своей программы следует использовать именно Telnet? Ответ на этот вопрос достаточно прост:

  • Утилита Telnet есть на любом компьютере с операционной системой Windows, UNIX, AIX и т.п., поэтому ее не требуется писать или устанавливать
  • Telnet является штатным средством удаленного администрирования.
  • Telnet подразумевает текстовый обмен, поэтому его очень легко поддерживать в своей программе
  • Возможностей текстового терминала как правило достаточно для управления программой, ее настройки и администрирования

Рассмотрим немного теории. Утилиту Telnet легче всего запустить через Start->Run (Пуск -> Выполнить). После запуска необходимо произвести соединение с удаленным хостом, для чего выполняется используется меню "Connect->Remote System". При этом выводится меню соединения, в котором необходимо указать три параметра: хост, порт и тип терминала. В качестве хоста указывается имя удаленного компьютера (или его IP адрес), порт можно задать двумя путями - выбором/вводом символического имени (например, telnet), или вводом номера порта. Мы будем пользоваться вторым путем, т.е. будем использовать нестандартные номера портов. Тип терминала оставим vt100.

Утилита Telnet поддерживает параметры командой строки:


 telnet [remote_host] [port]
 

где

  • remote_host представляет собой имя или IP адрес удаленной машины.
  • port номер порта. Если соединение идет по стандартному порту, то этот параметр опускается.

Пример:


 telnet zaitsevov или telnet zaitsevov 5000
 

Протокол Telnet очень прост - сначала устанавливается TCP/IP соединение с удаленной машиной. Затем, когда пользователь вводит символ, происходит его передача удаленному хосту. Для простоты будем называть его сервером.

Далее возможно два режима работы - с локальным эхом или без локального эха (режим по умолчанию). Если работа ведется с локальным эхом, то каждый вводимый пользователем символ немедленно отображается на экране. При работе без локального эха сервер обязан создавать эхо, дублирую принимаемые данные клиенту. Это позволят тестировать канал (каждый символ проходит по кругу) и организовывать ввод данных без эха (например, для ввода пароля). Мои примеры ориентированы на работу без локального эха.

При приеме любой информации от сервера утилита Telnet немедленно отображает его на экране. Это позволяет серверу организовывать эхо и выводить любую информацию в текстовом виде. При этом поддерживатся некоторые управляющие коды, например, код "забой", стирающий один символ.

Итак, приступим к разработке приложения. Создадим пустой проект и поместим на форму компонент ServerSocket1 типа TServerSocket. Зададим ему порт, например 5000. Напоминаю, что:

  • номер порта должен быть нестандартным, чтобы не пересекаться с другими программами. При этом желательно считывать его из INI файла, что даст возможность настройки при необходимости.
  • Свойство Active должно быть false и устанавливаться в true при запуске программы. Иначе приложение свалится при попытке запуска второй копии или при отсутствии сети. Установку Active := true следует делать в блоке try ... except

Итак, в обработчике OnCreate формы пишем:


 begin
   try
     ServerSocket1.Active := true;
   except
     ShowMessage('Ошибки при активации ServerSocket');
   end;
 end;
 

Далее необходимо научиться определять моменты соединения и отключения клиента. Для этого следует создать обработчики OnClientConnect и OnClientDisconnect. Сразу отмечу, что при подключении клиента обычно принято выдывать ему заголовок, ообщающий о том, что он соединился с программой *** версии NN. С учетом этого обработчик OnClientConnect будет иметь вид:


 procedure TMain.ServerSocket1ClientConnect(Sender: TObject; Socket: TCustomWinSocket);
 begin
   Socket.SendText('Connected. Программа Telnet1 Example на проводе.'+#$0D+#$0A);
   Socket.SendText('Enter password : ');
   Connected := false;
   Memo1.Lines.Add('Произошло соединение с пользователем');
 end;
 

При этом я хочу подчеркнуть особенность - нормально поддерживается одно соединение, для нескольких необходимы некоторые усложнения и мых их пока опустим.

Особенности:

  • Выводить информацию при соединении желательно на английском языке. Это позволяет избежать ситуации, когда на компьтере администратора не окажется поддержки русского языка и Telnet выведет ему абракадабру. У меня это наблюдается постоянно на английской NT 4 - приходится каждый раз лазить в настройки Telnet и задавать русский CharSet.
  • При соединении следует спросить пароль. Иначе каждый, кому нечего делать, залезет в программу и будет там ковыряться (из практики - преценденты были).

Переменная Connected отмечает, что пользователь еще не соединился с программой (т.е. не провел свою идентификацию). Рассмотрим сразу обработчик OnClientDisconnect, он еще проще:


 // Поддержка связи по TCP/IP для удаленного конфигурирования - действия при отключении
 procedure TMain.ServerSocket1ClientDisconnect(Sender: TObject; Socket: TCustomWinSocket);
 begin
   Connected := false;
   Memo1.Lines.Add('Соединение разорвано');
 end;
 

Итак, теперь настало время для самого интересного - написания обработчика OnClientRead. Этот обработчик вызывается всякий раз, когда от клиента приходят данные. Т.е. в свете приведенных выше теоретических замечаний это будет происходить при вводе каждого отдельного символа. Задачи обработчика:

  • Создавать (при необходимости) эхо для всех принимаемых символов. Очевидно, что при вводе паролей эхо создавать не нужно. При созании эха необходимо учитывать, что символ с кодом FF (буква "я") должен повторяться дважды, иначе он будет погложен Telnet - ом как служебный и не отобразится
  • Накапливать вводимые символы, ожидая прихода признака конца команы. Как правило, признаком конца команды считают перевод код строки (следует заметить, что тут разработчик сам себе стандарт, но отклоняться от общепринятых правил не рекомендуется. Для накопления принимаемой информации стоит завести буферную переменную, в моем случае она будет называться TelnetS.
  • При получении символа с кодом 08h ("BackSpace") необходимо не помещать ее в буфер, а стереть из буфера последний символ. Но в виде эха его отправить необходимо, т.к. это приведет к стиранию символа на экране Telnet (при подавлении эха он останется на экране, но сотрется в буфере программы, что приведет к путанице).
  • При обнаружении символа перевода строки (код $0D) следует считать содержимое буфера командой и интерпретировать. Как - это отдельный разговор

Все вышеописанное реализует примерно следующий код:


 // Поддержка связи по TCP/IP для удаленного конфигурирования - действия при получении данных
 procedure TForm1.ServerSocket1ClientRead(Sender: TObject; Socket: TCustomWinSocket);
 var
   s, st: string;
 begin
   s := Socket.ReceiveText;
 
   // Это код перевода строки ? Если да, то выполняем команду и передаем ее ответ клиенту
   if ord(s[1]) = $0D then
   begin
     st := ExecuteCMD(TelnetS);
     if st <> '' then
       st := #$0D + #$0A + st;
     st := st + #$0D + #$0A + '>';
     TelnetSendText(Socket, st);
     TelnetS := '';
     exit;
   end;
 
   // Это код клавиши BackSpace. Если да, то передадим его клиенту
   // и удалим последний символ из буфера
   if ord(s[1]) = $08 then
   begin
     Delete(TelnetS, length(TelnetS), 1);
     TelnetSendText(Socket, s);
     exit;
   end;
 
   // Добавим очередной символ к буферу
   TelnetS := TelnetS + s;
 
   // Передадим его клиенту для организации эха
   if connected then
     TelnetSendText(Socket, s);
 end;
 

Как легко заметить, приведенный выше код реализует эхо, обрабатывает BackSpace и дожидается ввода команды, считая код $OD (Enter) признаком завершения ввода команды. При обнаружении этого кода вызывается функция пользователя ExecuteCMD, которая должна разобрать и проанализировать команду, выполнить ее и вернуть (при необходомости) ответ пользователю. Эта же функция занимается проверкой вводимого пользователем пароля. Так ка передача ответа/эха имеет некоторые особенности, например, необходимость удвоения символа с кодом FF и подавления передачи для реализации невидимого ввода, имеет смысл выполнить ее в виде отдельной функции:


 // Передача ответа/эха клиенту
 function TForm1.TelnetSendText(Socket: TCustomWinSocket; AText: string): boolean;
 var
   i: integer;
   St: string;
 begin
   Result := false;
   if not(connected) then
     exit;
   St := '';
   for i := 1 to length(AText) do
     if AText[i] <> #$FF then
       st := st + AText[i]
     else
       st := st + #$FF + #$FF;
   Socket.SendText(st);
 end;
 
 // В моем примере функция ExecuteCMD имеет вид:
 // Интерретатор команд
 function TForm1.ExecuteCMD(ACmd: string): string;
 var
   UCmd, Params: string;
 begin
   Result := '';
   Memo1.Lines.Add('Выполняется: '+ACmd);
   if not(connected) then
   begin
     if UpperCase(ACmd) = '123' then
     begin
       Connected := true;
       Result := 'Пользователь идентифицирован!';
     end;
     exit;
   end;
 
   // Выделение команды
   UCmd := ACmd;
   Params := '';
   if pos(' ', UCmd) > 0 then
   begin
     Params := Copy(UCmd, pos(' ', UCmd)+1, Length(UCmd));
     UCmd := Copy(UCmd, 1, pos(' ', UCmd)-1);
   end;
   UCmd := Trim(UpperCase(UCMD));
   Memo1.Lines.Add('Выделена команда: '+UCmd);
 
   // ? или HLP или HELP - вывод справки
   if (UCmd = '?') or (UCmd = 'HLP') or (UCmd = 'HELP') then
   begin
     Result :=
     'Краткая справка по командам Telnet интерфейса'+CRLF+
     ' ?, HLP, HELP - вызов справки'+CRLF+
     ' EXIT - завершение работы по Telnen интерфейсу'+CRLF+
     ' HALT - немедленный останов программы'+CRLF+
     ' VER - версия программы'+CRLF+
     ' MESS <собщение> - вывод сообщения для пользователя'+CRLF+
     ' INP <собщение> - вывод сообщения для пользователя и возврат его ответа';
     exit;
   end;
 
   if (UCmd = 'EXIT') then
   begin
     ServerSocket1.Socket.Connections[0].Close;
     exit;
   end;
 
   if (UCmd = 'VER') then
   begin
     Result := 'Версия 1.00 от 27.01.2001 (C) Зайцев Олег';
     exit;
   end;
 
   if (UCmd = 'HALT') then
     halt;
 
   if (UCmd = 'MESS') then
   begin
     ShowMessage(Params);
     exit;
   end;
 
   if (UCmd = 'INP') then
   begin
     Result := InputBox(Params,'Введите ответ', '');
     exit;
   end;
 
   Result := 'Неизвестная команда ' + ACmd;
 end;
 

Реальная система команд естественно определяется разработчиком, но рекомендуется предусмотреть следующие команды:

  • ?, HLP, HELP для вывода справочной информации (практика показала, что при поддерке 20-30 команд больше половины забываются за месяц)
  • EXIT - завершение обмена

И, наконец, в завершении следует отметить одну особенность - пользователь может завершить обмен корректно (путем ввода команды EXIT (если таковая поддерживается) или выбором опции "Отключить" в Telnet; и некорректно - путем закрытия Telnet во время обмена. В этом случае в программе будет ошибка сокета 10054. Ее имеет смысл поймать и подавить при помощи обработчика OnClientError следующего вида:


 procedure TForm1.ServerSocket1ClientError(Sender: TObject; Socket: TCustomWinSocket;
   ErrorEvent: TErrorEvent; var ErrorCode: Integer);
 begin
   // Обработка события "разрыв соединения"
   if ErrorCode = 10054 then
   begin
     Socket.Close;
     ErrorCode := 0;
   end;
 end;
 

И в завершении хочется сказать, что подобная система внедрена в несколько моих программ, испрользуемых в ОАО Смоленскэнерго и отлично себя зарекомендовала, т.к. предприятие большое и возможность удаленной настройки/управления в ряде случаев освобождает разработчика от ненужной беготни.




Как получить путь запущенного приложения

для этого используется функция ExtractFilePath. Вот примеры её использования:


 MessageDlg('program path = ' + ExtractFilePath(Application.ExeName,
   mtInformation, [mbOk], 0);
 

или


 function ApplicationPath: string;
 begin
   Result := ExtractFilePath(ParamStr(0));
 end;
 




Как отследить переход фокуса в приложении

Во всех странах мира люди хорошо знают и широко используют Windows, и только русские говорят, что он х##вый. Потому что только русские хорошо знают и широко используют это слово.


 procedure TForm1.AppControlChange(Sender: TObject);
 begin
   if Sender is TScreen then
     Caption := TScreen(Sender).ActiveForm.ActiveControl.name;
 end;
 
 procedure TForm1.FormCreate(Sender: TObject);
 begin
   Screen.OnActiveControlChange := AppControlChange;
 end;
 




Создание приложения наподобие MS Outlook


Outlook Express: "Ваше сообщение не может быть отправлено, так как работник ФСБ, проверяющий вашу почту временно отсутствует!"

У Вас возникла необходимость создать многооконное приложение, но не хочется захламлять экран большим количеством окошек ? Создайте формы как обычно, но в каждой форме, за исключением основной, установите BorderStyle=bsNone. Затем на основную форму перетащите панель которая будет управлять заполнением Ваших форм данными и полями ввода. В Основной форме нужно добавить примерно такой код:

acXxxxx - это действие, которое будет выполняться при нажатии на элемент (пункт меню, кнопка, акселератор и т.д.) ассоциированный с этим действием через свойство Action.


 private
   // используется для заполнения всего экрана
   procedure WMSettingChange(var Msg: TMessage); message WM_SETTINGCHANGE;
 public
   ActiveDetailForm: TForm; // Форма, которая активна в данный момент
   procedure SetActiveDetailForm(F: TForm; ParentControl: TWinControl);
 end;
 
 var
   frmIMMain: TfrmIMMain;
 
 implementation
 
 uses
   imdata, imSoftL, imSuppl, imEqDet, imDesk, imSpareP, imCateg,
   imLocL, imUserL, imEqList, imEqByUsr, imImpBlb, imSftLic, imSupL,
   imEqDetR, imRptPrm, imdmRep, imSftLicRepPrm, imSparePR, imSparePPrm,
   imSftDetR, imSoftDetRPrmDlg;
 
 {$R *.DFM}
 
 function GetWindowsWorkArea: TRect;
 begin
   SystemParametersInfo(SPI_GETWORKAREA, 0, @Result, 0);
 end;
 
 procedure TfrmIMMain.WMSettingChange( var Msg: TMessage);
 var
   R: TRect;
 begin
   if (Msg.WParam=SPI_SETWORKAREA) then
   begin
     R:=GetWindowsWorkArea;
     SetBounds(R.Left, R.Top, R.Right-R.Left, R.Bottom-R.Top);
   end;
   Msg.Result:=0;
 end;
 
 procedure TfrmIMMain.FormCreate(Sender: TObject);
 var
   R: TRect;
 begin
   // заполняем весь экран...
   R:=GetWindowsWorkArea;
   SetBounds(R.Left, R.Top, R.Right-R.Left, R.Bottom-R.Top);
 end;
 
 // показываем форму списка Software
 procedure TfrmIMMain.acSoftwareListExecute(Sender: TObject);
 begin
   if (Sender is TAction) then
   begin
     (Sender as TAction).Checked:=True;
     fcbSoftList.Down:=True;
   end;
   //paWorkArea это панель, которая использется, как управляющая для форм
   SetActiveDetailForm(frmIMSoftList, paWorkArea);
 end;
 
 // показываем форму "Оборудование"...
 procedure TfrmIMMain.acEquipmentDetailsExecute(Sender: TObject);
 begin
   if (Sender is TAction) then
   begin
     (Sender as TAction).Checked:=True;
     fcbEqDet.Down:=True;
   end;
   SetActiveDetailForm(frmIMEqDet, paWorkArea);
 end;
 
 // устанавливаем активную форму, чтобы выглядело как в MS outlook.......
 // ParentControl это TPanel, но это может быть любой оконный элемент
 // управления (который имеет оконное свойство Handle)
 procedure TfrmIMMain.SetActiveDetailForm(F: TForm; ParentControl:
 TWinControl);
 begin
   if ActiveDetailForm<>F then
   begin
     if Assigned(ActiveDetailForm) then
       ActiveDetailForm.Hide;
     //следующие две линии делают то, что нам нужно...
     F.Parent:=ParentControl;
     F.Align:=alClient;
     ActiveDetailForm:=F;
     F.Show;
   end;
 end;
 
 procedure TfrmIMMain.FormActivate(Sender: TObject);
 begin
   //устанавливаем форму по умолчанию при запуске.
   if not Assigned(ActiveDetailForm) then
     acEquipmentDetailsExecute(acEquipmentDetails);
 end;
 




Как проводить локализацию своих приложений

Автор: Dmitry Kuzmenko

Несколько перлов из жизни российских компьютерных переводчиков:
These ports are not supported - Эти порты не поддерживаются.
Assign nickname to authority - Дать кличку авторитету.
3-character resource type - Трехбуквенный тип ресурса.

В Delphi есть специальные механизмы, позволяющие приложение "переделать" на любой язык после компиляции. Для D3 надо посмотреть в хелпе, по-моему, internationalization или что-то в этом роде. Для D4 вообще все делается ОЧЕНЬ просто:

  1. берется проект, компилируется
  2. тут-же не закрывая проект вызвается New|Resource DLL Wizard в нем указывается какие формы и модули должны подвергнуться переводу на другой язык.
  3. в результате работы Wizard появляется проект (!) с RC и DFM. Открываем формы, и переделываем все сообщения + размер (соотв. длине сообщений). Компилируем. В результате получается файл xxxxxxx.rus, где xxxxxxx - название исходного проекта.
  4. Запускаем xxxxxxx.exe. Видим некий не наш язык. Подкладываем в каталог с этим exe изготовленный файл xxxxxxx.rus, и запускаем exe повторно. Видим абсолютно ВЕЗДЕ переведенные сообщения.

p.s. файл RUS можно подставлять и убирать по вкусу.

В Delphi3. Вот, случайно набpели в хэлпе. Если нужно изменить pесуpсы какого-либо модуля, то это можно делать с помощью нехитpой опеpации:

  1. Вынимаете pесуpсы из этого модуля.
  2. Пеpеводите их на дpугой язык. (напpимеp pусский)
  3. Создаете в Delphi свой пpоект Dll-ки (с именем того модуля, из котоpого вы вынули pесуpсы, напpимеp vcl30), в котоpый включаете _пеpеведенные_ pесуpсы: {$R vcl30rus.res}
  4. Собиpаете все это.
  5. Пеpеименовываете полученную vcl30.Dll в vcl30.rus и кидаете ее в System.

Если вы хотите, пpиложение "говоpило" по pусски только тогда, когда в pегиональных установках стоит Russia - то тогда это все. Если же вы хотите, чтобы ваше пpиложение _всегда_ поднимало pусские pесуpсы, то необходимо сделать следующее добавление в Registry: HKEY_CURRENT_USER\SOFTWARE\Borland\Delphi\Locales "X:\MyProject\MyApp.exe" = "rus"

Тепеpь, когда ваше пpиложение будет поднимать pakages, то всегда будут бpаться pусские pесуpсы. Дpугие пpиложения, напpимеp Delphi - это не затpонет. Таким обpазом можно заменять даже DFM-ки из пpоекта.

Более подpобно об этом - см Help - Index - Localizing...




Как проводить локализацию своих приложений 2

В Delphi 3 и 4 есть специальные механизмы, позволяющие приложение "переделать" на любой язык после компиляции. Для D3 надо посмотреть в хелпе, по-моему, internationalization или что-то в этом роде. Для D4 вообще все делается ОЧЕHЬ просто:

  1. берется проект, компилируется;
  2. тут-же, не закрывая проект, вызвается New|Resource DLL Wizard, в нем указывается, какие формы и модули должны подвергнуться переводу на другой язык;
  3. в результате работы Wizard появляется проект (sic!) с RC и DFM. Открываем формы, и переделываем все сообщения + размер (соотв. длине сообщений);
  4. Компилируем. В результате получается файл xxxxxxx.rus, где xxxxxxx - название исходного проекта;
  5. Запускаем xxxxxxx.exe. Видим некий не наш язык. Подкладываем в каталог с этим exe изготовленный файл xxxxxxx.rus, и запускаем exe повторно. Видим абсолютно ВЕЗДЕ переведенные сообщения.

p.s. файл RUS можно подставлять и убирать по вкусу.




Как заставить приложение запускаться в минимизированном состоянии

Объект Delphi Application создает скрытое "application window" (окно приложения), и именно ему, а не главному окну приложения посылается команда "показать минимизированным". Чтобы обойти эту проблему, поместите следующую строчку в обработчик события OnCreate вашей главной формы:


 ShowWindow(Handle, cmdShow);
 




Как заставить приложение запускаться в минимизированном состоянии 2

Объявление: Потомственный программист в седьмом байте избавит от System Polisy и Access Denied. Снимет пароль. Наворожит номера кредиток. Быстро, анонимно, с гарантией.


 // Проверьте глобальную переменную CmdShow для того чтобы определить, в каком
 // состоянии запускается приложение, и модифицируйте ее как вам необходимо:
 
      procedure TForm1.FormCreate(Sender: TObject);
      begin
        if CmdShow = SW_SHOWMINNOACTIVE then WindowState := wsMinimized;
      end;
 
 // Hапример, если необходимо запускать приложение либо минимизированным, либо
 // максимизированным, используйте следующий код:
 
      procedure TForm1.FormCreate(Sender: TObject);
      begin
        if CmdShow = SW_SHOWMINNOACTIVE then WindowState := wsMinimized
        else WindowState := wsMaximized;
      end;
 
 




<< ВЕРНУТЬСЯ В ОГЛАВЛЕНИЕ



Материалы находятся на сайте https://exelab.ru/pro/



Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS