Compatibility with FSX - Steam Edition
AutoLaunch feature
This commit is contained in:
parent
20350cfdd7
commit
76565a9c5d
BIN
G940LEDControl/Bin/FSX-SE-SimConnect.dll
Normal file
BIN
G940LEDControl/Bin/FSX-SE-SimConnect.dll
Normal file
Binary file not shown.
@ -379,7 +379,7 @@ object MainForm: TMainForm
|
||||
452)
|
||||
object lblProfileSwitching: TLabel
|
||||
Left = 11
|
||||
Top = 187
|
||||
Top = 239
|
||||
Width = 92
|
||||
Height = 13
|
||||
Caption = 'Profile switching'
|
||||
@ -392,7 +392,7 @@ object MainForm: TMainForm
|
||||
end
|
||||
object bvlProfileSwitching: TBevel
|
||||
Left = 124
|
||||
Top = 194
|
||||
Top = 246
|
||||
Width = 305
|
||||
Height = 13
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
@ -400,7 +400,7 @@ object MainForm: TMainForm
|
||||
end
|
||||
object lblLaunch: TLabel
|
||||
Left = 11
|
||||
Top = 122
|
||||
Top = 134
|
||||
Width = 40
|
||||
Height = 13
|
||||
Caption = 'Launch'
|
||||
@ -413,7 +413,7 @@ object MainForm: TMainForm
|
||||
end
|
||||
object bvlLaunch: TBevel
|
||||
Left = 80
|
||||
Top = 129
|
||||
Top = 141
|
||||
Width = 353
|
||||
Height = 13
|
||||
Anchors = [akLeft, akTop, akRight]
|
||||
@ -442,7 +442,7 @@ object MainForm: TMainForm
|
||||
end
|
||||
object cbProfileMenu: TCheckBox
|
||||
Left = 11
|
||||
Top = 212
|
||||
Top = 264
|
||||
Width = 409
|
||||
Height = 17
|
||||
Caption = ' Add profile selection to FSX/Prepar3D "Add-ons" menu'
|
||||
@ -453,7 +453,7 @@ object MainForm: TMainForm
|
||||
end
|
||||
object cbProfileMenuCascaded: TCheckBox
|
||||
Left = 31
|
||||
Top = 235
|
||||
Top = 287
|
||||
Width = 389
|
||||
Height = 17
|
||||
Caption = ' Cascaded menu (profiles in "G940 Profile" submenu)'
|
||||
@ -462,7 +462,7 @@ object MainForm: TMainForm
|
||||
end
|
||||
object cbFSXAutoLaunch: TCheckBox
|
||||
Left = 11
|
||||
Top = 147
|
||||
Top = 159
|
||||
Width = 409
|
||||
Height = 17
|
||||
Caption = ' Automatically start G940 LED Control when FSX launches'
|
||||
@ -511,6 +511,19 @@ object MainForm: TMainForm
|
||||
TabOrder = 6
|
||||
OnClick = btnLogClick
|
||||
end
|
||||
object cbFSXSEAutoLaunch: TCheckBox
|
||||
Left = 11
|
||||
Top = 182
|
||||
Width = 409
|
||||
Height = 17
|
||||
Caption =
|
||||
' Automatically start G940 LED Control when FSX- Steam Edition la' +
|
||||
'unches'
|
||||
Checked = True
|
||||
State = cbChecked
|
||||
TabOrder = 7
|
||||
OnClick = cbFSXSEAutoLaunchClick
|
||||
end
|
||||
end
|
||||
object tsAbout: TTabSheet
|
||||
Caption = 'About'
|
||||
|
@ -124,6 +124,7 @@ type
|
||||
btnLog: TButton;
|
||||
TrayIcon: TTrayIcon;
|
||||
ApplicationEvents: TApplicationEvents;
|
||||
cbFSXSEAutoLaunch: TCheckBox;
|
||||
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure lblLinkLinkClick(Sender: TObject; const Link: string; LinkType: TSysLinkType);
|
||||
@ -143,6 +144,7 @@ type
|
||||
procedure btnLogClick(Sender: TObject);
|
||||
procedure ApplicationEventsMinimize(Sender: TObject);
|
||||
procedure TrayIconClick(Sender: TObject);
|
||||
procedure cbFSXSEAutoLaunchClick(Sender: TObject);
|
||||
private
|
||||
FLog: IX2Log;
|
||||
FLEDControls: array[0..LED_COUNT - 1] of TLEDControls;
|
||||
@ -231,6 +233,7 @@ uses
|
||||
|
||||
ButtonFunctionFrm,
|
||||
ConfigConversion,
|
||||
FSXAutoLaunch,
|
||||
FSXLEDFunctionProviderIntf,
|
||||
FSXResources,
|
||||
FSXSimConnectStateMonitor,
|
||||
@ -345,6 +348,7 @@ begin
|
||||
UnregisterDeviceArrival;
|
||||
TProfileManager.Detach(Self);
|
||||
|
||||
TX2LogObserverMonitorForm.CloseInstance(TX2GlobalLog.Instance);
|
||||
TX2LogObserverMonitorForm.UnlockInstance(TX2GlobalLog.Instance);
|
||||
end;
|
||||
|
||||
@ -609,6 +613,8 @@ begin
|
||||
cbMinimizeToTray.Checked := Settings.MinimizeToTray;
|
||||
cbLaunchMinimized.Checked := Settings.LaunchMinimized;
|
||||
|
||||
cbFSXAutoLaunch.Checked := TFSXAutoLaunch.IsEnabled(fsxStandard);
|
||||
cbFSXSEAutoLaunch.Checked := TFSXAutoLaunch.IsEnabled(fsxSteamEdition);
|
||||
|
||||
cbProfileMenu.Checked := Settings.ProfileMenu;
|
||||
cbProfileMenuCascaded.Checked := Settings.ProfileMenuCascaded;
|
||||
@ -1104,7 +1110,29 @@ end;
|
||||
|
||||
procedure TMainForm.cbFSXAutoLaunchClick(Sender: TObject);
|
||||
begin
|
||||
//
|
||||
if FLoadingSettings then
|
||||
exit;
|
||||
|
||||
FLoadingSettings := True;
|
||||
try
|
||||
cbFSXAutoLaunch.Checked := TFSXAutoLaunch.SetEnabled(fsxStandard, cbFSXAutoLaunch.Checked);
|
||||
finally
|
||||
FLoadingSettings := False;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure TMainForm.cbFSXSEAutoLaunchClick(Sender: TObject);
|
||||
begin
|
||||
if FLoadingSettings then
|
||||
exit;
|
||||
|
||||
FLoadingSettings := True;
|
||||
try
|
||||
cbFSXSEAutoLaunch.Checked := TFSXAutoLaunch.SetEnabled(fsxSteamEdition, cbFSXSEAutoLaunch.Checked);
|
||||
finally
|
||||
FLoadingSettings := False;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
|
@ -3,6 +3,7 @@ program G940LEDControl;
|
||||
uses
|
||||
Forms,
|
||||
SysUtils,
|
||||
X2UtSingleInstance,
|
||||
MainFrm in 'Forms\MainFrm.pas' {MainForm},
|
||||
LogiJoystickDLL in '..\Shared\LogiJoystickDLL.pas',
|
||||
SimConnect in '..\Shared\SimConnect.pas',
|
||||
@ -34,7 +35,8 @@ uses
|
||||
FSXSimConnectStateMonitor in 'Units\FSXSimConnectStateMonitor.pas',
|
||||
ProfileManager in 'Units\ProfileManager.pas',
|
||||
FSXLEDFunctionProviderIntf in 'Units\FSXLEDFunctionProviderIntf.pas',
|
||||
SimBaseDocumentXMLBinding in 'Units\SimBaseDocumentXMLBinding.pas';
|
||||
SimBaseDocumentXMLBinding in 'Units\SimBaseDocumentXMLBinding.pas',
|
||||
FSXAutoLaunch in 'Units\FSXAutoLaunch.pas';
|
||||
|
||||
{$R *.res}
|
||||
|
||||
@ -43,6 +45,9 @@ var
|
||||
MainForm: TMainForm;
|
||||
|
||||
begin
|
||||
if not SingleInstance('{67D1802F-2AB8-40B9-ADD7-14C9D36903C8}', False, False) then
|
||||
exit;
|
||||
|
||||
Application.Initialize;
|
||||
Application.MainFormOnTaskbar := True;
|
||||
Application.Title := 'G940 LED Control';
|
||||
|
@ -8,7 +8,7 @@
|
||||
<FrameworkType>VCL</FrameworkType>
|
||||
<ProjectVersion>13.4</ProjectVersion>
|
||||
<Base>True</Base>
|
||||
<Config Condition="'$(Config)'==''">Debug</Config>
|
||||
<Config Condition="'$(Config)'==''">Release</Config>
|
||||
<Platform Condition="'$(Platform)'==''">Win32</Platform>
|
||||
<TargetedPlatforms>1</TargetedPlatforms>
|
||||
<AppType>Application</AppType>
|
||||
@ -49,7 +49,7 @@
|
||||
<Base>true</Base>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base)'!=''">
|
||||
<VerInfo_Release>8</VerInfo_Release>
|
||||
<VerInfo_MinorVer>1</VerInfo_MinorVer>
|
||||
<DCC_UsePackage>rtl;dbrtl;$(DCC_UsePackage)</DCC_UsePackage>
|
||||
<DCC_DcuOutput>Lib</DCC_DcuOutput>
|
||||
<DCC_ExeOutput>Bin</DCC_ExeOutput>
|
||||
@ -58,7 +58,7 @@
|
||||
<Manifest_File>None</Manifest_File>
|
||||
<Icon_MainIcon>G940LEDControl_Icon.ico</Icon_MainIcon>
|
||||
<DCC_Namespace>Vcl;Vcl.Imaging;Vcl.Touch;Vcl.Samples;Vcl.Shell;System;Xml;Data;Datasnap;Web;Soap;Winapi;System.Win;$(DCC_Namespace)</DCC_Namespace>
|
||||
<VerInfo_Keys>CompanyName=X²Software;FileDescription=G940 LED Control;FileVersion=1.0.8.0;InternalName=;LegalCopyright=© 2011 - 2015 X²Software;LegalTrademarks=;OriginalFilename=G940LEDControl.exe;ProductName=G940 LED Control;ProductVersion=1.0;Comments=</VerInfo_Keys>
|
||||
<VerInfo_Keys>CompanyName=X²Software;FileDescription=G940 LED Control;FileVersion=1.1.0.0;InternalName=;LegalCopyright=© 2011 - 2015 X²Software;LegalTrademarks=;OriginalFilename=G940LEDControl.exe;ProductName=G940 LED Control;ProductVersion=1.1;Comments=</VerInfo_Keys>
|
||||
<VerInfo_Locale>1033</VerInfo_Locale>
|
||||
</PropertyGroup>
|
||||
<PropertyGroup Condition="'$(Base_Win64)'!=''">
|
||||
@ -138,6 +138,7 @@
|
||||
<DCCReference Include="Units\ProfileManager.pas"/>
|
||||
<DCCReference Include="Units\FSXLEDFunctionProviderIntf.pas"/>
|
||||
<DCCReference Include="Units\SimBaseDocumentXMLBinding.pas"/>
|
||||
<DCCReference Include="Units\FSXAutoLaunch.pas"/>
|
||||
<BuildConfiguration Include="Debug">
|
||||
<Key>Cfg_2</Key>
|
||||
<CfgParent>Base</CfgParent>
|
||||
|
Binary file not shown.
129
G940LEDControl/Units/FSXAutoLaunch.pas
Normal file
129
G940LEDControl/Units/FSXAutoLaunch.pas
Normal file
@ -0,0 +1,129 @@
|
||||
unit FSXAutoLaunch;
|
||||
|
||||
interface
|
||||
type
|
||||
TFSXVersion = (fsxStandard, fsxSteamEdition);
|
||||
|
||||
TFSXAutoLaunch = class(TObject)
|
||||
protected
|
||||
class function GetLaunchFileName(AVersion: TFSXVersion): string;
|
||||
public
|
||||
class function IsEnabled(AVersion: TFSXVersion): Boolean;
|
||||
class function SetEnabled(AVersion: TFSXVersion; AValue: Boolean): Boolean;
|
||||
end;
|
||||
|
||||
|
||||
implementation
|
||||
uses
|
||||
System.SysUtils,
|
||||
Xml.XMLIntf,
|
||||
|
||||
X2UtApp,
|
||||
|
||||
SimBaseDocumentXMLBinding;
|
||||
|
||||
|
||||
const
|
||||
FSXEXELaunchFileName = 'exe.xml';
|
||||
AddonName = 'G940LEDControl';
|
||||
|
||||
|
||||
|
||||
{ TFSXAutoLaunch }
|
||||
class function TFSXAutoLaunch.GetLaunchFileName(AVersion: TFSXVersion): string;
|
||||
const
|
||||
VersionPath: array[TFSXVersion] of string = ('FSX', 'FSX-SE');
|
||||
|
||||
begin
|
||||
Result := App.UserPath + 'Microsoft\' + VersionPath[AVersion] + '\' + FSXEXELaunchFileName;
|
||||
end;
|
||||
|
||||
|
||||
class function TFSXAutoLaunch.IsEnabled(AVersion: TFSXVersion): Boolean;
|
||||
var
|
||||
launch: IXMLSimBaseDocument;
|
||||
addon: IXMLLaunchAddon;
|
||||
|
||||
begin
|
||||
Result := False;
|
||||
if not FileExists(GetLaunchFileName(AVersion)) then
|
||||
exit;
|
||||
|
||||
try
|
||||
launch := LoadSimBaseDocument(GetLaunchFileName(AVersion));
|
||||
|
||||
for addon in launch do
|
||||
begin
|
||||
if addon.Name = AddonName then
|
||||
begin
|
||||
Result := True;
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
except
|
||||
Result := False;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
class function TFSXAutoLaunch.SetEnabled(AVersion: TFSXVersion; AValue: Boolean): Boolean;
|
||||
var
|
||||
launch: IXMLSimBaseDocument;
|
||||
findAddon: IXMLLaunchAddon;
|
||||
addon: IXMLLaunchAddon;
|
||||
|
||||
begin
|
||||
if not FileExists(GetLaunchFileName(AVersion)) then
|
||||
begin
|
||||
launch := NewSimBaseDocument;
|
||||
launch.OwnerDocument.Encoding := 'Windows-1252';
|
||||
launch.OwnerDocument.Options := launch.OwnerDocument.Options + [doNodeAutoIndent];
|
||||
|
||||
launch._Type := 'Launch';
|
||||
launch.version := '1,0';
|
||||
|
||||
launch.Descr := 'Launch';
|
||||
launch.Filename := FSXEXELaunchFileName;
|
||||
launch.Disabled := SimBaseBoolean_False;
|
||||
launch.LaunchManualLoad := SimBaseBoolean_False;
|
||||
end else
|
||||
begin
|
||||
launch := LoadSimBaseDocument(GetLaunchFileName(AVersion));
|
||||
launch.OwnerDocument.Options := launch.OwnerDocument.Options + [doNodeAutoIndent];
|
||||
end;
|
||||
|
||||
addon := nil;
|
||||
for findAddon in launch do
|
||||
begin
|
||||
if findAddon.Name = AddonName then
|
||||
begin
|
||||
addon := findAddon;
|
||||
break;
|
||||
end;
|
||||
end;
|
||||
|
||||
if AValue then
|
||||
begin
|
||||
if not Assigned(addon) then
|
||||
begin
|
||||
addon := launch.Add;
|
||||
addon.Name := AddonName;
|
||||
end;
|
||||
|
||||
addon.Disabled := SimBaseBoolean_False;
|
||||
addon.ManualLoad := SimBaseBoolean_False;
|
||||
addon.Path := App.FileName;
|
||||
launch.OwnerDocument.SaveToFile(GetLaunchFileName(AVersion));
|
||||
end else
|
||||
begin
|
||||
if Assigned(addon) then
|
||||
begin
|
||||
launch.Remove(addon);
|
||||
launch.OwnerDocument.SaveToFile(GetLaunchFileName(AVersion));
|
||||
end;
|
||||
end;
|
||||
|
||||
Result := AValue;
|
||||
end;
|
||||
|
||||
end.
|
@ -59,6 +59,7 @@ uses
|
||||
OtlComm,
|
||||
OtlCommon,
|
||||
SimConnect,
|
||||
X2UtApp,
|
||||
|
||||
FSXResources,
|
||||
FSXSimConnectStateMonitor;
|
||||
@ -137,7 +138,8 @@ type
|
||||
function Initialize: Boolean; override;
|
||||
procedure Cleanup; override;
|
||||
|
||||
procedure TrySimConnect;
|
||||
procedure TrySimConnect; overload;
|
||||
procedure TrySimConnect(const ALibraryName: string); overload;
|
||||
|
||||
procedure RegisterDefinitions;
|
||||
procedure RegisterDefinition(ADefinitionID: Cardinal; ADefinition: IFSXSimConnectDefinitionAccess);
|
||||
@ -427,16 +429,35 @@ end;
|
||||
|
||||
|
||||
procedure TFSXSimConnectClient.TrySimConnect;
|
||||
var
|
||||
eventHandle: THandle;
|
||||
|
||||
begin
|
||||
if SimConnectHandle <> 0 then
|
||||
exit;
|
||||
|
||||
Log.Info('Attempting to connect to SimConnect');
|
||||
TrySimConnect('FSX-SimConnect.dll');
|
||||
if SimConnectHandle = 0 then
|
||||
TrySimConnect('FSX-SE-SimConnect.dll');
|
||||
|
||||
if InitSimConnect then
|
||||
if SimConnectHandle = 0 then
|
||||
begin
|
||||
Log.Info(Format('FSX SimConnect: Connection failed, trying again in %d seconds', [INTERVAL_TRYSIMCONNECT div 1000]));
|
||||
TFSXSimConnectStateMonitor.SetCurrentState(scsFailed);
|
||||
|
||||
Task.SetTimer(TIMER_TRYSIMCONNECT, INTERVAL_TRYSIMCONNECT, TM_TRYSIMCONNECT);
|
||||
{$IFNDEF SCUSEEVENT}
|
||||
Task.ClearTimer(TIMER_PROCESSMESSAGES);
|
||||
{$ENDIF}
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
procedure TFSXSimConnectClient.TrySimConnect(const ALibraryName: string);
|
||||
var
|
||||
eventHandle: THandle;
|
||||
|
||||
begin
|
||||
Log.Info('Attempting to connect to SimConnect using ' + ALibraryName);
|
||||
|
||||
if InitSimConnectFromLibrary(App.Path + ALibraryName) then
|
||||
begin
|
||||
{$IFDEF SCUSEEVENT}
|
||||
eventHandle := SimConnectDataEvent.Handle;
|
||||
@ -456,18 +477,8 @@ begin
|
||||
{$IFNDEF SCUSEEVENT}
|
||||
Task.SetTimer(TIMER_PROCESSMESSAGES, INTERVAL_PROCESSMESSAGES, TM_PROCESSMESSAGES);
|
||||
{$ENDIF}
|
||||
end;
|
||||
end;
|
||||
|
||||
if SimConnectHandle = 0 then
|
||||
begin
|
||||
Log.Info(Format('FSX SimConnect: Connection failed, trying again in %d seconds', [INTERVAL_TRYSIMCONNECT div 1000]));
|
||||
TFSXSimConnectStateMonitor.SetCurrentState(scsFailed);
|
||||
|
||||
Task.SetTimer(TIMER_TRYSIMCONNECT, INTERVAL_TRYSIMCONNECT, TM_TRYSIMCONNECT);
|
||||
{$IFNDEF SCUSEEVENT}
|
||||
Task.ClearTimer(TIMER_PROCESSMESSAGES);
|
||||
{$ENDIF}
|
||||
end else
|
||||
FSimConnectHandle := 0;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -30,7 +30,8 @@ Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{
|
||||
[Files]
|
||||
Source: "..\G940LEDControl\Bin\{#AppExeName}"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "..\G940LEDControl\Bin\LogiJoystickDLL.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "..\G940LEDControl\Bin\SimConnect.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "..\G940LEDControl\Bin\FSX-SimConnect.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
Source: "..\G940LEDControl\Bin\FSX-SE-SimConnect.dll"; DestDir: "{app}"; Flags: ignoreversion
|
||||
|
||||
[Icons]
|
||||
Name: "{group}\{#AppName}"; Filename: "{app}\{#AppExeName}"
|
||||
|
@ -662,6 +662,7 @@ type
|
||||
|
||||
// Additional procedures to support dynamic loading
|
||||
function InitSimConnect: boolean;
|
||||
function InitSimConnectFromLibrary(Name: string): boolean;
|
||||
procedure CloseSimConnect;
|
||||
function IsSimConnectInitialized: Boolean;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user