⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 directsetup.pas

📁 3D GameStudio 的Delphi开发包
💻 PAS
📖 第 1 页 / 共 2 页
字号:
  {$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 + -