- Introduction
The Native HID library for Firemonkey is a library for communicating with Human Interface Devices. It uses Windows HID Api and supports both Windows 32 and Windows 64. A short video describes for to install the library in your Rad Studio.
2. Components in the Demo and what they do
The Demo contains only one Tbutton and TMemo component for the results in Text after onButton click execution. We first call the SetCursor procedure with chHourGlass type of Cursor. It is typically used to inform the user to wait until an application completes its current operation. Then using Enumerate all the device names are stored in a String Dynamic array. In the next short video you can see the Demo in action.
To show all the available devices a FOR cycle goes through the DeviceNames DynArray and adds the devices line by line. Depending on the Boolean properties different report is shown in the TMemo.
- FeatureReportSupported;
if FeatureReportSupported then
for J := 0 to 9 do
try
AddLine('Feature report ' + IntToStr(J) + ': ' + ByteArrayToString(GetFeatureReport(J)));
except
on E: Exception do
AddLine('Feature report ' + IntToStr(J) + ' exception: ' + E.Message);
end;
- InputReportSupported;
if InputReportSupported then
for J := 0 to 9 do
try
AddLine('Input report ' + IntToStr(J) + ': ' + ByteArrayToString(GetInputReport(J)));
except
on E: Exception do
AddLine('Input report ' + IntToStr(J) + ' exception: ' + E.Message);
end;
- ReadSupported
if ReadSupported then
begin
// reopen device with read access
Open(DeviceNames[I], True, False);
for J := 0 to 9 do
try
AddLine('Read: ' + ByteArrayToString(Read(300)));
except
on E: Exception do
AddLine('Read exception: ' + E.Message);
end;
end;
Every device in the Dynamic array is listed with Product Id, Vendor Id, version number, serial number, etc which is in other words the main info of the certain device. All this information is executed in the ShowDeviceInfo procedure.
with Device do
try
AddLine('Vendor ID: ' + IntToHex(VendorID, 4));
AddLine('Product ID: ' + IntToHex(ProductID, 4));
AddLine('Version number: ' + IntToHex(VersionNumber, 4));
AddLine('Serial number: ' + SerialNumber);
AddLine('Manufacturer: ' + Manufacturer);
AddLine('Product: ' + Product);
AddLine('Usage page: ' + IntToStr(UsagePage));
AddLine('Usage: ' + IntToStr(Usage));
AddLine('Input report length: ' + IntToStr(InputReportLength));
AddLine('Output report length: ' + IntToStr(OutputReportLength));
AddLine('Feature report length: ' + IntToStr(FeatureReportLength));
AddLine('Input buffer count: ' + IntToStr(InputBufferCount));
for I := 1 to 255 do
if HasString[I] then
AddLine('String ' + IntToStr(I) + ': ' + Strings[I])
else
Break;
except
on E: Exception do
AddLine('Exception: ' + E.Message);
end;
There is also some code, executed on the FormShow event of the form. When OnDeviceArrival event of the device is called, it executes the code bellow:
AddLine;
AddLine('Device arrival: ' + DeviceName);
try
Device.Open(DeviceName, False, False);
try
ShowDeviceInfo;
finally
Device.Close
end;
except
on E: Exception do
AddLine('Exception: ' + E.Message);
end;
When OnDeviceRemoved event of the device is called, it executes the code bellow:
AddLine;
AddLine('Device removed: ' + DeviceName);
The ‘AddLine’ procedure itself checks if there is no text and lines in the TMemo. If both are true, the first line is skipped.
if (Text = '') and (Memo.Lines.Count = 0) then
Exit; // skip first empty lines
Memo.Lines.Add(Text);
You can download the Demo from the link below:
https://winsoft.sk/fnathid.htm
Reduce development time and get to market faster with RAD Studio, Delphi, or C++Builder.
Design. Code. Compile. Deploy.
Free Delphi Community Edition Free C++Builder Community Edition







