1
0
mirror of synced 2024-11-05 02:59:16 +00:00

Merge branch 'develop'

This commit is contained in:
Mark van Renswoude 2020-10-19 18:33:23 +02:00
commit 5c459b3ff1
13 changed files with 453 additions and 133 deletions

View File

@ -1,7 +1,7 @@
object MainForm: TMainForm
Left = 0
Top = 0
ActiveControl = cbCheckUpdates
ActiveControl = cmbProfiles
BorderIcons = [biSystemMenu, biMinimize]
BorderStyle = bsSingle
Caption = 'G940 LED Control'
@ -30,7 +30,7 @@ object MainForm: TMainForm
Margins.Top = 8
Margins.Right = 8
Margins.Bottom = 8
ActivePage = tsAbout
ActivePage = tsButtons
Align = alClient
TabOrder = 0
object tsButtons: TTabSheet
@ -276,6 +276,278 @@ object MainForm: TMainForm
Height = 13
Shape = bsTopLine
end
object imgFSXStateDisconnected: TImage
Left = 397
Top = 67
Width = 32
Height = 32
AutoSize = True
Picture.Data = {
0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000
00200806000000737A7AF40000001974455874536F6674776172650041646F62
6520496D616765526561647971C9653C000005774944415478DAC597C74B6C59
10C64F9B737A9815DA8839A388115C28032266915988CE6660FE9199EDB8706F
C4D1850CA2A8288A2898338AA298033EF3336B4F7DA5E77A5B6DB5DF660E1CEE
EDDBB74FFD4ED55755A7353A9D4EFC9F4303008D46A33C282E2E76373535B536
333313262626FC9DFC5EFDDE47436E0A57CCC7C747F1F0F08079DEDCDCFC5DFD
9E02505A5AEA78727252ECECECEC636969C9CF2480BC1A33A461F5F5EAEA4A77
7676B6E2E2E2D2DAD0D070AD07909D9DFD5B4040808F56AB153E3E3EC2C2C242
D9BDDA0B3FE301CCDBDB5BB1B5B525565757C5FAFAFA7C4747C73F0A40414181
3BEDFAF798981891989868D0A8B121C0FBD8C8DDDD9DB8BFBFE7E7232323988F
E6E6E67F3535355D33406161A1D6DEDEBE22232343F8FAFAEAC55E6DD41800D2
91080B0B131452717979294647471962737353747777E39DEAC6C6C6430620E1
31406666A6F0F0F07803606C0820E0F0F070E1E4E4A400F5F7F7731876777745
5757171E57D7D7D73F0194949430404A4A8AF0F2F262B7595959899B9B1B1690
3100F86D545494A0F594671473B1B4B4C46B6D6F6F8BDEDE5EAC575D5757F704
4019C000494949C2DFDF5F242424080707074E9DF3F37341CAE5EBE9E929EFC2
50ED00747474B4B0B5B5559EEDEDED89E9E969FE0DD6DBD9D9110303031C0205
A0ACAC4C4B062BE2E3E35984212121BCD8EB5D630710D4F1F131C715D78B8B0B
7E6663632362636385B5B5B5F23EA5B5127B590B00303C3C8CCFD5B5B5B52F00
8E8E8E15701D42400A156E6E6E9C8E521386C4F69CDF1C77D40F39E0B5B1B131
0E230C030020D000A0E8D95B808888083688C5A062188627BCBDBD393BE0DAAF
68E1F0F0504C4D4D291A820D18070800262626DE07080D0D6500189710EA4A48
158C61E0194320070707627C7C9C8DBD2AC30C2135F1068052A622282848B8BB
BB2BC6E57C5D8AE10D84EB3D0800A0D8C0B09CD238E6FEFEBE989B9BC3BDBE08
01E0E7E7A700A821A406A4417C4E4F4F17E4B53700D003F25C6D5CC61F6205C0
E2E2E2FB00308E459182883DC408636A0FE01E9902B11A126667672767897AF7
00432A2373500DDF0580F26118C5048AC60484DA1B308E8605202CBEBCBC2C82
8383F53265707050ACADADB161D40D881113F7D7D7D75F07901E9061409141AE
C338DC89F28A0E87D0A5A5A529109393932C44E901BCFB2900B2002130040081
C2088C63319453C4530E9471BC8381546B6F6FFF10809EBDF482CF0002030305
1A15EE115B7433C4523D90BE3939397C0F4394624AFABD06D8D8D8600FE801A0
1463113A98700B45DC2500F21E5E4075EBE9E9E1EB7B83CE152C60ACD9DADA2A
8E8E8EBE0680662401D090D013E00DB5B0D088A4BA0D0DFC0EF501030DE739DD
18408A510D40C7B297760C0018453341083C3D3D051DD178413B3B3B313F3FCF
4DE4A381142E2A2A629D2C2C2C30C47B1E407B46257C73208107A406301182E4
E4646ECFB3B3B39F0260E4E5E5B1F720508441ED017508004047B243BD23995A
84302EBB627979B9989999114343439F024446468AD4D454365C5353C3460120
21641600808EE84F00F9F9F90CE0EAEAAAE701D9942A2B2BF9348B02F3D9C0EF
ABAAAAB8E1F4F5F5293D00531624D40E00B4B4B43C01E4E6E6B206D0EDD4BB97
15302E2E8EC5B7B2B2F22980AC0908973C0B604A4FE08A8645DFFDDDD6D6F69D
01B2B2B2BE11C01FD4EF35EA562CA7B187520CD98AD5FD40C250463D5028FEA4
7A72CB00546235B4E35F290401A09667007523FA993F261240FDEF08058E0EA6
13B4C97FE960A263003A649850A7FA4622FC853CA125A38A3575173466C0A01A
E6F9D9239D1397E850D249E23EA386F50440954F432EB1A47B7BD2803DD1E164
699CCFBFE0188AFF0F0AC5396DE69CDAF3ADDE7F432A4026746F8ACD1A1B6F23
43F340000F246A1D3EFF0712759FFDF03F71A80000000049454E44AE426082}
Visible = False
end
object imgFSXStateConnected: TImage
Left = 359
Top = 67
Width = 32
Height = 32
AutoSize = True
Picture.Data = {
0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000
00200806000000737A7AF4000000097048597300000EC400000EC401952B0E1B
000008124944415478DAC5977B7054D51DC7BFF7B177DF9BCDE649221188840D
2492A243487C2C3E68476D29D599A2A53E3AAD5275A60FFFE91FDAD67F9CB68E
33AD558A05E91F75C4222DA2B49476B4DD100832986002C612A76D90B0E4BDBB
D9DDECEE7DF677CEEE86242E26FCD53373F7DEB97BEEF97DCEF7F738E708F83F
3761FE8B8AF61DCD922405645986284AD4837511F37761EE975691D1F83BFAB1
ACFCDD84699A300C9D2EF3D2E8F1C7078A0254DDBC73693A36F2A6ECAFDB20D8
7D648FFDC500A4FC5D2CC67B8596330C187437F8DD2220331DB5AC44E4AFAE40
CDB648C7A3B13900BEA6674F3856843634D59761ED32179C6E0982457F8B22D9
16721D8BCDBA88A656BE8F65E4402CC1443A65A277701A670646A00F75BD19ED
FDE9D61980D2F52F360B8AB7AFF9861B70FFCD15106DB9893315662BCFC558CC
FCF5DC37C40D9743443A6342CD92021AF087E363E8EDEA3414C5563E7A6C7B2C
07D0FA7248F45487BFFAC5B568A1D98B9200E67E360087B06685C16200A8BF4C
1F6F5AEF476DB9827852C7BEF7C691552DF49E4FE1E0A11390856C70F4E863E7
F890810D3B09A02AFC350268AC7390EA050001DCF382B068EFB3E650047CA9B5
04D565F63C90855D6F8F209535F1F1A7691CF8731714510B0E87BF9D0768FB6D
48745785EFDAD88CE6650E2E9BCF2B2291A6E8B5989A020B8585FD4FCD6517F1
E5363FCA4B6C33EF7A0692F86777028669E1CC600687FFCE007402F856016037
77C11DB7AC41FB6A27B6DE164065A90D9A6E612CA66124AA632CAE2132AE619A
6434CDE2243E9784CDED2528F55E367E8E667CA82B46C6019DBEEBFB4F16EFBE
F73E6C821A1CE978A400F02A01D4846F696BC44377FA70FB3A1FBC349830CFE9
CC7046353134AA6272CAC0D0988AF1B8C1DFF93D12EE0DF9E173CB33FD2F4DA8
78E31F516435529226A3190C4045E7D15390580C743C9403286DDB13927CB5E1
D61B1BD07CAD02874D44439D82B5F52EACBAC601492A1E013CB7498CA9940E85
BE713B2EA7C96854C5BE700C094A3F9DFAE99A059520CE7EAAE2FD63DD145B99
E058C7837980F6DF85244F6D78DD1756A2E95A1B6CB2489700990C7B9D228138
D052EF44C0277F469562EDBF97B278AB33CE83CE20E306D5225537B94BCF0EAA
E839D9531CA0B979255613804286D9251388C4B281152232BCAC4AC6F52B1C04
E4BC22C8274359ECEB8843D7993ACCB8C59F5523A740FF7915677A7A28B5B3C1
F18E6FCE06B8261C0CD623B89400949C028A4DE0F92C3100F1722AAE5B69C7E6
365F51884F2E66F1DABB711E2F2CEA59E06979F9558A958F2F6838D7779AFC97
094ECC075876DD0A342E5560B793719A3D73814D2A005CAEDB32A9F2E4E600AA
03B6CF004CA50CFCEC8D711EF50C4033732AB040CCE60106FB3FA4882680A3F3
00BC55CB515B21A3DA2FA1C42DC24E81C514281426BE3CD1F38377F8D0B4DC71
C5C07C6EEF3826E239FFEBCC38F93F963431126399A32139D4474B442638391F
C053B91C5E5A845831712B123C2E114E52C34EAEB0B18B201EBED38BD6602E06
D8E01D7D296CBCDE3D27535EF94B0C5D1F65C8B085695A079254D05234FB74C6
E00AA52E2E02C045000EBACBF96C60F7FBDA5DF8FAAD1E6E9C49FAAB8371F4FC
5BC54D8D763CF99512AE0E6BFB3B93D81B4E72E935EAC7EAC422006AC39E8A15
F07A8A03DCBED6C18D30E3A9B481170EC4D07F419F99F5E3777B4909177FFEE8
7C16CFFC3EFA3900BDB4541340E74C1A5221721340657D518050B3033FBCD7CF
17A768C2C0CFF74731386ACCF13DAB1F3F7E20C09FD394FFDB9E1FE52E2A0A30
F42129909D05C02A21956277E57578FA1B65A8ABB471BFB320B451656DA142C4
54189ED4F18B3FC61099348A06E0AFB797A1AA54E681F8BD9DE3383FA253F199
0540CA4D4D13C085D3D48701144AF186DD548A6BC2AE8A9578645309EEBFCD47
25D8CEA3BFD08627353CFB7A0C1309F38A1570DB4637B6B47BF8F3CBEFC4F0B7
EE3434329CD17200D304902080E9A16E52400D4E1E7BB800B02B2479ABC38EF2
551484325F8ED7D4D9716B93135B6EF2A08C4AF0E15329EC3E92F8DC125C1B90
F0D213E53C4E8E7C90C24B6FC7732EA04294CA92617241825C908E7C4031A006
A3C7F3CBB1BFF595904C1B12A5BC91528F0148947E221C548C1EBDDB87074891
432793D87D38B1E0BEF485EF04D040EA9DBB90C5F77F33CE6B000348AB24FD34
2991D6908D9C2205B460B42BBF21F1AFDF41315019B60556C3E950E0A6FCB753
39E6AB62AD823D4F55E160570ABB0EC7B150DBD2EEC6F67BFCDCF7773D13E101
99290422D5836C3A03F51201587A307A22BF25F3DFF822015485E5400364C53D
A3002B3EAC24EF7F7A098EF7A7B1F3D0C2003E82FFD34F96E0C0B1247EF9568C
AF822A03C8B2A24467032D0575F8347741ECE41339005FCBF321D9571D964B96
43905D906C0E329E5F9629FAB76EF4F2F40B9FC92C08C0DA77EFF161CF91295E
01355A14748D4168B42BCED08E39096D7C809E93ABE2DD4F0D70006FE38F1A24
F7927F89AE0A41A03DB9202AFC62FB7341620B4EFE847435DBE2FCC1C4A21311
4C95CD985E6BFC6E242EAAA63A5596E87F2EC94774D6DC2742741DB1F91B3699
6A32B7CC8A32372C08855391781507A3C2B18C00D8E9888E6630753AA0581015
0FD491D3AF0A8AE3B1F4D05E8B0F69F3B448E6F4708354B26687E45C12A2A54F
E40315CE857C672C2ED27A9E814E43B95DB48999EDB4A9EB4672E81D3D71F607
B26FD54535DE65720049AE132C7DCA473D6A04D1552B88F6001B220731F3931F
7901CBF3552A9CD30416F89951CBCA4428D022A635999CD35D14A88A5826399E
0E2D10AFE61CB27855F81656D0C8A5AA694DF092FA3F8CC8125D22B18C700000
000049454E44AE426082}
Visible = False
end
object imgPrepar3DStateDisconnected: TImage
Left = 397
Top = 108
Width = 32
Height = 32
AutoSize = True
Picture.Data = {
0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000
00200806000000737A7AF40000001974455874536F6674776172650041646F62
6520496D616765526561647971C9653C0000032269545874584D4C3A636F6D2E
61646F62652E786D7000000000003C3F787061636B657420626567696E3D22EF
BBBF222069643D2257354D304D7043656869487A7265537A4E54637A6B633964
223F3E203C783A786D706D65746120786D6C6E733A783D2261646F62653A6E73
3A6D6574612F2220783A786D70746B3D2241646F626520584D5020436F726520
352E332D633031312036362E3134353636312C20323031322F30322F30362D31
343A35363A32372020202020202020223E203C7264663A52444620786D6C6E73
3A7264663D22687474703A2F2F7777772E77332E6F72672F313939392F30322F
32322D7264662D73796E7461782D6E7323223E203C7264663A44657363726970
74696F6E207264663A61626F75743D222220786D6C6E733A786D703D22687474
703A2F2F6E732E61646F62652E636F6D2F7861702F312E302F2220786D6C6E73
3A786D704D4D3D22687474703A2F2F6E732E61646F62652E636F6D2F7861702F
312E302F6D6D2F2220786D6C6E733A73745265663D22687474703A2F2F6E732E
61646F62652E636F6D2F7861702F312E302F73547970652F5265736F75726365
526566232220786D703A43726561746F72546F6F6C3D2241646F62652050686F
746F73686F7020435336202857696E646F7773292220786D704D4D3A496E7374
616E636549443D22786D702E6969643A46373844414546353830333031314537
383642313835314144313333453444322220786D704D4D3A446F63756D656E74
49443D22786D702E6469643A4637384441454636383033303131453738364231
383531414431333345344432223E203C786D704D4D3A4465726976656446726F
6D2073745265663A696E7374616E636549443D22786D702E6969643A46373844
4145463338303330313145373836423138353141443133334534443222207374
5265663A646F63756D656E7449443D22786D702E6469643A4637384441454634
383033303131453738364231383531414431333345344432222F3E203C2F7264
663A4465736372697074696F6E3E203C2F7264663A5244463E203C2F783A786D
706D6574613E203C3F787061636B657420656E643D2272223F3E2AAC8A2B0000
05884944415478DAB5975D4C145714C7FF33BBCBF7571023864421A8A118BE2C
51A0C627531BF1951A8920F1C147424830358813A55A2B515BEDBB4D15296B8A
4DA07DE08918FB620C602D890F34C1867D0024F2B5B8B0BBB33DE7EEDE656676
D8DD9AF4869B3BCCDC7BCFEFFCCF9973679523478E14E6E6E69EF4F97C45A150
48A50E5DD7637A30188C5EF31C6E3CC6EBD639722D75DDEFF77BBC5EEFEFCAF1
E3C7CF2F2C2C14D143552E90CDBA91F1BE7514D73CDADD078F3130FAC6C68647
397AF468CFEAEAAA6AF42C6206F2DF44C6134118012001A86F6E6EEA4A7D7DBD
B6BEBE6EF2566E62356A0715EBAD8D7246A8C8353BBCE1F341A9ABABD33E7CF8
B08DF190FC33198FCEB18C710DDB00B05DE5F0E1C31AC5228EE1F846B7C02C32
5BC0ACD71C02565EA9ADADD5027E7F7441C4BCC970F49E11328E11B3E711408B
4A2152C0CB00870E1DD2EC12705B05128420EE330300DB5C5FF742A9A9AED642
06A3310A58F22026276CB3DEE2BD4D78743D08AF9714A8260085E72888F5DA40
24169BE69801604CC038092AC1F42087C01B06501505A969A9C8CCCC84C3E130
D9D6433AA84E20E00F40A17939B93934C769F28EE55C595E813F924BD9D95970
B952242FCDE38CF7515F17FB04820101B0E68D84808D1E3C7810675BCEC2E974
8A0D8D8D01868787F1E6CD1B5CEEBE8C94D4942D48656BCE13F7134CFF3D8D8E
8E0EECDAB5CB5C5BA84D4F4F63E89721783C1E6C12ECDADA2A295055A5395D4E
545656A2B5B515333333989F9B0F43D0E62E970BE59F944375A8B8F7FD3DD4D5
D7C349C05B29A92023231D151515585A5AC69DDBB7D1D9D9898CCC0CBC7EFD1A
814040CCCACFCFC7810307B0B2B282BEBE3EBC7BB78855BA5668A1C65E575555
A2A5A50503033FE3D5AB57E2F0618D1D4E86AB407373330607DD78F9F2258502
505587080937863C73E60CF6ED2BC5952B57D0D5D5250CDDBFFF03975B31C741
0E34347C86D3A7BFC4E8E82886868604B0525E5E2E42505353430067F1F8F100
26272785026C4086E7DCB9563C7AD48F172F5E202F2F0F274E7C4EE17289CDD3
287F5881E7CFFFC0C8C8082E5EECA2CD9770F7EE77A053560A2572ACB7B7170B
F3F3B875AB0FEFDFBF875256562614A8A9A9162170BBDD34318B364D1300EC1D
C3B1CCBDBD5F63717151C4B7ADAD4D3CE3964A39B173E74EA1DCC39F1EA28B00
78F33B77EE8A722BF384017A2EF7880A78FDC67501A9505C04001524E1E5E0E0
2079F70579991B062708F682EF8F8F8F53687491A8DC5455154996929282A6A6
26D4D67E8A9B37BFC5850B1768F330805080001C14B2E2E2625CBAF49550EAC1
8F0FB0BC4C21D8BF7F7F14A0ADED1CE5C000DEBEFD074AA4387028D86B8E257B
BC77EFDE2880CC70F6ACB1B1915428C0D5ABD7D0DEDE2E72C8ED1E14D9CE5BE5
EFD881538DA7904BAFF18D1BDF88B7C5BB46AF6169696934071880E33C313111
4E42831188F73B1BD7AE5D25C953A335801592C938363686A74F7F457777370A
0B0B45B593AF34CFE13AD1DFDF8F67CF9E9143FEF0695852522200780127DBD4
D414E6E6E68461B9B184484F4FC7B163C7A20AC86AC546666767E9B5FB4B84A5
A1A1015959591115C3EBE9F38B72E44FD0D79778358304E7A3E2A4505C3499ED
5B678DB920CBC6F3D8008F76870BAB261509C387ABA53CECF83977B94628B067
CF1E4D6E6E94538EA693C1E6D32CF6008AFD58B5BBC79D1354292A2AD2A46746
10ABE776CA24FC3E8C3984CC8A0980DDBB776B4669B78348468D784AD8A92000
A8A89800AC2148148A8F51C204505050A0B1713B80442A249B0B766A444340A7
540C40322A244ACA4430E2B39C3E86153A58E20224A342A2306CA78650202727
4793C6E3A9F07FE48300A03ADEA3861BFE6B32269B0FDBC11080AE505D3F4FA5
B5880CA856059255E16394E01FA754093D6CB590363D49A38048C6F364429100
4CA7F3C04365F9B77F012DCE3F40F34BE76D0000000049454E44AE426082}
Visible = False
end
object imgPrepar3DStateConnected: TImage
Left = 359
Top = 108
Width = 32
Height = 32
AutoSize = True
Picture.Data = {
0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000
00200806000000737A7AF4000000097048597300000EC400000EC401952B0E1B
0000059A4944415478DAB5975D4C145714C7FF773F403E0482102124A0418CC5
C08245BE4A7822B509BE5A8301E4C9873631C60453039200D55A89D06A7DB6A9
22654DB1893EF9640C7D41A2526BE2034DB0D10740A27CECB2B03BB33DE7EECC
3033BBEE2E4D7AC37087997BEFF99DFF39F7DC41D4D5D579B2B3B36F040281DA
7038ECA44BA8AA0AFBA5288A714F63C08DFB78977D8C36979B120C06A77C3EDF
D7A2A5A565727171F130BD74691304B4665FC8FCDCDECB7BEE633D07F7C6DF61
0D26B4B1B1F1443435356DAEAEAE3AE981301BD12725633C11841900BA1AF46B
737353110D0D0D8ADFEF979E87B72CC28262004443457B1B43393394764F0E87
37020188FAFA7A757D7D1DB18D87F51F8B71638CAD8F6B381A006C57D4D6D6AA
148B3886E31BDD02B3C96C03B3DF5308C0CA8B9A9A1A35140C1A1334F316C3C6
3333641C2356CF35409B4A6152C0C700870E1D52CD5B2BA102094210F79D0980
6DFAFD3E88EAAA2A356C321AA5802D0FA2722266D6DBBC8F111E5555E0F39102
55042037BE40B4D7262239D932C60A007302C649501D4C553804BE08804308A4
EE48454646069C4EA7C5B61A56417502A1600882C6656567D11897C53B967365
7905412D9776EECC84DB9DA2F3D238CEF8005D7EB94E48094980359F1602367A
F0E041B477B4C3E572C905CD8D01EEDFBF8F57AF5EA1B7A71729A9295B90626B
CC5DEF5DCCFE3D8B3367CE60F7EEDD966DC96D76761613BF4DE0EDDBB7D824D8
B5B55552C0E3515D6E172A2B2BD1D9D989B9B9392CCC2F44206871B7DB8DF24F
CAE1703A70EDC76BA86F68808B80B75252203D3D0D151515F8F06119C357AFE2
ECD9B348CF48C78B172F100A85E4A8DCDC5CECDFBF1F2B2B2B181A1AC2BB774B
58A57B411355F6DAE3A944474707C6C67EC5CCCC8C3C7C5863A78BE12A70E2C4
098C8F7B313D3D4DA1001C0EA70C0937866C6B6BC3BE7DA5E8EBEB437777B734
74FDFA4FA0722BC738C981C6C6CF70FCF89778F8F02126262624B0282F2F9721
A8AEAE268076DCB93386E7CF9F4B05D8801E9E93273B71FBF628A6A6A6909393
8323473EA770B9E5E23B287F5881C9C93FF0E0C1039C3BD74D8B7FC0C8C80FA0
5356174AE6D8E0E02016171670E5CA10DEBF7F0F71E0C001A9407575950C81D7
EBA58199B4E80E09C0DE311CCB3C38F82D969696647CBBBABAE43B6EA99413F9
F9F952B95BBFDC423701F0E2C3C323B2DCEA79C200177A2FC80A78F1D2450929
282E12800A92F4727C7C9CBCFB82BCCC8E8013047BC1CF9F3E7D4AA15165A272
73381C32C952525270ECD831D4D47C8ACB97BFC7A953A768F108805480009C14
B23D7BF6E0FCF96FA452377FBE89E5650A4159599901D0D5759272600CAF5FFF
03A115070E057BCDB1648F4B4A4A0C003DC3D9B3D6D65652210FFDFD03387DFA
B4CC21AF775C663B2F95BB6B178EB61E45366DE34B97BE93BBC5B746DBB0B4B4
D4C80106E0383F7BF62C9284262390FB7B270606FA49F254A306B0427A323E7A
F408F7EEFD8E9E9E1E141414C86AA76F691EC375627474148F1F3F26878291D3
70EFDEBD12802770B2BD7CF912F3F3F3D2B0BEB00E91969686E6E6664301BD5A
B191376FDED0B6FB4B86A5B1B1119999999A8A91F9F4F94539F227E8EB4B6E4D
85E002549C04C545D5B37DEBACB11664BDF13836C07DACC38555D31589C047AA
A57ED8F17BBEF4395281E2E262555FDC2CA7DE5B4E86189F66D10750F4C76AAC
677C71828AA2A22255F7CC0C62F73C963209BF0FA30E21AB6212A0B0B050354B
FB318864D488A7442C15240015150B803D048942F15F94B000E4E5E5A96C3C16
40221592CD85586A1821A0532A0A201915122565221806E08F6141074B5C8064
544814868FA92115C8CACA5234E3229E0AFF433E842500D5F14D32ECA44B6C37
1993CD878FC0308022A8AE4F52693D4C065CBA12DB55619B4A18FF9C52257CC2
B27B68D11BD4D752EF149A85789E27138A3860FC40A1F3608ACAF257FF0266EC
56107E5E17130000000049454E44AE426082}
Visible = False
end
object btnP1: TButton
Left = 11
Top = 67
@ -641,6 +913,8 @@ object MainForm: TMainForm
Align = alTop
BevelOuter = bvNone
TabOrder = 1
ExplicitLeft = -19
ExplicitTop = 8
object pnlFSX: TPanel
AlignWithMargins = True
Left = 233
@ -650,67 +924,11 @@ object MainForm: TMainForm
Align = alRight
BevelOuter = bvNone
TabOrder = 0
object imgFSXStateNotConnected: TImage
object imgSimulatorState: TImage
Left = 4
Top = 4
Width = 32
Height = 32
AutoSize = True
Picture.Data = {
0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000
00200806000000737A7AF40000001974455874536F6674776172650041646F62
6520496D616765526561647971C9653C000005774944415478DAC597C74B6C59
10C64F9B737A9815DA8839A388115C28032266915988CE6660FE9199EDB8706F
C4D1850CA2A8288A2898338AA298033EF3336B4F7DA5E77A5B6DB5DF660E1CEE
EDDBB74FFD4ED55755A7353A9D4EFC9F4303008D46A33C282E2E76373535B536
333313262626FC9DFC5EFDDE47436E0A57CCC7C747F1F0F08079DEDCDCFC5DFD
9E02505A5AEA78727252ECECECEC636969C9CF2480BC1A33A461F5F5EAEA4A77
7676B6E2E2E2D2DAD0D070AD07909D9DFD5B4040808F56AB153E3E3EC2C2C242
D9BDDA0B3FE301CCDBDB5BB1B5B525565757C5FAFAFA7C4747C73F0A40414181
3BEDFAF798981891989868D0A8B121C0FBD8C8DDDD9DB8BFBFE7E7232323988F
E6E6E67F3535355D33406161A1D6DEDEBE22232343F8FAFAEAC55E6DD41800D2
91080B0B131452717979294647471962737353747777E39DEAC6C6C6430620E1
31406666A6F0F0F07803606C0820E0F0F070E1E4E4A400F5F7F7731876777745
5757171E57D7D7D73F0194949430404A4A8AF0F2F262B7595959899B9B1B1690
3100F86D545494A0F594671473B1B4B4C46B6D6F6F8BDEDE5EAC575D5757F704
4019C000494949C2DFDF5F242424080707074E9DF3F37341CAE5EBE9E929EFC2
50ED00747474B4B0B5B5559EEDEDED89E9E969FE0DD6DBD9D9110303031C0205
A0ACAC4C4B062BE2E3E35984212121BCD8EB5D630710D4F1F131C715D78B8B0B
7E6663632362636385B5B5B5F23EA5B5127B590B00303C3C8CCFD5B5B5B52F00
8E8E8E15701D42400A156E6E6E9C8E521386C4F69CDF1C77D40F39E0B5B1B131
0E230C030020D000A0E8D95B808888083688C5A062188627BCBDBD393BE0DAAF
68E1F0F0504C4D4D291A820D18070800262626DE07080D0D6500189710EA4A48
158C61E0194320070707627C7C9C8DBD2AC30C2135F1068052A622282848B8BB
BB2BC6E57C5D8AE10D84EB3D0800A0D8C0B09CD238E6FEFEBE989B9BC3BDBE08
01E0E7E7A700A821A406A4417C4E4F4F17E4B53700D003F25C6D5CC61F6205C0
E2E2E2FB00308E459182883DC408636A0FE01E9902B11A126667672767897AF7
00432A2373500DDF0580F26118C5048AC60484DA1B308E8605202CBEBCBC2C82
8383F53265707050ACADADB161D40D881113F7D7D7D75F07901E9061409141AE
C338DC89F28A0E87D0A5A5A529109393932C44E901BCFB2900B2002130040081
C2088C63319453C4530E9471BC8381546B6F6FFF10809EBDF482CF0002030305
1A15EE115B7433C4523D90BE3939397C0F4394624AFABD06D8D8D8600FE801A0
1463113A98700B45DC2500F21E5E4075EBE9E9E1EB7B83CE152C60ACD9DADA2A
8E8E8EBE0680662401D090D013E00DB5B0D088A4BA0D0DFC0EF501030DE739DD
18408A510D40C7B297760C0018453341083C3D3D051DD178413B3B3B313F3FCF
4DE4A381142E2A2A629D2C2C2C30C47B1E407B46257C73208107A406301182E4
E4646ECFB3B3B39F0260E4E5E5B1F720508441ED017508004047B243BD23995A
84302EBB627979B9989999114343439F024446468AD4D454365C5353C3460120
21641600808EE84F00F9F9F90CE0EAEAAAE701D9942A2B2BF9348B02F3D9C0EF
ABAAAAB8E1F4F5F5293D00531624D40E00B4B4B43C01E4E6E6B206D0EDD4BB97
15302E2E8EC5B7B2B2F22980AC0908973C0B604A4FE08A8645DFFDDDD6D6F69D
01B2B2B2BE11C01FD4EF35EA562CA7B187520CD98AD5FD40C250463D5028FEA4
7A72CB00546235B4E35F290401A09667007523FA993F261240FDEF08058E0EA6
13B4C97FE960A263003A649850A7FA4622FC853CA125A38A3575173466C0A01A
E6F9D9239D1397E850D249E23EA386F50440954F432EB1A47B7BD2803DD1E164
699CCFBFE0188AFF0F0AC5396DE69CDAF3ADDE7F432A4026746F8ACD1A1B6F23
43F340000F246A1D3EFF0712759FFDF03F71A80000000049454E44AE426082}
end
object imgFSXStateConnected: TImage
Left = 4
Top = 4
Width = 32
Height = 32
AutoSize = True
Picture.Data = {
0954506E67496D61676589504E470D0A1A0A0000000D49484452000000200000
00200806000000737A7AF4000000097048597300000EC400000EC401952B0E1B
@ -780,9 +998,8 @@ object MainForm: TMainForm
7901CBF3552A9CD30416F89951CBCA4428D022A635999CD35D14A88A5826399E
0E2D10AFE61CB27855F81656D0C8A5AA694DF092FA3F8CC8125D22B18C700000
000049454E44AE426082}
Visible = False
end
object lblFSX: TLabel
object lblSimulator: TLabel
Left = 42
Top = 4
Width = 146
@ -795,7 +1012,7 @@ object MainForm: TMainForm
Font.Style = [fsBold]
ParentFont = False
end
object lblFSXState: TLabel
object lblSimulatorState: TLabel
Left = 42
Top = 23
Width = 31

