unit wpsapi;
interface
uses
Windows;
type
PWPSReturnCode = ^TWPSReturnCode;
WPS_ReturnCode = (
WPS_OK = 0,
WPS_ERROR_SCANNER_NOT_FOUND = 1,
WPS_ERROR_WIFI_NOT_AVAILABLE = 2,
WPS_ERROR_NO_WIFI_IN_RANGE = 3,
WPS_ERROR_UNAUTHORIZED = 4,
WPS_ERROR_SERVER_UNAVAILABLE = 5,
WPS_ERROR_LOCATION_CANNOT_BE_DETERMINED = 6,
WPS_ERROR_PROXY_UNAUTHORIZED = 7,
WPS_ERROR_FILE_IO = 8,
WPS_ERROR_INVALID_FILE_FORMAT = 9,
WPS_NOMEM = 98,
WPS_ERROR = 99
);
TWPSReturnCode = WPS_ReturnCode;
PWPSContinuation = ^TWPSContinuation;
WPS_Continuation = (
WPS_STOP = 0,
WPS_CONTINUE = 1
);
TWPSContinuation = WPS_Continuation;
PWPSSimpleAuthentication = ^TWPSSimpleAuthentication;
WPS_SimpleAuthentication =
record
username: PChar;
realm: PChar;
end;
TWPSSimpleAuthentication = WPS_SimpleAuthentication;
PWPSStreetAddressLookup = ^TWPSStreetAddressLookup;
WPS_StreetAddressLookup = (
WPS_NO_STREET_ADDRESS_LOOKUP,
WPS_LIMITED_STREET_ADDRESS_LOOKUP,
WPS_FULL_STREET_ADDRESS_LOOKUP
);
TWPSStreetAddressLookup = WPS_StreetAddressLookup;
PWPSNameCode = ^TWPSNameCode;
WPS_NameCode =
record
name: PChar;
code:
array[0..2]
of Char;
end;
TWPSNameCode = WPS_NameCode;
PWPSStreetAddress = ^TWPSStreetAddress;
WPS_StreetAddress =
record
street_number: PChar;
address_line: PPChar;
city: PChar;
postal_code: PChar;
county: PChar;
province: PChar;
state: WPS_NameCode;
region: PChar;
country: WPS_NameCode;
end;
TWPSStreetAddress = WPS_StreetAddress;
PWPSLocation = ^TWPSLocation;
WPS_Location =
record
latitude: Double;
longitude: Double;
hpe: Double;
nap: Word;
speed: Double;
bearing: Double;
street_address: WPS_StreetAddress;
end;
TWPSLocation = WPS_Location;
PWPSIPLocation = ^TWPSIPLocation;
WPS_IPLocation =
record
ip: PChar;
latitude: Double;
longitude: Double;
street_address: WPS_StreetAddress;
end;
TWPSIPLocation = WPS_IPLocation;
type
WPS_LocationCallback =
function (arg:pointer; code:WPS_ReturnCode; location: WPS_Location):WPS_Continuation;
cdecl;
WPS_TilingCallback =
function(arg:pointer; tileNumber:dword; tileTotal:dword): WPS_Continuation;
cdecl;
//*************************************************************************************************************
var
XWPS_location :
function(
var authentication: WPS_SimpleAuthentication; street_address_lookup: WPS_StreetAddressLookup;
var location: WPS_Location): WPS_ReturnCode;
cdecl;
WPS_periodic_location :
function(
var authentication: WPS_SimpleAuthentication;street_address_lookup: WPS_StreetAddressLookup;period: Longword;iterations: Cardinal;callback:
WPS_LocationCallback; arg: Pointer): WPS_ReturnCode;
cdecl;
WPS_ip_location :
function(
var authentication: WPS_SimpleAuthentication;street_address_lookup: WPS_StreetAddressLookup;
var location: WPS_IPLocation): WPS_ReturnCode;
cdecl; WPS_free_location :
procedure(_para1:WPS_Location);
cdecl;
WPS_free_ip_location :
procedure(_para1:WPS_IPLocation);
cdecl;
WPS_set_proxy :
procedure(address: PChar;port: Integer;user: PChar; password: PChar);
cdecl;
WPS_set_server_url :
procedure(
url: PChar);
cdecl;
WPS_set_user_agent :
procedure(ua: PChar);
cdecl;
WPS_set_local_files_path :
function(
var paths: PChar): WPS_ReturnCode;
cdecl;
WPS_set_tier2_area :
function(dirpath: PChar; size: Cardinal): WPS_ReturnCode;
cdecl;
WPS_tiling :
function(dirpath: PChar;maxDataSizePerSession: Cardinal;maxDataSizeTotal: Cardinal;callback: WPS_TilingCallback;param: Pointer): WPS_ReturnCode;
cdecl;
WPS_register_user :
function(
var authentication: WPS_SimpleAuthentication;
var new_authentication: WPS_SimpleAuthentication): WPS_ReturnCode;
cdecl;
SkyHook_Handle : Thandle = 0;
function Load_SkyHook(
const dllfilename :
string) : boolean;
procedure Unload_SkyHook;
implementation
function Load_SkyHook(
const dllfilename :
string) : boolean;
var
oldmode : integer;
begin
if SkyHook_Handle <> 0
then
result := true
else begin
oldmode := SetErrorMode($8001);
SkyHook_Handle := LoadLibrary(pchar(dllfilename));
SetErrorMode(oldmode);
if SkyHook_Handle <> 0
then
begin
@XWPS_location := GetProcAddress(SkyHook_Handle,'
WPS_location');
@WPS_periodic_location := GetProcAddress(SkyHook_Handle,'
WPS_periodic_location');
@WPS_ip_location := GetProcAddress(SkyHook_Handle,'
WPS_ip_location');
@WPS_free_location := GetProcAddress(SkyHook_Handle,'
WPS_free_location');
@WPS_free_ip_location := GetProcAddress(SkyHook_Handle,'
WPS_free_ip_location');
@WPS_set_proxy := GetProcAddress(SkyHook_Handle,'
WPS_set_proxy');
@WPS_set_server_url := GetProcAddress(SkyHook_Handle,'
WPS_set_server_url');
@WPS_set_user_agent := GetProcAddress(SkyHook_Handle,'
WPS_set_user_agent');
@WPS_set_local_files_path := GetProcAddress(SkyHook_Handle,'
WPS_set_local_files_path');
@WPS_set_tier2_area := GetProcAddress(SkyHook_Handle,'
WPS_set_tier2_area');
@WPS_tiling := GetProcAddress(SkyHook_Handle,'
WPS_tiling');
@WPS_register_user := GetProcAddress(SkyHook_Handle,'
WPS_register_user');
if (@XWPS_location =
nil)
or
(@WPS_periodic_location =
nil)
or
(@WPS_ip_location =
nil)
or
(@WPS_free_location =
nil)
or
(@WPS_free_ip_location =
nil)
or
(@WPS_set_proxy =
nil)
or
(@WPS_set_server_url =
nil)
or
(@WPS_set_user_agent =
nil)
or
(@WPS_set_local_files_path =
nil)
or
(@WPS_set_tier2_area =
nil)
or
(@WPS_tiling =
nil)
or
(@WPS_register_user =
nil)
then
begin
FreeLibrary(SkyHook_Handle);
SkyHook_Handle := 0;
end;
end;
result := (SkyHook_Handle <> 0);
end;
end;
procedure Unload_SkyHook;
begin
if SkyHook_Handle <> 0
then
FreeLibrary(SkyHook_Handle);
SkyHook_Handle := 0;
end;
end.