Работа с железом
Code: |
function GetCaptionAtPoint(CrPos: TPoint): string; var textlength: Integer; Text: PChar; Handle: HWND; begin Result := 'Empty'; Handle := WindowFromPoint(CrPos); if Handle = 0 then Exit; textlength := SendMessage(Handle, WM_GETTEXTLENGTH, 0, 0); if textlength <> 0 then begin getmem(Text, textlength + 1); SendMessage(Handle, WM_GETTEXT, textlength + 1, Integer(Text)); Result := Text; freemem(Text); end; end; |
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Мышка
Code: |
{ Check if a Point(X,Y) (e.g a Cursor) is on a Linie (x1,y1) ; (x2,y2) d = line width (min. 1)
}
function CursorOnLinie(X, Y, x1, y1, x2, y2, d: Integer): Boolean; var sine, cosinus: Double; dx, dy, len: Integer; begin if d = 0 then d := 1; asm fild(y2) fisub(y1) // Y-Difference fild(x2) fisub(x1) // X-Difference fpatan // Angle of the line in st(0) fsincos // Cosinus in st(0), Sinus in st(1) fstp cosinus fstp sine end; dx := Round(cosinus * (x - x1) + sine * (y - y1)); dy := Round(cosinus * (y - y1) - sine * (x - x1)); len := Round(cosinus * (x2 - x1) + sine * (y2 - y1)); // length of line if (dy > -d) and (dy < d) and (dx > -d) and (dx < len + d) then Result := True else Result := False; end;
procedure TForm1.FormPaint(Sender: TObject); begin Canvas.Pen.Width := 1; Canvas.MoveTo(0, 0); Canvas.LineTo(Width, Weight); end;
procedure TForm1.FormMouseMove(Sender: TObject; Shift: TShiftState; X, Y: Integer); var p: TPoint; begin GetCursorPos(p); p := ScreenToClient(p); if CursorOnLinie(p.x, p.y, 0, 0, Width, Height, 1) then Caption := 'Mouse on line.' else Caption := 'Mouse not on line.' end; |
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Мышка
Code: |
function PortExists(const PortName: string): Boolean; var hPort: HWND; begin Result := False; hPort := CreateFile(PChar(PortName), {name} GENERIC_READ or GENERIC_WRITE, {access attributes} 0, {no sharing} nil, {no security} OPEN_EXISTING, {creation action} FILE_ATTRIBUTE_NORMAL or FILE_FLAG_OVERLAPPED, {attributes} 0); {no template} if hPort <> INVALID_HANDLE_VALUE then begin CloseHandle(hPort); Result := True; end; end;
{Parallel Ports} for i := 1 to 9 do begin if PortExists('LPT' + IntToStr(i)) then List.Append('Ports: Printer Port (LPT' + IntTostr(i) + ')'); end; |
- Подробности
- Родительская категория: Работа с железом
- Категория: Порты
Code: |
library Hookdemo; uses Beeper in '\DELDEMOS\HOOKDEMO\BEEPER.PAS'; exports SetHook index 1, UnHookHook index 2, HookProc index 3; begin HookedAlready:=False; end. |
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Мышка
Code: |
procedure TForm1.Button1Click(Sender: TObject); var CommPort : string; hCommFile : THandle; Buffer : PCommConfig; size : DWORD; begin CommPort := 'COM1'; {Открываем Com-порт} hCommFile := CreateFile(PChar(CommPort), GENERIC_WRITE, 0, nil, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0); if hCommFile=INVALID_HANDLE_VALUE then begin ShowMessage('Unable to open '+ CommPort); exit; end; {Выделяем временный буфер} GetMem(Buffer, sizeof(TCommConfig));
{Получаем размер структуры CommConfig} size := 0; GetCommConfig(hCommFile, Buffer^, size);
{Освобождаем временный буфер} FreeMem(Buffer, sizeof(TCommConfig));
{Выделяем память для структуры CommConfig} GetMem(Buffer, size); GetCommConfig(hCommFile, Buffer^, size);
{Изменяем скорость передачи} Buffer^.dcb.BaudRate := 1200;
{Устанавливаем новую конфигурацию для COM-порта} SetCommConfig(hCommFile, Buffer^, size);
{Освобождаем буфер} FreeMem(Buffer, size);
{Закрываем COM-порт} CloseHandle(hCommFile); end; |
- Подробности
- Родительская категория: Работа с железом
- Категория: Порты
Code: |
Function SetMouseSpeed ( NewSpeed : Integer ) : Boolean; {©Drkb v.3}
begin Result := SystemParametersInfo(SPI_SETMOUSESPEED, 1, Pointer(NewSpeed), SPIF_SENDCHANGE ); End;
Function GetMouseSpeed : Integer; Var Int : Integer; begin SystemParametersInfo(SPI_GETMOUSESPEED, 0, @Int, SPIF_SENDCHANGE ); Result := Int; End; |
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Мышка
Первый способ :
Используем команды Turbo Pascal ...
Code: |
value:=port[$379]; \{ Прочитать из порта \} port[$379]:=value; \{ Записать в порт \} |
- Подробности
- Родительская категория: Работа с железом
- Категория: Порты
Функция FindVCLWindow( const Pos: TPoint ): TWinControl;
Функция возвращает оконное средство управления для местоположения, определенного параметром Pos. Если для данного местоположения нет оконных средств управления, то функция возвращает nil.
- Подробности
- Родительская категория: Мышка/клавиатура
- Категория: Мышка
Code: |
function GetPortAddress(PortNo: integer): word; assembler; stdcall; asm push es push ebx mov ebx, PortNo shl ebx,1 mov ax,40h // Dos segment adress mov es,ax mov ax,ES:[ebx+6] // get port adress in 16Bit way :) pop ebx pop es end; |
- Подробности
- Родительская категория: Работа с железом
- Категория: Порты
Первый шаг-открыть коммуникационное устройство для чтения и записи.
Это достигается с помощью функции Win32 'CreateFile'.
В случае сбоя функция возвращает значение false
- Подробности
- Родительская категория: Работа с железом
- Категория: Порты
Code: |
uses Registry;
procedure TForm1.Button1Click(Sender: TObject); var reg : TRegistry; ts : TStrings; i : integer; begin reg := TRegistry.Create; reg.RootKey := HKEY_LOCAL_MACHINE; reg.OpenKey('hardware\devicemap\serialcomm', false); ts := TStringList.Create; reg.GetValueNames(ts); for i := 0 to ts.Count -1 do begin Memo1.Lines.Add(reg.ReadString(ts.Strings[i])); end; ts.Free; reg.CloseKey; reg.free; end; |
- Подробности
- Родительская категория: Работа с железом
- Категория: Порты
Страница 13 из 17