我想知道是否可以使用the service of geolocation present on Windows 10(通过应用程序)而无需安装外部驱动程序(在Windows 7上似乎是强制安装,基于 @RRUZ 的文章如果此服务可以检索电脑的确切位置(如任何智能手机中存在的GPS精度)。
如果是,我如何使用Delphi代码以编程方式捕获由位置服务检索的信息?
我在几个网站上看到了如何使用Delphi代码发现这个确切位置(但我不知道这是否是在Win 7~Win 10中以编程方式检索此信息的正确方法)并且我找到了{ @RRUZ 的{3}}。所以相对于这段代码,我在Windows 7 x64中使用名为code的外部驱动程序进行了测试,我也GPSDirect但是当执行控制台应用程序时缺少一些信息:
enabled this driver via Control Panel
代码:
program geo;
{$APPTYPE CONSOLE}
{$R *.res}
uses
System.TypInfo,
System.Sensors,
System.SysUtils;
procedure EnumerateSensors;
var
LManager : TSensorManager;
LCustomLocationSensor : TCustomLocationSensor;
LCustomLightSensor : TCustomLightSensor;
LCustomEnvironmentalSensor : TCustomEnvironmentalSensor;
LCustomMotionSensor : TCustomMotionSensor;
LCustomOrientationSensor : TCustomOrientationSensor;
LCustomMechanicalSensor : TCustomMechanicalSensor;
LCustomElectricalSensor : TCustomElectricalSensor;
LCustomBiometricSensor : TCustomBiometricSensor;
LCustomScannerSensor : TCustomScannerSensor;
LSensor : TCustomSensor;
i : Integer;
begin
LManager := TSensorManager.Current;
LManager.Activate;
//LSensors := LManager.GetSensorsByCategory(TSensorCategory.Location);
if LManager.Count > 0 then
for i := 0 to LManager.Count-1 do
begin
Writeln(Format('Sensor %d',[i+1]));
Writeln('--------');
LSensor:= LManager.Sensors[i];
Writeln(Format('Category : %s', [GetEnumName(TypeInfo(TSensorCategory),integer(LSensor.Category))]));
Writeln(Format('Description : %s', [LSensor.Description]));
Writeln(Format('Manufacturer : %s', [LSensor.Manufacturer]));
Writeln(Format('Model : %s', [LSensor.Model]));
Writeln(Format('Serial No : %s', [LSensor.SerialNo]));
Writeln(Format('State : %s', [GetEnumName(TypeInfo(TSensorState),integer(LSensor.State))]));
Writeln(Format('TimeStamp : %s', [DatetoStr(LSensor.TimeStamp)]));
Writeln(Format('Unique ID : %s', [LSensor.UniqueID]));
case LSensor.Category of
TSensorCategory.Location :
begin
LCustomLocationSensor:=LSensor as TCustomLocationSensor;
LCustomLocationSensor.Start;
Writeln(Format('Sensor Type : %s', [GetEnumName(TypeInfo(TLocationSensorType),integer(LCustomLocationSensor.SensorType))]));
Writeln(Format('Authorized : %s', [GetEnumName(TypeInfo(TAuthorizationType),integer(LCustomLocationSensor.Authorized))]));
Writeln(Format('Accuracy : %n', [LCustomLocationSensor.Accuracy]));
Writeln(Format('Distance : %n', [LCustomLocationSensor.Distance]));
Writeln(Format('Power Consumption : %s', [GetEnumName(TypeInfo(TPowerConsumption),integer(LCustomLocationSensor.PowerConsumption))]));
Writeln(Format('Location Change : %s', [GetEnumName(TypeInfo(TLocationChangeType),integer(LCustomLocationSensor.LocationChange))]));
Writeln(Format('Latitude : %n', [LCustomLocationSensor.Latitude]));
Writeln(Format('Longitude : %n', [LCustomLocationSensor.Longitude]));
Writeln(Format('Longitude : %n', [LCustomLocationSensor.Longitude]));
Writeln(Format('Error Radius : %n', [LCustomLocationSensor.ErrorRadius]));
Writeln(Format('Altitude : %n', [LCustomLocationSensor.Altitude]));
Writeln(Format('Speed : %n', [LCustomLocationSensor.Speed]));
Writeln(Format('True Heading : %n', [LCustomLocationSensor.TrueHeading]));
Writeln(Format('Magnetic Heading : %n', [LCustomLocationSensor.MagneticHeading]));
Writeln(Format('Address1 : %s', [LCustomLocationSensor.Address1]));
Writeln(Format('Address2 : %s', [LCustomLocationSensor.Address2]));
Writeln(Format('City : %s', [LCustomLocationSensor.City]));
Writeln(Format('State/Province : %s', [LCustomLocationSensor.StateProvince]));
Writeln(Format('Postal Code : %s', [LCustomLocationSensor.PostalCode]));
Writeln(Format('Country Region : %s', [LCustomLocationSensor.CountryRegion]));
LCustomLocationSensor.Stop;
end;
TSensorCategory.Light :
begin
LCustomLightSensor:=LSensor as TCustomLightSensor;
Writeln(Format('Lux : %n', [LCustomLightSensor.Lux]));
Writeln(Format('Temperature : %n', [LCustomLightSensor.Temperature]));
Writeln(Format('Chromacity : %n', [LCustomLightSensor.Chromacity]));
Writeln(Format('Sensor Type : %s', [GetEnumName(TypeInfo(TLightSensorType),integer(LCustomLightSensor.SensorType))]));
end;
TSensorCategory.Environmental :
begin
LCustomEnvironmentalSensor:= LSensor as TCustomEnvironmentalSensor;
Writeln(Format('Sensor Type : %s', [GetEnumName(TypeInfo(TEnvironmentalSensorType),integer(LCustomEnvironmentalSensor.SensorType))]));
Writeln(Format('Temperature : %n', [LCustomEnvironmentalSensor.Temperature]));
Writeln(Format('Pressure : %n', [LCustomEnvironmentalSensor.Pressure]));
Writeln(Format('Humidity : %n', [LCustomEnvironmentalSensor.Humidity]));
Writeln(Format('Wind Direction : %n', [LCustomEnvironmentalSensor.WindDirection]));
Writeln(Format('Wind Speed : %n', [LCustomEnvironmentalSensor.WindSpeed]));
end;
TSensorCategory.Motion :
begin
LCustomMotionSensor:= LSensor as TCustomMotionSensor;
Writeln(Format('Sensor Type : %s', [GetEnumName(TypeInfo(TMotionSensorType),integer(LCustomMotionSensor.SensorType))]));
Writeln(Format('Acceleration X : %n', [LCustomMotionSensor.AccelerationX]));
Writeln(Format('Acceleration Y : %n', [LCustomMotionSensor.AccelerationY]));
Writeln(Format('Acceleration Z : %n', [LCustomMotionSensor.AccelerationZ]));
Writeln(Format('Angle Accel. X : %n', [LCustomMotionSensor.AngleAccelX]));
Writeln(Format('Angle Accel. Y : %n', [LCustomMotionSensor.AngleAccelY]));
Writeln(Format('Angle Accel. Z : %n', [LCustomMotionSensor.AngleAccelZ]));
Writeln(Format('Motion : %n', [LCustomMotionSensor.Motion]));
Writeln(Format('Speed : %n', [LCustomMotionSensor.Speed]));
Writeln(Format('Update Interval: %n', [LCustomMotionSensor.UpdateInterval]));
end;
TSensorCategory.Orientation :
begin
LCustomOrientationSensor:= LSensor as TCustomOrientationSensor;
Writeln(Format('Sensor Type : %s', [GetEnumName(TypeInfo(TOrientationSensorType),integer(LCustomOrientationSensor.SensorType))]));
Writeln(Format('Tilt X : %n', [LCustomOrientationSensor.TiltX]));
Writeln(Format('Tilt Y : %n', [LCustomOrientationSensor.TiltY]));
Writeln(Format('Tilt Z : %n', [LCustomOrientationSensor.TiltZ]));
Writeln(Format('Distance X : %n', [LCustomOrientationSensor.DistanceX]));
Writeln(Format('Distance Y : %n', [LCustomOrientationSensor.DistanceY]));
Writeln(Format('Distance Z : %n', [LCustomOrientationSensor.DistanceZ]));
Writeln(Format('Heading X : %n', [LCustomOrientationSensor.HeadingX]));
Writeln(Format('Heading Y : %n', [LCustomOrientationSensor.HeadingY]));
Writeln(Format('Heading Z : %n', [LCustomOrientationSensor.HeadingZ]));
Writeln(Format('Mag. Heading : %n', [LCustomOrientationSensor.MagHeading]));
Writeln(Format('True Heading : %n', [LCustomOrientationSensor.TrueHeading]));
Writeln(Format('Comp.Heading : %n', [LCustomOrientationSensor.CompMagHeading]));
Writeln(Format('Comp True Head : %n', [LCustomOrientationSensor.CompTrueHeading]));
end;
TSensorCategory.Mechanical :
begin
LCustomMechanicalSensor:= LSensor as TCustomMechanicalSensor;
Writeln(Format('Sensor Type : %s', [GetEnumName(TypeInfo(TMechanicalSensorType),integer(LCustomMechanicalSensor.SensorType))]));
Writeln(Format('Switch State : %s', [BoolToStr(LCustomMechanicalSensor.SwitchState, True)]));
Writeln(Format('Switch Array State : %d', [LCustomMechanicalSensor.SwitchArrayState]));
Writeln(Format('Multi Value State : %n', [LCustomMechanicalSensor.MultiValueState]));
Writeln(Format('Force : %n', [LCustomMechanicalSensor.Force]));
Writeln(Format('Abs. Pressure : %n', [LCustomMechanicalSensor.AbsPressure]));
Writeln(Format('Gauge Pressure : %n', [LCustomMechanicalSensor.GaugePressure]));
Writeln(Format('Strain : %n', [LCustomMechanicalSensor.Strain]));
Writeln(Format('Weight : %n', [LCustomMechanicalSensor.Weight]));
end;
TSensorCategory.Electrical :
begin
LCustomElectricalSensor:= LSensor as TCustomElectricalSensor;
Writeln(Format('Sensor Type : %s', [GetEnumName(TypeInfo(TElectricalSensorType),integer(LCustomElectricalSensor.SensorType))]));
Writeln(Format('Capacitance : %n', [LCustomElectricalSensor.Capacitance]));
Writeln(Format('Resistance : %n', [LCustomElectricalSensor.Resistance]));
Writeln(Format('Inductance : %n', [LCustomElectricalSensor.Inductance]));
Writeln(Format('Current : %n', [LCustomElectricalSensor.Current]));
Writeln(Format('Voltage : %n', [LCustomElectricalSensor.Voltage]));
Writeln(Format('Power : %n', [LCustomElectricalSensor.Power]));
end;
TSensorCategory.Biometric :
begin
LCustomBiometricSensor:= LSensor as TCustomBiometricSensor;
Writeln(Format('Sensor Type : %s', [GetEnumName(TypeInfo(TBiometricSensorType),integer(LCustomBiometricSensor.SensorType))]));
Writeln(Format('Human Proximity: %n', [LCustomBiometricSensor.HumanProximity]));
Writeln(Format('Human Presense : %s', [BoolToStr(LCustomBiometricSensor.HumanPresense, True)]));
Writeln(Format('Touch : %s', [BoolToStr(LCustomBiometricSensor.Touch, True)]));
end;
TSensorCategory.Scanner :
begin
LCustomScannerSensor:= LSensor as TCustomScannerSensor;
Writeln(Format('Sensor Type : %s', [GetEnumName(TypeInfo(TScannerSensorType),integer(LCustomScannerSensor.SensorType))]));
Writeln(Format('Human Proximity: %d', [LCustomScannerSensor.RFIDTag]));
Writeln(Format('Barcode Data : %s', [LCustomScannerSensor.BarcodeData]));
end;
end;
Writeln;
end
else
Writeln('Not sensors was found');
LManager.Deactivate;
end;
begin
try
EnumerateSensors;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
Readln;
end.