View File

@ -40,6 +40,7 @@ const
TM_UPDATE = 1;
TM_NOUPDATE = 2;
TM_FSXSTATE = 3;
TM_FSXSIMULATOR = 4;
LED_COUNT = 8;
@ -107,10 +108,9 @@ type
btnDeleteProfile: TButton;
bvlProfiles: TBevel;
pnlFSX: TPanel;
imgFSXStateNotConnected: TImage;
imgFSXStateConnected: TImage;
lblFSX: TLabel;
lblFSXState: TLabel;
imgSimulatorState: TImage;
lblSimulator: TLabel;
lblSimulatorState: TLabel;
pnlState: TPanel;
tsConfiguration: TTabSheet;
cbProfileMenu: TCheckBox;
@ -130,6 +130,10 @@ type
ApplicationEvents: TApplicationEvents;
cbFSXSEAutoLaunch: TCheckBox;
ScriptErrorDialog: TTaskDialog;
imgFSXStateDisconnected: TImage;
imgFSXStateConnected: TImage;
imgPrepar3DStateDisconnected: TImage;
imgPrepar3DStateConnected: TImage;
procedure FormCreate(Sender: TObject);
procedure lblLinkLinkClick(Sender: TObject; const Link: string; LinkType: TSysLinkType);
@ -167,6 +171,9 @@ type
FLoadingSettings: Boolean;
FFunctionRegistry: TLEDFunctionRegistry;
FSimulator: TFSXSimConnectSimulator;
FSimulatorConnected: Boolean;
protected
procedure RegisterDeviceArrival;
procedure UnregisterDeviceArrival;
@ -205,6 +212,7 @@ type
procedure SetDeviceState(const AMessage: string; AFound: Boolean);
procedure SetFSXState(const AMessage: string; AConnected: Boolean);
procedure UpdateSimulatorState;
// procedure SetFSXToggleZoomButton(const ADeviceGUID: TGUID; AButtonIndex: Integer; const ADisplayText: string);
procedure CheckForUpdatesThread(const ATask: IOmniTask);
@ -215,6 +223,7 @@ type
procedure HandleDeviceStateMessage(AMessage: TOmniMessage);
procedure HandleFSXStateMessage(AMessage: TOmniMessage);
procedure HandleSimulatorMessage(AMessage: TOmniMessage);
procedure CMAskAutoUpdate(var Msg: TMessage); message CM_ASKAUTOUPDATE;
@ -222,6 +231,9 @@ type
property Settings: TSettings read FSettings;
property StateConsumerTask: IOmniTaskControl read FStateConsumerTask;
property Simulator: TFSXSimConnectSimulator read FSimulator write FSimulator;
property SimulatorConnected: Boolean read FSimulatorConnected write FSimulatorConnected;
property Log: IX2Log read FLog;
property FunctionRegistry: TLEDFunctionRegistry read FFunctionRegistry;
end;
@ -290,9 +302,10 @@ type
protected
function Initialize: Boolean; override;
procedure Cleanup; override;
public
{ IFSXSimConnectStateObserver }
procedure ObserverStateUpdate(ANewState: TFSXSimConnectState);
procedure ObserveStateUpdate(ANewState: TFSXSimConnectState);
procedure ObserveSimulatorUpdate(ASimulator: TFSXSimConnectSimulator);
end;
@ -913,11 +926,39 @@ procedure TMainForm.SetFSXState(const AMessage: string; AConnected: Boolean);
begin
Log.Verbose(Format('FSX SimConnect state changed (connected = %s, status = %s)', [BoolToStr(AConnected, True), AMessage]));
lblFSXState.Caption := AMessage;
lblFSXState.Update;
lblSimulatorState.Caption := AMessage;
lblSimulatorState.Update;
imgFSXStateConnected.Visible := AConnected;
imgFSXStateNotConnected.Visible := not AConnected;
SimulatorConnected := AConnected;
UpdateSimulatorState;
end;
procedure TMainForm.UpdateSimulatorState;
begin
case Simulator of
scsFSX:
begin
lblSimulator.Caption := 'Flight Simulator X';
lblSimulator.Update;
if SimulatorConnected then
imgSimulatorState.Picture.Assign(imgFSXStateConnected.Picture)
else
imgSimulatorState.Picture.Assign(imgFSXStateDisconnected.Picture);
end;
scsPrepar3D:
begin
lblSimulator.Caption := 'Prepar3D';
lblSimulator.Update;
if SimulatorConnected then
imgSimulatorState.Picture.Assign(imgPrepar3DStateConnected.Picture)
else
imgSimulatorState.Picture.Assign(imgPrepar3DStateDisconnected.Picture);
end;
end;
end;
@ -1263,6 +1304,9 @@ begin
TM_FSXSTATE:
HandleFSXStateMessage(msg);
TM_FSXSIMULATOR:
HandleSimulatorMessage(msg);
TM_UPDATE:
if MessageBox(Self.Handle, PChar('Version ' + msg.MsgData + ' is available on the G940 LED Control website.'#13#10 +
'Do you want to open the website now?'), 'Update available',
@ -1327,6 +1371,13 @@ begin
end;
procedure TMainForm.HandleSimulatorMessage(AMessage: TOmniMessage);
begin
Simulator := TFSXSimConnectSimulator(AMessage.MsgData.AsInteger);
UpdateSimulatorState;
end;
procedure TMainForm.TrayIconClick(Sender: TObject);
begin
Show();
@ -1400,9 +1451,14 @@ begin
inherited Cleanup;
end;
procedure TFSXStateMonitorWorker.ObserverStateUpdate(ANewState: TFSXSimConnectState);
procedure TFSXStateMonitorWorker.ObserveStateUpdate(ANewState: TFSXSimConnectState);
begin
Task.Comm.Send(TM_FSXSTATE, Integer(ANewState));
end;
procedure TFSXStateMonitorWorker.ObserveSimulatorUpdate(ASimulator: TFSXSimConnectSimulator);
begin
Task.Comm.Send(TM_FSXSIMULATOR, Integer(ASimulator));
end;
end.

View File

@ -8,7 +8,7 @@
<FrameworkType>VCL</FrameworkType>
<ProjectVersion>13.4</ProjectVersion>
<Base>True</Base>
<Config Condition="'$(Config)'==''">Release</Config>
<Config Condition="'$(Config)'==''">Debug</Config>
<Platform Condition="'$(Platform)'==''">Win32</Platform>
<TargetedPlatforms>1</TargetedPlatforms>
<AppType>Application</AppType>

Binary file not shown.

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 KiB

View File

@ -3,14 +3,13 @@ local strings = {}
strings.Category = {}
strings.Category.FSX = {}
strings.Category.FSX.Default = 'Flight Simulator X'
strings.Category.FSX.AutoPilot = strings.Category.FSX.Default..' - Autopilot'
strings.Category.FSX.ControlSurfaces = strings.Category.FSX.Default..' - Control surfaces'
strings.Category.FSX.Engines = strings.Category.FSX.Default..' - Engines'
strings.Category.FSX.Instruments = strings.Category.FSX.Default..' - Instruments'
strings.Category.FSX.Lights = strings.Category.FSX.Default..' - Lights'
strings.Category.FSX.Panels = strings.Category.FSX.Default..' - Panels'
strings.Category.FSX.Radios = strings.Category.FSX.Default..' - Radios'
strings.Category.FSX.Systems = strings.Category.FSX.Default..' - Systems'
strings.Category.FSX.AutoPilot = 'Autopilot'
strings.Category.FSX.ControlSurfaces = 'Control surfaces'
strings.Category.FSX.Engines = 'Engines'
strings.Category.FSX.Instruments = 'Instruments'
strings.Category.FSX.Lights = 'Lights'
strings.Category.FSX.Panels = 'Panels'
strings.Category.FSX.Radios = 'Radios'
strings.Category.FSX.Systems = 'Systems'
return strings

View File

@ -57,8 +57,13 @@ local LightsMaskAll = bit32.bor(
RegisterLightsFunction('beaconLights', 'Beacon lights', LightsMaskBeacon)
RegisterLightsFunction('instrumentLights', 'Instrument lights', LightsMaskPanel)
RegisterLightsFunction('landingLights', 'Landing lights', LightsMaskLanding)
RegisterLightsFunction('navLights', 'Nav lights', LightsMaskNav)
RegisterLightsFunction('strobeLights', 'Strobe lights', LightsMaskStrobe)
RegisterLightsFunction('taxiLights', 'Taxi lights', LightsMaskTaxi)
RegisterLightsFunction('recognitionLights', 'Recognition lights', LightsMaskRecognition)
RegisterLightsFunction('wingLights', 'Wing lights', LightsMaskWing)
RegisterLightsFunction('logoLights', 'Logo lights', LightsMaskLogo)
RegisterLightsFunction('cabinLights', 'Cabin lights', LightsMaskCabin)
RegisterLightsFunction('allLights', 'All lights', LightsMaskAll)

View File

@ -476,6 +476,14 @@ begin
Log.Info('Succesfully connected');
TFSXSimConnectStateMonitor.SetCurrentState(scsConnected);
{ Attempt to discover if it's FSX or Prepar3D }
if WaitNamedPipe('\\.\pipe\Lockheed Martin Prepar3D v2\SimConnect', 0) or
WaitNamedPipe('\\.\pipe\Lockheed Martin Prepar3D v3\SimConnect', 0) or
WaitNamedPipe('\\.\pipe\Lockheed Martin Prepar3D v4\SimConnect', 0) then
TFSXSimConnectStateMonitor.SetSimulator(scsPrepar3D)
else
TFSXSimConnectStateMonitor.SetSimulator(scsFSX);
Task.ClearTimer(TIMER_TRYSIMCONNECT);
RegisterDefinitions;
UpdateProfileMenu;

View File

@ -58,10 +58,12 @@ type
TFSXSimConnectState = (scsDisconnected, scsConnecting, scsConnected, scsFailed);
TFSXSimConnectSimulator = (scsFSX, scsPrepar3D);
IFSXSimConnectStateObserver = interface
['{0508904F-8189-479D-AF70-E98B00C9D9B2}']
procedure ObserverStateUpdate(ANewState: TFSXSimConnectState);
procedure ObserveStateUpdate(ANewState: TFSXSimConnectState);
procedure ObserveSimulatorUpdate(ASimulator: TFSXSimConnectSimulator);
end;

View File

@ -14,10 +14,14 @@ type
FObservers: TInterfaceList;
FCurrentStateLock: TCriticalSection;
FCurrentState: TFSXSimConnectState;
FSimulator: TFSXSimConnectSimulator;
FSimulatorLock: TCriticalSection;
procedure DoSetCurrentState(const Value: TFSXSimConnectState);
procedure DoSetSimulator(const Value: TFSXSimConnectSimulator);
protected
property CurrentStateLock: TCriticalSection read FCurrentStateLock;
property SimulatorLock: TCriticalSection read FCurrentStateLock;
property Observers: TInterfaceList read FObservers;
public
constructor Create;
@ -25,11 +29,13 @@ type
class function Instance: TFSXSimConnectStateMonitor;
class procedure SetCurrentState(AState: TFSXSimConnectState);
class procedure SetSimulator(ASimulator: TFSXSimConnectSimulator);
procedure Attach(AObserver: IFSXSimConnectStateObserver);
procedure Detach(AObserver: IFSXSimConnectStateObserver);
property CurrentState: TFSXSimConnectState read FCurrentState write DoSetCurrentState;
property Simulator: TFSXSimConnectSimulator read FSimulator write DoSetSimulator;
end;
@ -55,11 +61,18 @@ begin
end;
class procedure TFSXSimConnectStateMonitor.SetSimulator(ASimulator: TFSXSimConnectSimulator);
begin
Instance.DoSetSimulator(ASimulator);
end;
constructor TFSXSimConnectStateMonitor.Create;
begin
inherited Create;
FCurrentStateLock := TCriticalSection.Create;
FSimulatorLock := TCriticalSection.Create;
FObservers := TInterfaceList.Create;
end;
@ -100,11 +113,30 @@ begin
end;
for observer in Observers do
(observer as IFSXSimConnectStateObserver).ObserverStateUpdate(CurrentState);
(observer as IFSXSimConnectStateObserver).ObserveStateUpdate(CurrentState);
end;
end;
procedure TFSXSimConnectStateMonitor.DoSetSimulator(const Value: TFSXSimConnectSimulator);
var
observer: IInterface;
begin
if Value <> FSimulator then
begin
CurrentStateLock.Acquire;
try
FSimulator := Value;
finally
CurrentStateLock.Release;
end;
for observer in Observers do
(observer as IFSXSimConnectStateObserver).ObserveSimulatorUpdate(Simulator);
end;
end;
initialization
FSXSimConnectStateInstance := TFSXSimConnectStateMonitor.Create;

View File

@ -348,7 +348,7 @@ begin
fileName := fileName + ' - ' + string(debug.source)
end;
TX2GlobalLog.Log(ALevel, AMessage, filename);
TX2GlobalLog.Category('Lua').Log(ALevel, AMessage, filename);
end;

View File

@ -1,47 +1,48 @@
#define AppName "G940 LED Control"
#define AppExeName "G940LEDControl.exe"
#define AppVersion GetFileVersion("..\G940LEDControl\Bin\" + AppExeName)
#define AppPublisher "X²Software"
#define AppURL "http://g940.x2software.net/"
[Setup]
AppId={{704baf93-d22e-471b-bdcf-d21d82d73398}
AppName={#AppName}
AppVersion={#AppVersion}
AppPublisher={#AppPublisher}
AppPublisherURL={#AppURL}
AppSupportURL={#AppURL}
AppUpdatesURL={#AppURL}
DefaultDirName={pf}\{#AppName}
DefaultGroupName={#AppName}
AllowNoIcons=yes
;LicenseFile=..\license.txt
OutputDir=output
OutputBaseFilename=G940LEDControlSetup-{#AppVersion}
Compression=lzma
SolidCompression=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "..\G940LEDControl\Bin\{#AppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\G940LEDControl\Bin\LogiJoystickDLL.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\G940LEDControl\Bin\FSX-SimConnect.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\G940LEDControl\Bin\FSXSP2-SimConnect.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\G940LEDControl\Bin\FSX-SE-SimConnect.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\G940LEDControl\Scripts\*.lua"; DestDir: "{app}\Scripts"; Flags: ignoreversion recursesubdirs
[Dirs]
Name: "{userappdata}\G940LEDControl\Scripts\FSX"
[Icons]
Name: "{group}\{#AppName}"; Filename: "{app}\{#AppExeName}"
Name: "{commondesktop}\{#AppName}"; Filename: "{app}\{#AppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#AppExeName}"; Description: "{cm:LaunchProgram,{#AppName}}"; Flags: nowait postinstall skipifsilent
#define AppName "G940 LED Control"
#define AppExeName "G940LEDControl.exe"
#define AppVersion GetFileVersion("..\G940LEDControl\Bin\" + AppExeName)
#define AppPublisher "X²Software"
#define AppURL "http://g940.x2software.net/"
[Setup]
AppId={{704baf93-d22e-471b-bdcf-d21d82d73398}
AppName={#AppName}
AppVersion={#AppVersion}
AppPublisher={#AppPublisher}
AppPublisherURL={#AppURL}
AppSupportURL={#AppURL}
AppUpdatesURL={#AppURL}
DefaultDirName={pf}\{#AppName}
DefaultGroupName={#AppName}
AllowNoIcons=yes
;LicenseFile=..\license.txt
OutputDir=output
OutputBaseFilename=G940LEDControlSetup-{#AppVersion}
Compression=lzma
SolidCompression=yes
[Languages]
Name: "english"; MessagesFile: "compiler:Default.isl"
[Tasks]
Name: "desktopicon"; Description: "{cm:CreateDesktopIcon}"; GroupDescription: "{cm:AdditionalIcons}"; Flags: unchecked
[Files]
Source: "..\G940LEDControl\Bin\{#AppExeName}"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\G940LEDControl\Bin\lua52.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\G940LEDControl\Bin\LogiJoystickDLL.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\G940LEDControl\Bin\FSX-SimConnect.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\G940LEDControl\Bin\FSXSP2-SimConnect.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\G940LEDControl\Bin\FSX-SE-SimConnect.dll"; DestDir: "{app}"; Flags: ignoreversion
Source: "..\G940LEDControl\Scripts\*.lua"; DestDir: "{app}\Scripts"; Flags: ignoreversion recursesubdirs
[Dirs]
Name: "{userappdata}\G940LEDControl\Scripts\FSX"
[Icons]
Name: "{group}\{#AppName}"; Filename: "{app}\{#AppExeName}"
Name: "{commondesktop}\{#AppName}"; Filename: "{app}\{#AppExeName}"; Tasks: desktopicon
[Run]
Filename: "{app}\{#AppExeName}"; Description: "{cm:LaunchProgram,{#AppName}}"; Flags: nowait postinstall skipifsilent