Logitech G15/G19 Shortcut Tool

Anwendungen, Tools, Userlibs und anderes nützliches.
Benutzeravatar
HeX0R
Beiträge: 2954
Registriert: 10.09.2004 09:59
Computerausstattung: AMD Ryzen 7 5800X
96Gig Ram
NVIDIA GEFORCE RTX 3060TI/8Gig
Win10 64Bit
G19 Tastatur
2x 24" + 1x27" Monitore
Glorious O Wireless Maus
PB 3.x-PB 6.x
Oculus Quest 2
Kontaktdaten:

Logitech G15/G19 Shortcut Tool

Beitrag von HeX0R »

Habe mir gestern eben was zusammengebastelt, vielleicht kann es ja jemand gebrauchen.

Problem war, ich habe auf meinen Gxx Tasten meiner G19 verschiedene Shortcuts angelegt, wie Monitor rechts aus, beide Monitore an, Soundausgabe Lautsprecher, Soundausgabe Kopfhörer, ...
Leider bin ich im fortgeschrittenen Alter und konnte mir ums verrecken nicht merken, welcher Shortcut wo ist.
Bei den Monitorumschaltungen ist es nicht so schlimm, das sieht man's ja eine Sekunde später, aber beim Lautsprecherumschalten, sehe ich nix, und musste es immer erst ausprobieren.

Also dachte ich, das Keyboard hat doch nen Display, wieso kann mir das nicht zusätzlich anzeigen was ich gerade aktiviert habe.
Mit der Logitechsoftware scheint das nur möglich zu sein, wenn ich "mehrere Tasten", also ein Makro verwende, das wollte ich aber nicht.

Also kann man das Tool hier verwenden, es sitzt dann quasi zwischen der Logitechsoftware und dem eigentlichen Tool und aktiviert zusätzlich das Display.
Man kann Texte und/oder Hintergrundbilder angeben und einen Timeout, wie lange das Display angezeigt werden soll.

Genug BlaBla, hier der Code:

Code: Alles auswählen

;/-------------------------
;| Logitech G15/G19 Shortcut Tool
;|
;| You select in Logitech Gaming Software this tool as shortcut
;| with the parameter you entered in the app (Shortcut Name),
;| then you are able to use the G15/G19 display also.
;|
;| Written in 2h, because I often forgot which shortcut I set to my G-keys
;| Now the display will inform me also.
;|
;| (c)HeX0R, completely free for personal use
;|
;/-------------------------

;Include G15_G19 Include
HTTPInclude "http://www.purebasic.fr/german/viewtopic.php?f=8&t=23463"
;XIncludeFile "..\G15_G19_v2_devel.pbi"
;No HTTP Include??
;Get it from here:
;http://www.purebasic.fr/english/viewtopic.php?f=12&t=62689


UsePNGImageDecoder()
UseJPEGImageDecoder()

Enumeration Window
	#Window_Main
EndEnumeration

Enumeration Gadget
	#Frame_Shortcuts
	#Tree_Shortcuts
	#ButtonImage_Add
	#ButtonImage_Delete
	#Frame_Settings
	#Text_ShortcutName
	#String_Shortcut_Name
	#Text_Shortcut
	#String_Shortcut
	#Button_BrowseShortcut
	#Frame_G19_Settings
	#Text_ShowPicture
	#String_ShowPicture
	#Button_BrowsePicture
	#Text_ShowText
	#Editor_ShowText
	#Text_Duration
	#Button_TestShortCut
	#Button_Apply
	#Text_Params
	#String_Params
	#Text_WorkingDir
	#String_WorkingDir
	#Button_BrowseWorkingDir
	#String_Duration
	#Text_ms
EndEnumeration

Enumeration Image
	#Img_Add
	#Img_Delete
EndEnumeration

EnableExplicit

Structure _SHORTCUTS_
	Name.s
	ShortCut.s
	Parameters.s
	WorkingDir.s
	PathToPicture.s
	Text.s
	Duration.i
EndStructure

Global NewList SC._SHORTCUTS_()
Global EditorBug.i  ;Editor fires an EventType_Change, without user input!

Macro CLEARFIELDS
	SetGadgetText(#String_Shortcut,    "")
	SetGadgetText(#String_Params,      "")
	SetGadgetText(#String_WorkingDir,  "")
	SetGadgetText(#String_ShowPicture, "")
	SetGadgetText(#String_Duration,    "1000")
	ClearGadgetItems(#Editor_ShowText)
EndMacro

Procedure Instance_Running(LockStr$)
	Protected *MyMutex = CreateMutex_(#Null, 1, LockStr$)
	If *MyMutex <> 0 And GetLastError_() = #ERROR_ALREADY_EXISTS
		CloseHandle_(*MyMutex)
		ProcedureReturn #True
	Else
		ProcedureReturn #False
	EndIf
EndProcedure

Procedure DisableApplyButton()
	Protected i, j, k, State, a$
	
	i = CountGadgetItems(#Tree_Shortcuts)
	If i > -1
		i - 1
		For j = 0 To CountGadgetItems(#Tree_Shortcuts) - 1
			a$ = GetGadgetItemText(#Tree_Shortcuts, j)
			For k = 0 To CountGadgetItems(#Tree_Shortcuts) - 1
				If k <> j
					If a$ = GetGadgetItemText(#Tree_Shortcuts, k)
						;double found
						State = 1
						Break 2
					EndIf
				EndIf
			Next k
		Next j
	EndIf
	
	DisableGadget(#Button_Apply, State)
EndProcedure

Procedure DoShortCut(Name.s, TestMode = #False)
	Protected Found, H, ImageID, Logi, i, Color, b$, Type = #LOGI_LCD_TYPE_COLOR
	
	If TestMode
		Found = #True
	Else
		ForEach SC()
			If SC()\Name = Name
				Found = #True
				Break
			EndIf
		Next
	EndIf
	
	If Found And SC()\ShortCut
		If SC()\PathToPicture Or SC()\Text
			If LOGILCD::Init("ShortCut0R", Type)
				Logi = #True
			Else
				Type = #LOGI_LCD_TYPE_MONO
				If LOGILCD::Init("ShortCut0R", Type)
					Logi = #True
				EndIf
			EndIf
			If Logi
				If SC()\PathToPicture
					ImageID = LoadImage(#PB_Any, SC()\PathToPicture)
				EndIf
			EndIf
		EndIf
		
		H = RunProgram(SC()\ShortCut, SC()\Parameters, SC()\WorkingDir)
		If Logi
			If ImageID
				LOGILCD::SetBackgroundImage(ImageID, Type)
			EndIf
			For i = 0 To CountString(SC()\Text, "\n")
				b$ = StringField(SC()\Text, i + 1, "\n")
				If Left(b$, 1) = "#"
					Color = Val("$" + Mid(b$, 6, 2) + Mid(b$, 4, 2) + Mid(b$, 2, 2))
					b$    = Mid(b$, 8)
				Else
					Color = #White
				EndIf
				If i = 0
					;title
					LOGILCD::SetTitle(b$, Color)
				Else
					LOGILCD::SetText(b$, i, Color, Type)
				EndIf
			Next i
			LOGILCD::Update()
			
			Delay(SC()\Duration)
			LOGILCD::Shutdown()
			If ImageID
				FreeImage(ImageID)
			EndIf
		EndIf
	EndIf
	
EndProcedure

Procedure DisableGadgets()
	Protected i, State
	
	i = GetGadgetState(#Tree_Shortcuts)
	If i = -1
		State = 1
	EndIf
	
	DisableGadget(#String_Params,           State)
	DisableGadget(#String_Shortcut,         State)
	DisableGadget(#String_Shortcut_Name,    State)
	DisableGadget(#String_ShowPicture,      State)
	DisableGadget(#String_WorkingDir,       State)
	DisableGadget(#Editor_ShowText,         State)
	DisableGadget(#Button_BrowsePicture,    State)
	DisableGadget(#Button_BrowseShortcut,   State)
	DisableGadget(#Button_BrowseWorkingDir, State)
	DisableGadget(#String_Duration,         State)
	DisableGadget(#ButtonImage_Delete,      State)
	DisableGadget(#Button_TestShortCut,     State)
	
EndProcedure

Procedure GadgetEvent_TestShortcut()
	
	DoShortCut(SC()\Name, #True)
	
EndProcedure

Procedure GadgetEvent_BrowseWorkingDir()
	Protected a$, i, *SC._SHORTCUTS_
	
	a$ = PathRequester("Select Working Dir", GetGadgetText(#String_WorkingDir))
	SetGadgetText(#String_WorkingDir, a$)
	i = GetGadgetState(#Tree_Shortcuts)
	If i > -1
		*SC = GetGadgetItemData(#Tree_Shortcuts, i)
		*SC\WorkingDir = a$
	EndIf
EndProcedure

Procedure GadgetEvent_BrowsePicture()
	Protected a$, i, *SC._SHORTCUTS_
	
	a$ = OpenFileRequester("Select Picture", GetGadgetText(#String_ShowPicture), "Pictures|*.png;*.jpg;*.jpeg;*.bmp|All Files (*.*)|*.*", 0)
	SetGadgetText(#String_ShowPicture, a$)
	i = GetGadgetState(#Tree_Shortcuts)
	If i > -1
		*SC = GetGadgetItemData(#Tree_Shortcuts, i)
		*SC\PathToPicture = a$
	EndIf
EndProcedure

Procedure GadgetEvent_BrowseShortCut()
	Protected a$, i, *SC._SHORTCUTS_
	
	a$ = OpenFileRequester("Select Executable", GetGadgetText(#String_Shortcut), "Executables (*.exe)|*.exe|All Files (*.*)|*.*", 0)
	SetGadgetText(#String_Shortcut, a$)
	i = GetGadgetState(#Tree_Shortcuts)
	If i > -1
		*SC = GetGadgetItemData(#Tree_Shortcuts, i)
		*SC\ShortCut = a$
	EndIf
EndProcedure

Procedure GadgetEvent_AddShortCut()
	Protected a$, i, k
	
	a$ = "NewShortCut"
	i  = 0
	k  = #True
	While k
		k = #False
		ForEach SC()
			If SC()\Name = a$
				i + 1
				a$ = "NewShortCut_" + Str(i)
				k  = #True
				Break
			EndIf
		Next
	Wend
	AddElement(SC())
	SC()\Name          = a$
	SC()\Duration      = 1000
	SC()\Parameters    = ""
	SC()\PathToPicture = ""
	SC()\ShortCut      = ""
	SC()\Text          = ""
	SC()\WorkingDir    = ""
	i = CountGadgetItems(#Tree_Shortcuts)
	AddGadgetItem(#Tree_Shortcuts, -1, a$)
	SetGadgetItemData(#Tree_Shortcuts, i, @SC())
	
	SetGadgetState(#Tree_Shortcuts, i)
	SetGadgetText(#String_Shortcut_Name, a$)
	CLEARFIELDS
	DisableGadgets()
	
EndProcedure

Procedure GadgetEvent_Tree()
	Protected i, j, *SC._SHORTCUTS_
	
	EditorBug = #True
	i = GetGadgetState(#Tree_Shortcuts)
	If i = -1
		CLEARFIELDS
		SetGadgetText(#String_Shortcut_Name, "")
	Else
		*SC = GetGadgetItemData(#Tree_Shortcuts, i)
		ChangeCurrentElement(SC(), *SC)
		SetGadgetText(#String_Params,        *SC\Parameters)
		SetGadgetText(#String_Shortcut,      *SC\ShortCut)
		SetGadgetText(#String_Shortcut_Name, *SC\Name)
		SetGadgetText(#String_ShowPicture,   *SC\PathToPicture)
		SetGadgetText(#String_WorkingDir,    *SC\WorkingDir)
		ClearGadgetItems(#Editor_ShowText)
		
		For j = 0 To CountString(*SC\Text, "\n")
			AddGadgetItem(#Editor_ShowText, -1, StringField(*SC\Text, j + 1, "\n"))
		Next j
		SetGadgetText(#String_Duration, Str(*SC\Duration))
	EndIf
	
	DisableGadgets()
	
	EditorBug = #False
EndProcedure

Procedure GadgetEvent_DelShortCut()
	Protected a$, i
	
	i = GetGadgetState(#Tree_Shortcuts)
	If i > -1
		ChangeCurrentElement(SC(), GetGadgetItemData(#Tree_Shortcuts, i))
		DeleteElement(SC())
		RemoveGadgetItem(#Tree_Shortcuts, i)
		If CountGadgetItems(#Tree_Shortcuts) > 0
			SetGadgetState(#Tree_Shortcuts, 0)
		EndIf
		GadgetEvent_Tree()
	EndIf
	
EndProcedure

Procedure GadgetEvent_Apply()
	
	If FileSize(GetUserDirectory(#PB_Directory_ProgramData) + "g19scd/") <> -2
		CreateDirectory(GetUserDirectory(#PB_Directory_ProgramData) + "g19scd/")
	EndIf
	If ListSize(SC()) > 0
		If CreateJSON(0)
			InsertJSONList(JSONValue(0), SC())
			SaveJSON(0, GetUserDirectory(#PB_Directory_ProgramData) + "g19scd/g19scd.json", #PB_JSON_PrettyPrint)
			FreeJSON(0)
		EndIf
	EndIf
	
EndProcedure

Procedure GadgetEvent_StringChanged()
	Protected i, j, *SC._SHORTCUTS_
	
	If EventGadget() = #Editor_ShowText And EditorBug
		ProcedureReturn
	EndIf
	
	i  = GetGadgetState(#Tree_Shortcuts)
	*SC = GetGadgetItemData(#Tree_Shortcuts, i)
	*SC\PathToPicture = GetGadgetText(#String_ShowPicture)
	*SC\Duration      = Val(GetGadgetText(#String_Duration))
	If *SC\Duration < 0
		*SC\Duration = 1000
	EndIf
	*SC\Parameters = GetGadgetText(#String_Params)
	*SC\WorkingDir = GetGadgetText(#String_WorkingDir)
	*SC\ShortCut   = GetGadgetText(#String_Shortcut)
	*SC\Text       = ""
	For j = 0 To CountGadgetItems(#Editor_ShowText) - 1
		*SC\Text + GetGadgetItemText(#Editor_ShowText, j) + "\n"
	Next j
	*SC\Text = Left(*SC\Text, Len(*SC\Text) - 2)
	
EndProcedure


Procedure GadgetEvent_ChangeName()
	Protected a$, i, *SC._SHORTCUTS_
	
	a$ = GetGadgetText(#String_Shortcut_Name)
	i  = GetGadgetState(#Tree_Shortcuts)
	SetGadgetItemText(#Tree_Shortcuts, i, a$)
	*SC      = GetGadgetItemData(#Tree_Shortcuts, i)
	*SC\Name = a$
	DisableApplyButton()
	
EndProcedure

Procedure main()
	Protected a$, i
	
	If FileSize(GetUserDirectory(#PB_Directory_ProgramData) + "g19scd/g19scd.json") > 0
		If LoadJSON(0, GetUserDirectory(#PB_Directory_ProgramData) + "g19scd/g19scd.json")
			ExtractJSONList(JSONValue(0), SC())
			FreeJSON(0)
		EndIf
	EndIf
	
	a$ = ProgramParameter()
	If a$
		;shortcut mode!
		While Instance_Running("Logi_Shortut_T00l") = #True
			Delay(50)
		Wend
		DoShortCut(a$)

	Else
		
		CatchImage(#Img_Add,    ?Img_Add)
		CatchImage(#Img_Delete, ?Img_Delete)
		OpenWindow(#Window_Main, 0, 0, 600, 480, "G15/G19 ShortCut Tool", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
		FrameGadget(#Frame_Shortcuts, 5, 5, 190, 435, "Shortcuts")
		TreeGadget(#Tree_Shortcuts, 10, 25, 180, 385, #PB_Tree_AlwaysShowSelection | #PB_Tree_NoLines | #PB_Tree_NoButtons)
		ButtonImageGadget(#ButtonImage_Add, 10, 415, 20, 20, ImageID(#Img_Add))
		ButtonImageGadget(#ButtonImage_Delete, 169, 415, 20, 20, ImageID(#Img_Delete))
		FrameGadget(#Frame_Settings, 205, 5, 390, 435, "Shortcut Settings")
		TextGadget(#Text_ShortcutName, 215, 40, 90, 25, "Name:")
		StringGadget(#String_Shortcut_Name, 310, 30, 280, 30, "")
		TextGadget(#Text_Shortcut, 215, 75, 90, 25, "Shortcut:")
		StringGadget(#String_Shortcut, 310, 65, 240, 30, "")
		ButtonGadget(#Button_BrowseShortcut, 555, 65, 35, 30, "...")
		FrameGadget(#Frame_G19_Settings, 210, 175, 380, 260, "G15/G19 Settings")
		TextGadget(#Text_ShowPicture, 215, 205, 105, 25, "Show Picture:")
		StringGadget(#String_ShowPicture, 325, 195, 220, 30, "")
		ButtonGadget(#Button_BrowsePicture, 550, 195, 35, 30, "...")
		TextGadget(#Text_ShowText, 215, 235, 105, 25, "Show Text:")
		EditorGadget(#Editor_ShowText, 325, 230, 260, 125)
		TextGadget(#Text_Duration, 215, 365, 100, 25, "Duration:")
		StringGadget(#String_Duration, 325, 360, 220, 30, "")
		ButtonGadget(#Button_TestShortCut, 325, 395, 150, 30, "Test Shortcut")
		TextGadget(#Text_Params, 215, 105, 90, 25, "Parameter:")
		StringGadget(#String_Params, 310, 100, 280, 30, "")
		TextGadget(#Text_WorkingDir, 215, 140, 90, 25, "Working Dir:")
		StringGadget(#String_WorkingDir, 310, 135, 240, 30, "")
		ButtonGadget(#Button_BrowseWorkingDir, 555, 135, 35, 30, "...")
		TextGadget(#Text_ms, 550, 360, 35, 25, "ms")
		ButtonGadget(#Button_Apply, 220, 445, 125, 30, "Save Settings", #PB_Button_Default)
		
		GadgetToolTip(#String_Shortcut_Name,      "Initialize shortcut via '" + GetFilePart(ProgramFilename()) + " NAME' (don't use blanks here!)")
		GadgetToolTip(#String_Duration,           "Duration (in ms) of the G15/G19 showing the message on the display")
		GadgetToolTip(#String_Params,             "Enter parameters for the shortcut")
		GadgetToolTip(#String_ShowPicture,        "Select a picture as background image for the G15/G19 Display")
		GadgetToolTip(#String_WorkingDir,         "Enter working directory for the shortcut (if needed)")
		GadgetToolTip(#Editor_ShowText,           "First line will be the title (leave empty if you don't need a title), add html colors at the beginning of a line, e.g. black text: #000000Test")
		GadgetToolTip(#Button_BrowsePicture,      "Browse for a picture")
		GadgetToolTip(#Button_BrowseShortcut,     "Browse for the application you want to start")
		GadgetToolTip(#Button_BrowseWorkingDir,   "Browse for the working directory")
		GadgetToolTip(#Button_TestShortCut,       "Test your entered data")
		GadgetToolTip(#ButtonImage_Add,           "Add a new shortcut")
		GadgetToolTip(#ButtonImage_Delete,        "Delete selected shortcut")
		GadgetToolTip(#Tree_Shortcuts,            "Here are all of your shortcuts")

		BindGadgetEvent(#ButtonImage_Add,         @GadgetEvent_AddShortCut())
		BindGadgetEvent(#ButtonImage_Delete,      @GadgetEvent_DelShortCut())
		BindGadgetEvent(#Button_Apply,            @GadgetEvent_Apply())
		BindGadgetEvent(#String_Shortcut_Name,    @GadgetEvent_ChangeName(),    #PB_EventType_Change)
		BindGadgetEvent(#String_Shortcut,         @GadgetEvent_StringChanged(), #PB_EventType_Change)
		BindGadgetEvent(#String_ShowPicture,      @GadgetEvent_StringChanged(), #PB_EventType_Change)
		BindGadgetEvent(#String_Duration,         @GadgetEvent_StringChanged(), #PB_EventType_Change)
		BindGadgetEvent(#Editor_ShowText,         @GadgetEvent_StringChanged(), #PB_EventType_Change)
		BindGadgetEvent(#String_Params,           @GadgetEvent_StringChanged(), #PB_EventType_Change)
		BindGadgetEvent(#String_WorkingDir,       @GadgetEvent_StringChanged(), #PB_EventType_Change)
		BindGadgetEvent(#Tree_Shortcuts,          @GadgetEvent_Tree(),          #PB_EventType_Change)
		BindGadgetEvent(#Button_BrowseWorkingDir, @GadgetEvent_BrowseWorkingDir())
		BindGadgetEvent(#Button_BrowsePicture,    @GadgetEvent_BrowsePicture())
		BindGadgetEvent(#Button_BrowseShortcut,   @GadgetEvent_BrowseShortCut())
		BindGadgetEvent(#Button_TestShortCut,     @GadgetEvent_TestShortcut())
		
		i = 0
		ForEach SC()
			AddGadgetItem(#Tree_Shortcuts, -1, SC()\Name)
			SetGadgetItemData(#Tree_Shortcuts, i, @SC())
			i + 1
		Next
		
		DisableGadgets()
		
		Repeat
		Until WaitWindowEvent() = #PB_Event_CloseWindow
		
	EndIf
	
	
EndProcedure

main()

End
DataSection
	;Both images from:
	;http://www.famfamfam.com/lab/icons/silk/
	Img_Add:
	Data.l $474E5089, $0A1A0A0D, $0D000000, $52444849, $10000000, $10000000, $00000608, $FFF31F00
	Data.l $00000061, $4D416704, $AF000041, $8A0537C8, $000000E9, $58457419, $666F5374, $72617774
	Data.l $64410065, $2065626F, $67616D49, $61655265, $C9717964, $00003C65, $44496F02, $CB385441
	Data.l $4BEB93A5, $87186193, $2FB65BFD, $86A48305, $29A82859, $6F285825, $8A8A6CD9, $7396DB4E
	Data.l $F6CE8A6B, $BA9D2E6E, $9D2D03CD, $B5150F13, $A468DBA1, $C30F383B, $D4E26603, $EBEA45D2
	Data.l $228DA250, $AFC36A08, $4D15DEBF, $1E88CB47, $E0797DF8, $BEE79EBA, $0024EFB9, $DF93FF49
	Data.l $75D3742E, $848F0ECC, $A889756C, $584109E6, $DC3AA2FE, $9282BCF0, $D148CB5A, $44F33168
	Data.l $4A5A6E81, $424A4FB4, $B17BD6CF, $FF845A1A, $3FD606F3, $603260AD, $0353D287, $E21389BE
	Data.l $244EB93D, $C584FC14, $3B3DE991, $61EDBE0E, $260B83F6, $778F106A, $9BEFB00C, $0E71F4B0
	Data.l $4A1905DA, $DC23F247, $4E223CC1, $32929DA0, $DEE83868, $EBEF60B5, $F5B78636, $81D6B878
	Data.l $0C2B5F6E, $FCFA1D7E, $B66F745A, $07607DC0, $D0A211E9, $D0582578, $0988CD9B, $BFD15868
	Data.l $2FBBC6AC, $7D8BF49B, $42D2DDE8, $5F894AF3, $8326BD47, $C508517C, $FB9C2D72, $C91CDC36
	Data.l $0C83DE41, $E2D04C45, $015CA1AC, $3355FD1B, $6855573A, $3643915B, $04098A2B, $661A2E36
	Data.l $2A9D20CA, $1D1BC0C6, $B8CD4BF4, $C5469DDC, $FE718A04, $0BBDF7A1, $34756FFD, $1D3F84DC
	Data.l $141164F1, $FC587CF3, $A5D2C8C3, $4D04C61E, $44E1DE76, $0DDA0C60, $FD5F2A12, $5BD20289
	Data.l $087FAB0D, $23EC1DE9, $9CADBD41, $30B4FA32, $F4D0696C, $7CF10852, $1BD67805, $77346071
	Data.l $FBF45C3D, $DEF2E8D4, $F27505C3, $B1E20951, $2B6DC512, $02C04701, $24257CD9, $351FD2DE
	Data.l $9C88171F, $8BB9D41C, $E335D8E1, $D82A4F52, $4D4759F7, $188B9A14, $830B4F55, $718047A4
	Data.l $B0D6346A, $8CEB5828, $31730A26, $1DC263B1, $1C28ADCB, $669E564C, $F9520DC4, $64A202A3
	Data.l $D1A46AE8, $2D270951, $41DAFA31, $3E4154CE, $6AE30955, $2C341C1B, $56C070B4, $4C3422B1
	Data.l $CE651C24, $18412E40, $03F94272, $2059E899, $806D7E61, $8D00C379, $5D5911B7, $74385129
	Data.l $4CB84E1C, $CC99F4D7, $32749EDC, $9522F3BB, $A70949A1, $9F0D9FB5, $9D433D6F, $64C8B153
	Data.l $5FE629E5, $F35FF1B7, $CB46411D, $D328001F, $000000C1, $4E454900, $6042AE44
	Data.b $82
	Img_Delete:
	Data.l $474E5089, $0A1A0A0D, $0D000000, $52444849, $10000000, $10000000, $00000608, $FFF31F00
	Data.l $00000061, $4D416704, $AF000041, $8A0537C8, $000000E9, $58457419, $666F5374, $72617774
	Data.l $64410065, $2065626F, $67616D49, $61655265, $C9717964, $00003C65, $44495D02, $CB385441
	Data.l $4BFB93A5, $C7186153, $1FB65BFD, $6E8904A2, $50518484, $7732F398, $A6DCDAD6, $8F4CB3CE
	Data.l $69622C5B, $9A619D8E, $5CC58D41, $A5A843F8, $5FCAD576, $946C4D32, $D76A465A, $F2B1E5A1
	Data.l $6A4D4ED2, $6BB39E6D, $60B9B7CA, $7A232E26, $CBCBFBE1, $3CBCF9FB, $0293CF0F, $B27FE520
	Data.l $AF5662E6, $1550CE17, $1954F7E6, $B925A533, $7B86AD49, $7199AA47, $95766952, $0AEB85C8
	Data.l $E27A74E6, $DFB14523, $0784361C, $19BC889D, $08646445, $CC0EDDFC, $AAF14A1A, $AB9F6090
	Data.l $C15244C5, $4E5D3C32, $3BB70BF1, $16F534B0, $883BBED1, $6D11DBB6, $371F873E, $DC38B09B
	Data.l $80C98F07, $FF366551, $AC499E4C, $74E8CC12, $E6EC1882, $8963B7AE, $F17A2171, $0B767C0C
	Data.l $846AB6FC, $6910582F, $9EB611A0, $0DDEF840, $31251DCC, $FB9F687C, $208F6CB1, $F4C18821
	Data.l $8B19AD7C, $8FF8B1AE, $EF0D0721, $75822359, $4EE155BA, $5D770892, $0CBCCBC1, $E833480C
	Data.l $7503E084, $5D740984, $19B3B445, $BE256B3E, $66934916, $6F0492A1, $52C781AB, $3A448785
	Data.l $E5301093, $7EE460DA, $0B0EA217, $F80DA77C, $7228F1D3, $E10AA5E0, $33846E6F, $2130476F
	Data.l $828B2498, $8456CEA1, $9E080DEB, $30575B2A, $BF82AA5F, $E2FD11A9, $89822B2D, $B5E31512
	Data.l $A76420D6, $C7571DC1, $328D261F, $135ABE0F, $F4464D66, $4A56D289, $69CB1570, $B0422646
	Data.l $AD3E0DB3, $C952DE0C, $6795981A, $20902D83, $43097ED0, $CDE86DE2, $C4D2B4DA, $C15245D7
	Data.l $9EE10D0B, $7020D0AB, $B0DE35AB, $17F89579, $2B05C8A8, $3132C18B, $8C16B6F8, $61974B17
	Data.l $A368B777, $8D20D560, $2310E415, $F4FC038A, $D7021561, $9EBDF15A, $E2548786, $6F015AB3
	Data.l $E5FC199D, $F3A84C16, $CA9593D1, $E92260C7, $EF953F28, $DC1C9E27, $764A8ECB, $11B54BE1
	Data.l $F1F386DE, $863AAA7C, $975B3947, $3877F661, $4A0D32E9, $C4070B77, $B12766E9, $BF907993
	Data.l $6D17EB9D, $D3737AE6, $54EC9E98, $06E67773, $F1B75FE1, $1D13F35F, $49B9CED2, $00FE1B72
	Data.l $49000000, $AE444E45
	Data.b $42, $60, $82
EndDataSection
Zuletzt geändert von HeX0R am 31.05.2018 15:32, insgesamt 1-mal geändert.
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Logitech G15/G19 Shortcut Tool

Beitrag von Bisonte »

Und an dieser Stelle muss ich wieder dein HTTP_Include loben :allright:
PureBasic 6.04 LTS (Windows x86/x64) | Windows10 Pro x64 | Asus TUF X570 Gaming Plus | R9 5900X | 64GB RAM | GeForce RTX 3080 TI iChill X4 | HAF XF Evo | build by vannicom​​
Antworten