📄 directsetup.pas
字号:
{$EXTERNALSYM _DIRECTXREGISTERAPPA}
DIRECTXREGISTERAPPA = _DIRECTXREGISTERAPPA;
{$EXTERNALSYM DIRECTXREGISTERAPPA}
TDirectXRegisterAppA = _DIRECTXREGISTERAPPA;
PDirectXRegisterApp2A = ^TDirectXRegisterApp2A;
_DIRECTXREGISTERAPP2A = record
dwSize: DWORD;
dwFlags: DWORD;
lpszApplicationName: PAnsiChar;
lpGUID: PGUID;
lpszFilename: PAnsiChar;
lpszCommandLine: PAnsiChar;
lpszPath: PAnsiChar;
lpszCurrentDirectory: PAnsiChar;
lpszLauncherName: PAnsiChar;
end;
{$EXTERNALSYM _DIRECTXREGISTERAPP2A}
DIRECTXREGISTERAPP2A = _DIRECTXREGISTERAPP2A;
{$EXTERNALSYM DIRECTXREGISTERAPP2A}
TDirectXRegisterApp2A = _DIRECTXREGISTERAPP2A;
PDirectXRegisterAppW = ^TDirectXRegisterAppW;
_DIRECTXREGISTERAPPW = record
dwSize: DWORD;
dwFlags: DWORD;
lpszApplicationName: PWideChar;
lpGUID: PGUID;
lpszFilename: PWideChar;
lpszCommandLine: PWideChar;
lpszPath: PWideChar;
lpszCurrentDirectory: PWideChar;
end;
{$EXTERNALSYM _DIRECTXREGISTERAPPW}
DIRECTXREGISTERAPPW = _DIRECTXREGISTERAPPW;
{$EXTERNALSYM DIRECTXREGISTERAPPW}
TDirectXRegisterAppW = _DIRECTXREGISTERAPPW;
PDirectXRegisterApp2W = ^TDirectXRegisterApp2W;
_DIRECTXREGISTERAPP2W = record
dwSize: DWORD;
dwFlags: DWORD;
lpszApplicationName: PWideChar;
lpGUID: PGUID;
lpszFilename: PWideChar;
lpszCommandLine: PWideChar;
lpszPath: PWideChar;
lpszCurrentDirectory: PWideChar;
lpszLauncherName: PWideChar;
end;
{$EXTERNALSYM _DIRECTXREGISTERAPP2W}
DIRECTXREGISTERAPP2W = _DIRECTXREGISTERAPP2W;
{$EXTERNALSYM DIRECTXREGISTERAPP2W}
TDirectXRegisterApp2W = _DIRECTXREGISTERAPP2W;
PDirectXRegisterApp = ^TDirectXRegisterApp;
PDirectXRegisterApp2 = ^TDirectXRegisterApp2;
{$IFDEF UNICODE}
TDirectXRegisterApp = TDirectXRegisterAppW;
TDirectXRegisterApp2 = TDirectXRegisterAppW2;
{$ELSE}
TDirectXRegisterApp = TDirectXRegisterAppA;
TDirectXRegisterApp2 = TDirectXRegisterApp2A;
{$ENDIF}
//
// API
//
var
DirectXSetupW: function (hWnd: HWND; lpszRootPath: PWideChar; dwFlags: DWORD): Integer; stdcall;
{$EXTERNALSYM DirectXSetupW}
DirectXSetupA: function (hWnd: HWND; lpszRootPath: PAnsiChar; dwFlags: DWORD): Integer; stdcall;
{$EXTERNALSYM DirectXSetupA}
DirectXSetup: function (hWnd: HWND; lpszRootPath: PChar; dwFlags: DWORD): Integer; stdcall;
{$EXTERNALSYM DirectXSetup}
DirectXRegisterApplicationW: function (hWnd: HWND; const lpDXRegApp: TDirectXRegisterAppW): Integer; stdcall;
{$EXTERNALSYM DirectXRegisterApplicationW}
DirectXRegisterApplicationA: function (hWnd: HWND; const lpDXRegApp: TDirectXRegisterAppA): Integer; stdcall;
{$EXTERNALSYM DirectXRegisterApplicationA}
DirectXRegisterApplication: function (hWnd: HWND; const lpDXRegApp: TDirectXRegisterApp): Integer; stdcall;
{$EXTERNALSYM DirectXRegisterApplication}
DirectXUnRegisterApplication: function (hWnd: HWND; const lpGUID: TGUID): Integer; stdcall;
{$EXTERNALSYM DirectXUnRegisterApplication}
type
TDSetupCallback = function (Reason: DWORD; MsgType: DWORD; (* Same as flags to MessageBox *)
szMessage: PChar; szName: PChar; pInfo: Pointer): DWORD; stdcall;
{$EXTERNALSYM TDSetupCallback}
var
DirectXSetupSetCallback: function (Callback: TDSetupCallback): Integer; stdcall;
{$EXTERNALSYM DirectXSetupSetCallback}
DirectXSetupGetVersion: function (out lpdwVersion, lpdwMinorVersion: DWORD): Integer; stdcall;
{$EXTERNALSYM DirectXSetupGetVersion}
DirectXSetupShowEULA: function(hWndParent: HWND): Integer; stdcall;
{$EXTERNALSYM DirectXSetupShowEULA}
DirectXSetupGetEULAA: function(lpszEULA: PAnsiChar; cchEULA: LongWord; LangID: Word): LongWord; stdcall;
{$EXTERNALSYM DirectXSetupGetEULAA}
DirectXSetupGetEULAW: function(lpszEULA: PWideChar; cchEULA: LongWord; LangID: Word): LongWord; stdcall;
{$EXTERNALSYM DirectXSetupGetEULAW}
DirectXSetupGetEULA: function(lpszEULA: PChar; cchEULA: LongWord; LangID: Word): LongWord; stdcall;
{$EXTERNALSYM DirectXSetupGetEULA}
function DirectSetupLoaded: Boolean;
function UnLoadDirectSetup: Boolean;
function LoadDirectSetup: Boolean;
implementation
const
DirectSetupDll = 'dsetup.dll';
var
DirectSetupLib: THandle = 0;
function DirectSetupLoaded: Boolean;
begin
Result:= (DirectSetupLib <> 0);
end;
function UnLoadDirectSetup: Boolean;
begin
Result:= True;
if (DirectSetupLib <> 0) then
begin
Result:= Result and FreeLibrary(DirectSetupLib);
DirectXSetupA := nil;
DirectXSetupW := nil;
DirectXSetup := nil;
DirectXRegisterApplicationA := nil;
DirectXRegisterApplicationW := nil;
DirectXRegisterApplication := nil;
DirectXUnRegisterApplication := nil;
DirectXSetupSetCallback := nil;
DirectXSetupGetVersion := nil;
DirectXSetupShowEULA := nil;
DirectXSetupGetEULAA := nil;
DirectXSetupGetEULAW := nil;
DirectXSetupGetEULA := nil;
DirectSetupLib:= 0;
end;
end;
function LoadDirectSetup: Boolean;
begin
Result:= DirectSetupLoaded;
if (not Result) then
begin
DirectSetupLib:= LoadLibrary(DirectSetupDll);
if (DirectSetupLib <> 0) then
begin
DirectXSetupA := GetProcAddress(DirectSetupLib, 'DirectXSetupA');
DirectXSetupW := GetProcAddress(DirectSetupLib, 'DirectXSetupW');
{$IFDEF UNICODE}
DirectXSetup := DirectXSetupW;
{$ELSE}
DirectXSetup := DirectXSetupA;
{$ENDIF}
DirectXRegisterApplicationA := GetProcAddress(DirectSetupLib, 'DirectXRegisterApplicationA');
DirectXRegisterApplicationW := GetProcAddress(DirectSetupLib, 'DirectXRegisterApplicationW');
{$IFDEF UNICODE}
DirectXRegisterApplication := DirectXRegisterApplicationW;
{$ELSE}
DirectXRegisterApplication := DirectXRegisterApplicationA;
{$ENDIF}
DirectXUnRegisterApplication := GetProcAddress(DirectSetupLib, 'DirectXUnRegisterApplication');
DirectXSetupSetCallback := GetProcAddress(DirectSetupLib, 'DirectXSetupSetCallback');
DirectXSetupGetVersion := GetProcAddress(DirectSetupLib, 'DirectXSetupGetVersion');
DirectXSetupShowEULA := GetProcAddress(DirectSetupLib, 'DirectXSetupShowEULA');;
DirectXSetupGetEULAA := GetProcAddress(DirectSetupLib, 'DirectXSetupGetEULAA');;
DirectXSetupGetEULAW := GetProcAddress(DirectSetupLib, 'DirectXSetupGetEULAW');;
{$IFDEF UNICODE}
DirectXSetupGetEULA := DirectXSetupGetEULAW;
{$ELSE}
DirectXSetupGetEULA := DirectXSetupGetEULAA;
{$ENDIF}
end;
// At least basic procedure is found!
Result:= Assigned(DirectXSetup);
if not Result then UnLoadDirectSetup;
end;
end;
initialization
{$IFNDEF DIRECTSETUP_DYNAMIC_LINK_EXPLICIT}
LoadDirectSetup;
{$ENDIF}
finalization
UnLoadDirectSetup;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -