Logitech G15 u. G19 EasyAccess

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
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 u. G19 EasyAccess

Beitrag von HeX0R »

Ich habe mal mein altes Include an das aktuelle SDK angepasst.
Es sollte theoretisch sogar möglich sein eine G15 UND eine G19 gleichzeitig anzusprechen (wer immer sowas braucht...)

Code: Alles auswählen

;/---------------------------------
;|
;| G15_G19.pbi V2.00
;|
;| Main Include for playing with
;| the Logitech G15/G19 Keyboard-Display
;|
;|
;| lglcd.h (c)Logitech,
;| G15_G19.pbi (PB-Version) (c)HeX0R 2010-2016
;|                             SoS   2010
;|
;| You can support both Keyboard-Displays with this one.
;/---------------------------------

#LOGI_LCD_TYPE_MONO           = $00000001
#LOGI_LCD_TYPE_COLOR          = $00000002


#LOGI_LCD_MONO_BUTTON_0       = $00000001
#LOGI_LCD_MONO_BUTTON_1       = $00000002
#LOGI_LCD_MONO_BUTTON_2       = $00000004
#LOGI_LCD_MONO_BUTTON_3       = $00000008

#LOGI_LCD_COLOR_BUTTON_LEFT   = $00000100
#LOGI_LCD_COLOR_BUTTON_RIGHT  = $00000200
#LOGI_LCD_COLOR_BUTTON_OK     = $00000400
#LOGI_LCD_COLOR_BUTTON_CANCEL = $00000800
#LOGI_LCD_COLOR_BUTTON_UP     = $00001000
#LOGI_LCD_COLOR_BUTTON_DOWN   = $00002000
#LOGI_LCD_COLOR_BUTTON_MENU   = $00004000

#LOGI_LCD_MONO_WIDTH          = 160
#LOGI_LCD_MONO_HEIGHT         = 43

#LOGI_LCD_COLOR_WIDTH         = 320
#LOGI_LCD_COLOR_HEIGHT        = 240

DeclareModule LOGILCD

	#LOGI_LCD_TYPE_MONO           = $00000001
	#LOGI_LCD_TYPE_COLOR          = $00000002


	#LOGI_LCD_MONO_BUTTON_0       = $00000001
	#LOGI_LCD_MONO_BUTTON_1       = $00000002
	#LOGI_LCD_MONO_BUTTON_2       = $00000004
	#LOGI_LCD_MONO_BUTTON_3       = $00000008

	#LOGI_LCD_COLOR_BUTTON_LEFT   = $00000100
	#LOGI_LCD_COLOR_BUTTON_RIGHT  = $00000200
	#LOGI_LCD_COLOR_BUTTON_OK     = $00000400
	#LOGI_LCD_COLOR_BUTTON_CANCEL = $00000800
	#LOGI_LCD_COLOR_BUTTON_UP     = $00001000
	#LOGI_LCD_COLOR_BUTTON_DOWN   = $00002000
	#LOGI_LCD_COLOR_BUTTON_MENU   = $00004000

	#LOGI_LCD_MONO_WIDTH          = 160
	#LOGI_LCD_MONO_HEIGHT         = 43

	#LOGI_LCD_COLOR_WIDTH         = 320
	#LOGI_LCD_COLOR_HEIGHT        = 240

	Declare Init(AppName.s, lcdType = #LOGI_LCD_TYPE_COLOR)
	Declare IsConnected(lcdType     = #LOGI_LCD_TYPE_COLOR)
	Declare IsButtonPressed(button)
	Declare Update()
	Declare Shutdown()
	Declare SetText(Text.s, Line, Color = #White, Type = #LOGI_LCD_TYPE_COLOR)
	Declare SetTitle(Text.s, Color)
	Declare SetBackgroundImage(Image, Type = #LOGI_LCD_TYPE_COLOR, AutoUpdate = #False)
	Declare AddKeyboardWatcher(Window, WindowEvent)


EndDeclareModule

Module LOGILCD

	Structure lgLcdBitmap
		bmp_color.l[#LOGI_LCD_COLOR_WIDTH * #LOGI_LCD_COLOR_HEIGHT]
	EndStructure

	Structure WATCHERDATA
		Window.i
		WindowEvent.i
	EndStructure
	
	PrototypeC.i LogiLcdInit(friendlyName.p-unicode, lcdType)
	PrototypeC.i LogiLcdIsConnected(lcdType)
	PrototypeC.i LogiLcdIsButtonPressed(button)
	PrototypeC LogiLcdUpdate()
	PrototypeC LogiLcdShutdown()
	PrototypeC.i LogiLcdMonoSetBackground(*monoBitmap)
	PrototypeC.i LogiLcdMonoSetText(lineNumber, text.p-unicode)
	PrototypeC.i LogiLcdColorSetBackground(*colorBitmap)
	PrototypeC.i LogiLcdColorSetTitle(text.p-unicode, red, green, blue)
	PrototypeC.i LogiLcdColorSetText(lineNumber, text.p-unicode, red, green, blue)

	Global LogiLcdInit.LogiLcdInit
	Global LogiLcdIsConnected.LogiLcdIsConnected
	Global LogiLcdIsButtonPressed.LogiLcdIsButtonPressed
	Global LogiLcdUpdate.LogiLcdUpdate
	Global LogiLcdShutdown.LogiLcdShutdown
	Global LogiLcdMonoSetBackground.LogiLcdMonoSetBackground
	Global LogiLcdMonoSetText.LogiLcdMonoSetText
	Global LogiLcdColorSetBackground.LogiLcdColorSetBackground
	Global LogiLcdColorSetTitle.LogiLcdColorSetTitle
	Global LogiLcdColorSetText.LogiLcdColorSetText
	

	Global IsInitialized, ThreadID, EndThread, MyWindow, MyWindowEvent, LastButtons, DLL

	Macro IsDLLLoaded
		If DLL = 0
			ProcedureReturn #False
		EndIf
	EndMacro
	
	Procedure.s GetDLLPath()
		Protected Result.s, PATH.s, hKey, lpcbData, *lpData, lpType
	
		CompilerIf #PB_Compiler_Processor = #PB_Processor_x86
			PATH = "SOFTWARE\Classes\WOW6432Node\CLSID\{d0e790a5-01a7-49ae-ae0b-e986bdd0c21b}\ServerBinary"
		CompilerElse
			PATH = "SOFTWARE\Classes\CLSID\{d0e790a5-01a7-49ae-ae0b-e986bdd0c21b}\ServerBinary"
		CompilerEndIf
	
		If RegOpenKeyEx_(#HKEY_LOCAL_MACHINE, PATH, 0, #KEY_READ, @hKey) = #ERROR_SUCCESS
			If RegQueryValueEx_(hKey, "", 0, 0, 0, @lpcbData) = #ERROR_SUCCESS
				*lpData = AllocateMemory(lpcbData)
				If *lpData
					If RegQueryValueEx_(hKey, "", 0, @lpType, *lpData, @lpcbData) = #ERROR_SUCCESS
						Result = PeekS(*lpData)
					EndIf
					FreeMemory(*lpData)
				EndIf
			EndIf
			RegCloseKey_(hKey)
		EndIf
	
		ProcedureReturn Result
	EndProcedure
	
	Procedure Init(AppName.s, lcdType = #LOGI_LCD_TYPE_COLOR)
		Protected PATH2DLL.s
		
		If DLL
			CloseLibrary(DLL)
		EndIf
		
		PATH2DLL = GetDLLPath()
		If PATH2DLL = ""
			ProcedureReturn #False
		EndIf
		
		DLL = OpenLibrary(#PB_Any, PATH2DLL)
		If DLL = 0
			ProcedureReturn #False
		EndIf
		
		LogiLcdInit               = GetFunction(DLL, "LogiLcdInit")
		LogiLcdIsConnected        = GetFunction(DLL, "LogiLcdIsConnected")
		LogiLcdIsButtonPressed    = GetFunction(DLL, "LogiLcdIsButtonPressed")
		LogiLcdUpdate             = GetFunction(DLL, "LogiLcdUpdate")
		LogiLcdShutdown           = GetFunction(DLL, "LogiLcdShutdown")
		LogiLcdMonoSetBackground  = GetFunction(DLL, "LogiLcdMonoSetBackground")
		LogiLcdMonoSetText        = GetFunction(DLL, "LogiLcdMonoSetText")
		LogiLcdColorSetBackground = GetFunction(DLL, "LogiLcdColorSetBackground")
		LogiLcdColorSetTitle      = GetFunction(DLL, "LogiLcdColorSetTitle")
		LogiLcdColorSetText       = GetFunction(DLL, "LogiLcdColorSetText")
		
		If LogiLcdInit = 0 Or LogiLcdIsConnected = 0 Or LogiLcdIsButtonPressed = 0 Or LogiLcdUpdate = 0 Or LogiLcdShutdown = 0
			CloseLibrary(DLL)
			DLL = #False
			ProcedureReturn #False
		ElseIf LogiLcdMonoSetBackground = 0 Or LogiLcdMonoSetText = 0 Or LogiLcdColorSetBackground = 0 Or LogiLcdColorSetTitle = 0 Or LogiLcdColorSetText = 0
			CloseLibrary(DLL)
			DLL = #False
			ProcedureReturn #False
		EndIf
		
		If LogiLcdInit(AppName, lcdType)
			IsInitialized = lcdType
			ProcedureReturn #True
		EndIf
		ProcedureReturn #False
	EndProcedure

	Procedure IsConnected(lcdType = #LOGI_LCD_TYPE_COLOR)
		
		IsDLLLoaded
		ProcedureReturn LogiLcdIsConnected(lcdType)
	EndProcedure

	Procedure IsButtonPressed(button)
		
		IsDLLLoaded
		ProcedureReturn LogiLcdIsButtonPressed(button)
	EndProcedure

	Procedure KeyboardWatcher(Dummy)
		Protected PressedButtons, i, j

		While EndThread = #False
			PressedButtons = 0
			j              = 1
			For i = 1 To 4
				If LogiLcdIsButtonPressed(j)
					PressedButtons | j
					If LastButtons & j = 0
						;this one is new so send a message
						PostEvent(MyWindowEvent, MyWindow, #False, #False, j)
					EndIf
				EndIf
				j << 1
			Next i
			j = $100
			For i = 1 To 7
				If LogiLcdIsButtonPressed(j)
					PressedButtons | j
					If LastButtons & j = 0
						;this one is new so send a message
						PostEvent(MyWindowEvent, MyWindow, #False, #False, j)
					EndIf
				EndIf
				j << 1
			Next i

			LastButtons = PressedButtons
			Delay(5)
		Wend
	EndProcedure

	Procedure AddKeyboardWatcher(Window, WindowEvent)
		
		IsDLLLoaded
		If ThreadID And IsThread(ThreadID)
			EndThread = #True
			WaitThread(ThreadID)
		EndIf
		
		LastButtons   = 0
		EndThread     = #False
		MyWindow      = Window
		MyWindowEvent = WindowEvent
		ThreadID      = CreateThread(@KeyboardWatcher(), 0)
		ProcedureReturn ThreadId
	EndProcedure

	Procedure Update()
		IsDLLLoaded
		LogiLcdUpdate()
	EndProcedure

	Procedure Shutdown()
		If ThreadId And IsThread(ThreadID)
			EndThread = #True
			WaitThread(ThreadID)
		EndIf
		ThreadID = 0
		If DLL
			LogiLcdShutdown()
			CloseLibrary(DLL)
			DLL = #False
		EndIf
		IsInitialized = #Null
		
	EndProcedure

	Procedure SetText(Text.s, Line, Color = #White, Type = #LOGI_LCD_TYPE_COLOR)
		Protected Result = 0
		
		IsDLLLoaded
		If Type & #LOGI_LCD_TYPE_COLOR And IsConnected(#LOGI_LCD_TYPE_COLOR)
			Result + LogiLcdColorSetText(Line, Text, Red(Color), Green(Color), Blue(Color))
		EndIf
		If Type & #LOGI_LCD_TYPE_MONO And IsConnected(#LOGI_LCD_TYPE_MONO)
			Result + LogiLcdMonoSetText(Line, Text)
		EndIf

		ProcedureReturn Result
	EndProcedure

	Procedure SetTitle(Text.s, Color)
		Protected Result

		IsDLLLoaded
		If IsInitialized
			If IsConnected(#LOGI_LCD_TYPE_COLOR)
				Result = LogiLcdColorSetTitle(Text, Red(Color), Green(Color), Blue(Color))
			EndIf
		EndIf

		ProcedureReturn Result
	EndProcedure

	Procedure SetBackgroundImage(Image.i, Type = #LOGI_LCD_TYPE_COLOR, AutoUpdate = #False)

		IsDLLLoaded
		Protected w, h, i, k, Result, hDC, *bmi.BITMAPINFO, *bitmap.lgLcdBitmap, *L.LONG, IsColor, Img, DoLoops
		;/--------------
		;| This Procedure will check if the ImageSize is o.k.,
		;| otherwise will resize it to fit the display.
		;| Then the image will be sent to the G15 or G19 display
		;| (with the given Priority)
		;| Easiest is to use only 32 Bit Images.
		;|
		;/--------------

		If IsImage(Image) = 0 Or IsInitialized = #Null
			ProcedureReturn #False
		EndIf

		*bitmap = AllocateMemory(SizeOf(lgLcdBitmap))
		If *bitmap = #Null
			ProcedureReturn #ERROR_NOT_ENOUGH_MEMORY
		EndIf

		w = ImageWidth(Image)
		h = ImageHeight(Image)
		
		DoLoops = 1
		If Type = #LOGI_LCD_TYPE_COLOR | #LOGI_LCD_TYPE_MONO And IsConnected(#LOGI_LCD_TYPE_COLOR | #LOGI_LCD_TYPE_MONO) = #LOGI_LCD_TYPE_COLOR | #LOGI_LCD_TYPE_MONO
			;picture should be send to both and both are really connected!
			DoLoops = 2
		EndIf
		
		Repeat
			If Type & #LOGI_LCD_TYPE_COLOR And IsConnected(#LOGI_LCD_TYPE_COLOR)
				IsColor = #True
				If w > #LOGI_LCD_COLOR_WIDTH
					w = #LOGI_LCD_COLOR_WIDTH
					h = h * #LOGI_LCD_COLOR_WIDTH / ImageWidth(Image)
					If h > #LOGI_LCD_COLOR_HEIGHT
						h = #LOGI_LCD_COLOR_HEIGHT
						w = w * #LOGI_LCD_COLOR_HEIGHT / ImageHeight(Image)
					EndIf
				ElseIf h > #LOGI_LCD_COLOR_HEIGHT
					h = #LOGI_LCD_COLOR_HEIGHT
					w = w * #LOGI_LCD_COLOR_HEIGHT / ImageHeight(Image)
					If w > #LOGI_LCD_COLOR_WIDTH
						w = #LOGI_LCD_COLOR_WIDTH
						h = h * #LOGI_LCD_COLOR_WIDTH / ImageWidth(Image)
					EndIf
				EndIf
			ElseIf Type & #LOGI_LCD_TYPE_MONO And IsConnected(#LOGI_LCD_TYPE_MONO)
				If w > #LOGI_LCD_MONO_WIDTH
					w = #LOGI_LCD_MONO_WIDTH
					h = h * #LOGI_LCD_MONO_WIDTH / ImageWidth(Image)
					If h > #LOGI_LCD_MONO_HEIGHT
						h = #LOGI_LCD_MONO_HEIGHT
						w = w * #LOGI_LCD_MONO_HEIGHT / ImageHeight(Image)
					EndIf
				ElseIf h > #LOGI_LCD_MONO_HEIGHT
					h = #LOGI_LCD_MONO_HEIGHT
					w = w * #LOGI_LCD_MONO_HEIGHT / ImageHeight(Image)
					If w > #LOGI_LCD_MONO_WIDTH
						w = #LOGI_LCD_MONO_WIDTH
						h = h * #LOGI_LCD_MONO_WIDTH / ImageWidth(Image)
					EndIf
				EndIf
			Else
				Break
			EndIf
			If w <> ImageWidth(Image) Or h <> ImageHeight(Image)
				Img = CopyImage(Image, #PB_Any)
				ResizeImage(Img, w, h)
			Else
				Img = Image
			EndIf

			hDC = StartDrawing(ImageOutput(Img))

			If hDC
				*bmi = AllocateMemory(SizeOf(BITMAPINFO) + 255 * SizeOf(RGBQUAD))
				If *bmi
					*bmi\bmiHeader\biSize        = SizeOf(BITMAPINFOHEADER)
					*bmi\bmiheader\biWidth       =  w
					*bmi\bmiheader\biHeight      = - h
					*bmi\bmiheader\biPlanes      = 1
					*bmi\bmiheader\biCompression = #BI_RGB
					If IsColor
						*bmi\bmiheader\biBitCount = 32
						Result                    = GetDIBits_(hDC, ImageID(Img), 0, h, *bitmap, *bmi, #DIB_RGB_COLORS)
					Else
						*bmi\bmiheader\biBitCount = 8
						Result                    = GetDIBits_(hDC, ImageID(Img), 0, h, *bitmap, *bmi, #DIB_RGB_COLORS)
						;Swap Colors for G15
						;(G15 shows black, when color = white and vice versa)
						*L = *bitmap
						For i = 0 To (#LOGI_LCD_MONO_WIDTH * #LOGI_LCD_MONO_HEIGHT) / 4
							*L\l = *L\l ! $FFFFFFFF
							*L + 4
						Next i
					EndIf
					If Result
						If IsColor
							Result = LogiLcdColorSetBackground(*bitmap)
						Else
							Result = LogiLcdMonoSetBackground(*bitmap)
						EndIf
					EndIf
					FreeMemory(*bmi)
				EndIf
				StopDrawing()
			EndIf
			FreeMemory(*bitmap)
			If Img <> Image
				FreeImage(Img)
			EndIf
			DoLoops - 1
			Type & #LOGI_LCD_TYPE_MONO
		Until DoLoops = 0
			
		If AutoUpdate
			Update()
		EndIf

		ProcedureReturn Result
	EndProcedure

EndModule


CompilerIf #PB_Compiler_IsMainFile
	
	#MY_EVENT = #PB_Event_FirstCustomValue
	Procedure main()
		Protected Text$
		
		OpenWindow(0, 0, 0, 300, 200, "Logitech Test", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
		EditorGadget(0, 5, 5, 290, 180, #PB_Editor_ReadOnly)
		AddGadgetItem(0, -1, "Press a Button")
		
		If LOGILCD::Init("MYTEST", #LOGI_LCD_TYPE_COLOR | #LOGI_LCD_TYPE_MONO)
			LOGILCD::SetTitle("Hello World", #Green)
			LOGILCD::SetText("Button Test", 0, #Blue, #LOGI_LCD_TYPE_COLOR | #LOGI_LCD_TYPE_MONO)
			LOGILCD::Update()
			LOGILCD::AddKeyboardWatcher(0, #MY_EVENT)
			
			Repeat
				Select WaitWindowEvent()
					Case #PB_Event_CloseWindow
						Break
					Case #MY_EVENT
						Select EventData()
							Case #LOGI_LCD_COLOR_BUTTON_LEFT
								Text$ = "LEFT Button pressed!"
							Case #LOGI_LCD_COLOR_BUTTON_DOWN
								Text$ = "DOWN Button pressed!"
							Case #LOGI_LCD_COLOR_BUTTON_RIGHT
								Text$ = "RIGHT Button pressed!"
							Case #LOGI_LCD_COLOR_BUTTON_UP
								Text$ = "UP Button pressed!"
							Case #LOGI_LCD_COLOR_BUTTON_OK
								Text$ = "OK Button pressed!"
							Case #LOGI_LCD_COLOR_BUTTON_CANCEL
								Text$ = "CANCEL Button pressed!"
							Case #LOGI_LCD_COLOR_BUTTON_MENU
								Text$ = "MENU Button pressed!"
							Case #LOGI_LCD_MONO_BUTTON_0
								Text$ = "Button 0 pressed!"
							Case #LOGI_LCD_MONO_BUTTON_1
								Text$ = "Button 1 pressed!"
							Case #LOGI_LCD_MONO_BUTTON_2
								Text$ = "Button 2 pressed!"
							Case #LOGI_LCD_MONO_BUTTON_3
								Text$ = "Button 3 pressed!"
						EndSelect
						If Text$
							AddGadgetItem(0, -1, Text$)
							LOGILCD::SetText(Text$, 1, $0000FF)
						EndIf
						LOGILCD::Update()
				EndSelect
			ForEver
	
			LOGILCD::Shutdown()
		EndIf
	EndProcedure

	main()
	
CompilerEndIf
[Edit 11.11.2010]
SoS's Verbesserung eingefügt.
Kommentare eingepflegt.

[Edit 12.11.2010]
2. Verbesserung von SoS eingepflegt, Beispiel ein wenig geändert.

[Edit 12.12.2010]
Beispiel leicht verändert, auch um die G15_G19_Devel.pbi zu unterstützen.
Haupt-Include unverändert.

[Edit 11.02.2011]
Import für x64 geändert, Libs müssen nun in Unterordnern x86, bzw. x64 sein.
Ausserdem noch einen kleinen Bug behoben.

[Edit 28.05.2016]
Auf Module umgebastelt.
Zuletzt geändert von HeX0R am 19.11.2018 16:56, insgesamt 7-mal geändert.
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Re: Logitech G15 u. G19 EasyAccess

Beitrag von SoS »

Hab mal Dein include verarbeitet und läuft prima. :D
Der Imageconverter läuft zwar mit der G15 und G19,ist aber nur für die G15 gedacht (bzw für andere 1Bit LCD's).

Habe nur eine Kleinigkeit geändert.

Code: Alles auswählen

   If hDC
      *bmi = AllocateMemory(SizeOf(BITMAPINFO) + 255 * SizeOf(RGBQUAD))
      If *bmi
         *bmi\bmiHeader\biSize        = SizeOf(BITMAPINFOHEADER)
         *bmi\bmiheader\biWidth       =  w
         *bmi\bmiheader\biHeight      = - h
         *bmi\bmiheader\biPlanes      = 1
         *bmi\bmiheader\biCompression = #BI_RGB
         
        If *G15\ctxo\deviceType = #LGLCD_DEVICE_QVGA
         *bmi\bmiheader\biBitCount    = 32 ; muss 32 bit sein bei der G19
         
            Result = GetDIBits_(hDC, ImageID(Image), 0, h, *bitmap + OffsetOf(lgLcdBitmap\bmp_qvga32), *bmi, #DIB_RGB_COLORS)
          Else
         *bmi\bmiheader\biBitCount    = d
         *Buffer = AllocateMemory(w * h * (d / 8))
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:

Re: Logitech G15 u. G19 EasyAccess

Beitrag von HeX0R »

Danke, habe ich gleich mal oben übernommen (Wobei ich eh schrieb: am besten immer 32Bit nehmen).
Bei der Gelegenheit noch jede Menge Kommentare eingepflanzt, die das ganze etwas transparenter machen sollte.
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:

Re: Logitech G15 u. G19 EasyAccess

Beitrag von HeX0R »

Habe von SoS eine ziemliche Vereinfachung der Bildumwandlung bekommen und natürlich auch eingebaut.
Hätte ich auch selbst drauf kommen können *gegenstirnklatsch*.

Vielen Dank!
Benutzeravatar
SoS
Beiträge: 340
Registriert: 29.08.2004 09:31
Kontaktdaten:

Re: Logitech G15 u. G19 EasyAccess

Beitrag von SoS »

HeX0R hat geschrieben: Hätte ich auch selbst drauf kommen können *gegenstirnklatsch*.
Ich bin auch nur über das Bytearray gestolpert und dachte nur "das muss auch anders gehen" . :mrgreen:
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:

Re: Logitech G15 u. G19 EasyAccess

Beitrag von HeX0R »

Ich habe mich noch aufgerafft eine G15_G19_Devel.pbi zu machen.
Es war einfach irgendwie unpraktisch, dass man nicht gesehen hat, wie denn die eigene Applikation
auf einer G19 (oder umgekehrt) aussehen würde.

Also kann man nun einfach diese Include anstatt der anderen aufrufen (sie benutzt allerdings die andere,
also müssen beide im selben Verzeichnis sein) und sieht dann ein entsprechendes simuliertes Fensterchen.

Das ist also nur ein Helferchen bei der Entwicklung, später sollte man nur noch die Original-Include einbinden.

Das Beispiel oben habe ich auch leicht verändert.

G15_G19_Devel.pbi

Code: Alles auswählen

;/---------------------------------
;|
;| G15_G19_Devel.pbi V1.01 [16.12.2010]
;|
;| With this include you should be able to simulate logitechs lcd.
;|
;| If you want to know, how your multi-lcd-support-app
;| looks like on another lcd, use this include.
;|
;| !!G15_G19.pbi REQUIRED!!
;|
;| Usage:
;| For simulating a G15 use:
;|
;| #LGLCD_SIMULATE_KEYBOARD = 1
;| XIncludeFile "G15_G19_Devel.pbi"
;|
;| instead of
;| XIncludeFile "G15_G19.pbi"
;|
;|
;| For simulating a G19 use:
;| #LGLCD_SIMULATE_KEYBOARD = 2
;|
;|
;| This include is just meant to help you developing your apps.
;| When finished, you should change the XIncludeFile-Line above back
;| to the normal include.
;|
;| Or use it this way:
;|
;| CompilerIf #PB_Compiler_Debugger
;| #LGLCD_SIMULATE_KEYBOARD = 1
;| XIncludeFile "G15_G19_Devel.pbi"
;| CompilerElse
;| XIncludeFile "G15_G19.pbi"
;| CompilerEndif
;|
;| Then you only will use this include only when the debugger is enabled.
;|
;| (c)HeX0R 2010
;|
;/---------------------------------

#LGLCD_LCD_CONNECTED = $80000000

CompilerIf Defined(LGLCD_SIMULATE_KEYBOARD, #PB_Constant) = 0
;If nothing has been defined, use G19 Simulation
#LGLCD_SIMULATE_KEYBOARD = 2
CompilerEndIf

CompilerIf #PB_Compiler_Thread = 0
CompilerError "Please enable Threadsave in compileroptions!"
CompilerEndIf

Declare lgLCDCreateExInterface(SimulatedLCD)

;-FIRST overwriting the original CreateInterface Procedure
Procedure lgLCDCreateInterface()
	ProcedureReturn lgLCDCreateExInterface(#LGLCD_SIMULATE_KEYBOARD)
EndProcedure

;-THEN Including original Include
;--------------------
XIncludeFile "G15_G19.pbi"
;--------------------

;-Extending original Structure, then those values will be added
; to the end of the structure and don't interfere with original interface-methods.
; (This means, we still can use any of the original procedures)
Structure _LGLCD_INTERFACE_EX_VALUES_ Extends _LGLCD_INTERFACE_VALUES_
	SimulateMode.i
	WindowID.i
	Buttons.i[8]
	Signals.i[8]
	*OriginalCallback
	*OriginalContext
	ImageGadget.i
	ImageID.i
	ThreadID.i
	PrevButtons.i
EndStructure

;-----Internal Procedures------
;{
Procedure _lgLcdOnSoftButtonsCB_internal(device.l, dwButtons.l, *G15._LGLCD_INTERFACE_EX_VALUES_)
	Protected CB.lgLcdOnSoftButtonsCB

	If *G15\WindowID

		;-G15 Buttons
		If dwButtons & #LGLCDBUTTON_BUTTON0
			SetGadgetText(*G15\Buttons[0], "< 1 >")
		ElseIf *G15\PrevButtons & #LGLCDBUTTON_BUTTON0
			SetGadgetText(*G15\Buttons[0], "1")
		EndIf

		If dwButtons & #LGLCDBUTTON_BUTTON1
			SetGadgetText(*G15\Buttons[1], "< 2 >")
		ElseIf *G15\PrevButtons & #LGLCDBUTTON_BUTTON1
			SetGadgetText(*G15\Buttons[1], "2")
		EndIf

		If dwButtons & #LGLCDBUTTON_BUTTON2
			SetGadgetText(*G15\Buttons[2], "< 3 >")
		ElseIf *G15\PrevButtons & #LGLCDBUTTON_BUTTON2
			SetGadgetText(*G15\Buttons[2], "3")
		EndIf

		If dwButtons & #LGLCDBUTTON_BUTTON3
			SetGadgetText(*G15\Buttons[3], "< 4 >")
		ElseIf *G15\PrevButtons & #LGLCDBUTTON_BUTTON3
			SetGadgetText(*G15\Buttons[3], "4")
		EndIf

		;-G19 Buttons
		If dwButtons & #LGLCDBUTTON_LEFT
			SetGadgetText(*G15\Buttons[0], "< « >")
		ElseIf *G15\PrevButtons & #LGLCDBUTTON_LEFT
			SetGadgetText(*G15\Buttons[0], "«")
		EndIf

		If dwButtons & #LGLCDBUTTON_RIGHT
			SetGadgetText(*G15\Buttons[1], "< » >")
		ElseIf *G15\PrevButtons & #LGLCDBUTTON_RIGHT
			SetGadgetText(*G15\Buttons[1], "»")
		EndIf

		If dwButtons & #LGLCDBUTTON_OK
			SetGadgetText(*G15\Buttons[2], "< OK >")
		ElseIf *G15\PrevButtons & #LGLCDBUTTON_OK
			SetGadgetText(*G15\Buttons[2], "OK")
		EndIf

		If dwButtons & #LGLCDBUTTON_CANCEL
			SetGadgetText(*G15\Buttons[3], "< C >")
		ElseIf *G15\PrevButtons & #LGLCDBUTTON_CANCEL
			SetGadgetText(*G15\Buttons[3], "C")
		EndIf

		If dwButtons & #LGLCDBUTTON_UP
			SetGadgetText(*G15\Buttons[4], "< /\ >")
		ElseIf *G15\PrevButtons & #LGLCDBUTTON_UP
			SetGadgetText(*G15\Buttons[4], "/\")
		EndIf

		If dwButtons & #LGLCDBUTTON_DOWN
			SetGadgetText(*G15\Buttons[5], "< \/ >")
		ElseIf *G15\PrevButtons & #LGLCDBUTTON_DOWN
			SetGadgetText(*G15\Buttons[5], "\/")
		EndIf

		If dwButtons & #LGLCDBUTTON_MENU
			SetGadgetText(*G15\Buttons[6], "< Menu >")
		ElseIf *G15\PrevButtons & #LGLCDBUTTON_MENU
			SetGadgetText(*G15\Buttons[6], "Menu")
		EndIf

	EndIf
	*G15\PrevButtons = dwButtons

	If *G15\OriginalCallback
		CB = *G15\OriginalCallback
		CB(*G15\ctxo\device, dwButtons, *G15\OriginalContext)
	EndIf
EndProcedure

Procedure _lgLcdOpenWindowLCD_internal(*G15._LGLCD_INTERFACE_EX_VALUES_)
	Protected i, CB.lgLcdOnSoftButtonsCB, EventG, IconID

	If *G15\SimulateMode & #LGLCD_DEVICE_BW
		*G15\WindowID = OpenWindow(#PB_Any, 434, 217, 330, 140, "LCD-Display Simulation",  #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_Invisible)

		If *G15\WindowID
			SmartWindowRefresh(*G15\WindowID, 1)
			*G15\ImageGadget = ImageGadget(#PB_Any, 5, 5, 320, 86, 0, #PB_Image_Border)
			*G15\Buttons[0]  = ButtonGadget(#PB_Any, 25, 110, 40, 20, "1")
			*G15\Signals[0]  = #LGLCDBUTTON_BUTTON0
			*G15\Buttons[1]  = ButtonGadget(#PB_Any, 80, 110, 40, 20, "2")
			*G15\Signals[1]  = #LGLCDBUTTON_BUTTON1
			*G15\Buttons[2]  = ButtonGadget(#PB_Any, 215, 110, 40, 20, "3")
			*G15\Signals[2]  = #LGLCDBUTTON_BUTTON2
			*G15\Buttons[3]  = ButtonGadget(#PB_Any, 270, 110, 40, 20, "4")
			*G15\Signals[3]  = #LGLCDBUTTON_BUTTON3
			*G15\Buttons[4]  = 0
			*G15\Buttons[5]  = 0
			*G15\Buttons[6]  = 0
		EndIf

	Else
		*G15\WindowID = OpenWindow(#PB_Any, 434, 217, 480, 247, "LCD-Display Simulation",  #PB_Window_SystemMenu | #PB_Window_ScreenCentered | #PB_Window_MinimizeGadget | #PB_Window_TitleBar | #PB_Window_Invisible)

		If *G15\WindowID
			SmartWindowRefresh(*G15\WindowID, 1)
			*G15\ImageGadget = ImageGadget(#PB_Any, 155, 2, 320, 240, 0, #PB_Image_Border)
			Frame3DGadget(#PB_Any, 4, 40, 142, 120, "LCD-Buttons")
			*G15\Buttons[0]  = ButtonGadget(#PB_Any, 55, 55, 40, 20, "/\")
			*G15\Signals[0]  = #LGLCDBUTTON_UP
			*G15\Buttons[1]  = ButtonGadget(#PB_Any, 10, 80, 40, 20, "«")
			*G15\Signals[1]  = #LGLCDBUTTON_LEFT
			*G15\Buttons[2]  = ButtonGadget(#PB_Any, 55, 80, 40, 20, "OK")
			*G15\Signals[2]  = #LGLCDBUTTON_OK
			*G15\Buttons[3]  = ButtonGadget(#PB_Any, 100, 80, 40, 20, "»")
			*G15\Signals[3]  = #LGLCDBUTTON_RIGHT
			*G15\Buttons[4]  = ButtonGadget(#PB_Any, 55, 105, 40, 20, "\/")
			*G15\Signals[4]  = #LGLCDBUTTON_DOWN
			*G15\Buttons[5]  = ButtonGadget(#PB_Any, 10, 130, 55, 20, "Menu")
			*G15\Signals[5]  = #LGLCDBUTTON_MENU
			*G15\Buttons[6]  = ButtonGadget(#PB_Any, 85, 130, 55, 20, "C")
			*G15\Signals[6]  = #LGLCDBUTTON_CANCEL

		EndIf

	EndIf

	If *G15\WindowID
		IconID = CatchImage(#PB_Any, ?LogitechIcon)
		If IconID
			SendMessage_(WindowID(*G15\WindowID), #WM_SETICON, #False, ImageID(IconID))
		EndIf

		If *G15\OriginalCallback
			CB = *G15\OriginalCallback
		EndIf

		HideWindow(*G15\WindowID, 0)

		Repeat
			Select WaitWindowEvent()
				Case #PB_Event_CloseWindow
					HideWindow(*G15\WindowID, 1)
				Case #WM_APP
					Break
				Case #PB_Event_Gadget
					If CB
						EventG = EventGadget()
						For i = 0 To 6
							If *G15\Buttons[i] And EventG = *G15\Buttons[i]
								CB(1, *G15\Signals[i], *G15)
								Break
							EndIf
						Next i
					EndIf
			EndSelect
		ForEver

	EndIf

	CloseWindow(*G15\WindowID)
	*G15\WindowID                                             = #Null
	*G15\ThreadID                                             = #Null
	*G15\ctxo\onSoftbuttonsChanged\softbuttonsChangedCallback = *G15\OriginalCallback
	*G15\OriginalCallback                                     = #Null
	If IsImage(IconID)
		FreeImage(IconID)
	EndIf

EndProcedure

Procedure _lglcdCreateBWImage_internal(Image)
	;/-------------
	;| Convert into black and white image
	;/-------------
	Protected *Buffer, A, x, y, w, h, C, P, *P.LONG

	If IsImage(Image)
		w = ImageWidth(Image)
		h = ImageHeight(Image)
		If ImageDepth(Image) = 32
			A  = 4
		Else
			A  = 3
		EndIf

		If StartDrawing(ImageOutput(Image))
			*Buffer = DrawingBuffer()
			P       = DrawingBufferPitch()
			For y = 0 To h - 1
				*P = *Buffer + (P * y)
				For x = 0 To w - 1
					C = *P\l >> 24 + (*P\l >> 16) & $FF + (*P\l >> 8) & $FF
					C = C / 3
					If C > 127
						*P\l = $FFFFFFFF
					Else
						*P\l = $FF000000
					EndIf
					*P + A
				Next x
			Next y
			StopDrawing()
		EndIf
	EndIf

EndProcedure
;}

;-------Interface-Procedures-------
;{
Procedure _lgLcdExSetImage(*G15._LGLCD_INTERFACE_EX_VALUES_, Image, Priority)
	Protected Result, w, h, wmax, hmax

	If *G15\SimulateMode & #LGLCD_LCD_CONNECTED
		Result = _lgLcdSetImage(*G15, Image, Priority)
	EndIf
	;Set Image to Window...
	If IsImage(Image)
		w = ImageWidth(Image)
		h = ImageHeight(Image)
		If *G15\ImageID <> -1
			FreeImage(*G15\ImageID)
		EndIf
		*G15\ImageID = CopyImage(Image, #PB_Any)

		If *G15\SimulateMode & #LGLCD_DEVICE_BW
			wmax = #LGLCD_BW_BMP_WIDTH
			hmax = #LGLCD_BW_BMP_HEIGHT
			_lglcdCreateBWImage_internal(*G15\ImageID)
		Else
			wmax = #LGLCD_QVGA_BMP_WIDTH
			hmax = #LGLCD_QVGA_BMP_HEIGHT
		EndIf
		If w > wmax
			w = wmax
			h = h * wmax / ImageWidth(*G15\ImageID)
			If h > hmax
				h = hmax
				w = w * hmax / ImageHeight(*G15\ImageID)
			EndIf
		ElseIf h > hmax
			h = hmax
			w = w * hmax / ImageHeight(*G15\ImageID)
			If w > wmax
				w = wmax
				h = h * wmax / ImageWidth(*G15\ImageID)
			EndIf
		EndIf
		If *G15\SimulateMode & #LGLCD_DEVICE_BW
			ResizeImage(*G15\ImageID, w * 2, h * 2)
		ElseIf w <> ImageWidth(Image) Or h <> ImageHeight(Image)
			ResizeImage(*G15\ImageID, w, h)
		EndIf
		SetGadgetState(*G15\ImageGadget, ImageID(*G15\ImageID))
	EndIf

	ProcedureReturn Result
EndProcedure

Procedure _lgLcdExConnect(*G15._LGLCD_INTERFACE_EX_VALUES_, AppName.s, isPersistent, isAutostartable, *softbuttonCallBack = #Null, *softbuttonContext = #Null, *notifyCallBack = #Null, *notifyContext = #Null, *configCallBack = #Null, *configContext = #Null, CapabilitiesToCheck = #LGLCD_APPLET_CAP_BW | #LGLCD_APPLET_CAP_QVGA)
	Protected Result

	*G15\OriginalCallback = *softbuttonCallBack
	*G15\OriginalContext  = *softbuttonContext
	*softbuttonCallBack   = @_lgLcdOnSoftButtonsCB_internal()
	*softbuttonContext    = *G15
	CapabilitiesToCheck   = *G15\SimulateMode & $FF
	Result                = _lgLcdConnect(*G15, AppName, isPersistent, isAutostartable, *softbuttonCallBack, *softbuttonContext, *notifyCallBack, *notifyContext, *configCallBack, *configContext, CapabilitiesToCheck)

	If Result = #ERROR_SUCCESS
		*G15\SimulateMode | #LGLCD_LCD_CONNECTED
	Else
		Result = #ERROR_SUCCESS
		*G15\SimulateMode & $7FFFFFFF
		*G15\ctx\Connection  = 1
		*G15\ctxo\connection = 1
		*G15\ctxo\device     = 1
	EndIf
	*G15\ThreadID = CreateThread(@_lgLcdOpenWindowLCD_internal(), *G15)

	ProcedureReturn Result
EndProcedure

Procedure _lgLcdExDisconnect(*G15._LGLCD_INTERFACE_EX_VALUES_)

	If *G15\SimulateMode & #LGLCD_LCD_CONNECTED
		_lgLcdDisconnect(*G15)
	EndIf
	If *G15\WindowID
		PostMessage_(WindowID(*G15\WindowID), #WM_APP, #Null, #Null)
		If *G15\ThreadID And IsThread(*G15\ThreadID) And WaitThread(*G15\ThreadID, 200) = 0
			KillThread(*G15\ThreadID)
		EndIf
		*G15\ThreadID = 0
	EndIf
	*G15\ctxo\device      = 0
	*G15\ctxo\connection  = 0
	*G15\ctx\Connection   = 0
	*G15\OriginalCallback = 0
	*G15\OriginalContext  = 0

EndProcedure

Procedure _lgLcdExGetKindOf(*G15._LGLCD_INTERFACE_EX_VALUES_)
	Protected Result

	If *G15\SimulateMode & #LGLCD_LCD_CONNECTED
		Result = _lgLcdGetKindOf(*G15)
	ElseIf *G15\SimulateMode & #LGLCD_DEVICE_BW
		Result = #LGLCD_DEVICE_BW
	Else
		Result = #LGLCD_QVGA_BMP_BPP
	EndIf

	ProcedureReturn Result
EndProcedure

Procedure _lgLcdExGetLCDSize(*G15._LGLCD_INTERFACE_EX_VALUES_, *Size.POINT)
	Protected Result

	If *G15\SimulateMode & #LGLCD_LCD_CONNECTED
		Result = _lgLcdGetLCDSize(*G15, *Size)
	ElseIf *G15\SimulateMode & #LGLCD_DEVICE_BW
		*Size\x = #LGLCD_BW_BMP_WIDTH
		*Size\y = #LGLCD_BW_BMP_HEIGHT
		Result  = #ERROR_SUCCESS
	Else
		*Size\x = #LGLCD_QVGA_BMP_WIDTH
		*Size\y = #LGLCD_QVGA_BMP_HEIGHT
		Result  = #ERROR_SUCCESS
	EndIf

	ProcedureReturn Result
EndProcedure

Procedure _lgLcdExSetForeGround(*G15._LGLCD_INTERFACE_EX_VALUES_, Mode)
	Protected Result

	If *G15\WindowID
		StickyWindow(*G15\WindowID, Mode)
		Result = #ERROR_SUCCESS
	EndIf
	If *G15\SimulateMode & #LGLCD_LCD_CONNECTED
		Result = _lgLcdSetForeGround(*G15, Mode)
	EndIf

	ProcedureReturn Result
EndProcedure

Procedure _lgLcdExIsConnected(*G15._LGLCD_INTERFACE_EX_VALUES_)
	ProcedureReturn *G15\ctxo\device
EndProcedure
;}

Procedure lgLCDCreateExInterface(SimulatedLCD)
	Protected *G15._LGLCD_INTERFACE_EX_VALUES_

	;/--------------
	;| Main Procedure, will create the needed interface
	;|
	;/--------------

	*G15 = AllocateMemory(SizeOf(_LGLCD_INTERFACE_EX_VALUES_))
	If *G15 = 0
		ProcedureReturn #ERROR_NOT_ENOUGH_MEMORY
	EndIf
	*G15\VTable       = ?_VT_LGLCD_EX_DATA_
	*G15\SimulateMode = SimulatedLCD
	*G15\ImageID      = -1

	ProcedureReturn *G15
EndProcedure


DataSection
	_VT_LGLCD_EX_DATA_:
	Data.i @_lgLcdExConnect()
	Data.i @_lgLcdExSetImage()
	Data.i @_lgLcdExDisconnect()
	Data.i @_lgLcdExGetKindOf()
	Data.i @_lgLcdExGetLCDSize()
	Data.i @_lgLcdExSetForeGround()
	Data.i @_lgLcdExIsConnected()
	LogitechIcon:
	;	IncludeBinary "logitech.ico" ;nocrunsh
	;<<Changed through BinaryIncluder (c)HeX0R>>
	Data.l $00010000, $20200001, $00000000, $10A80020, $00160000, $00280000, $00200000, $00400000
	Data.l $00010000, $00000020, $20000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $FFFF0000, $CCCC02FF, $FFFF05CC, $FFFF06FF, $FFFF06FF, $FFFF06FF, $DFFF06FF, $EBEB08FF
	Data.l $E3F10DEB, $E5F212F1, $E7E714F2, $E7E715F3, $E7E715F3, $E7E715F3, $E7E715F3, $E7E715F3
	Data.l $E7E715F3, $E7E715F3, $E7E715F3, $F2F215F3, $E4F214F2, $EDED13F2, $E3E30EED, $CCCC09E3
	Data.l $FFFF05CC, $FFFF03FF, $FFFF02FF, $000001FF, $00000000, $00000000, $00000000, $AAAA0000
	Data.l $EBEB03AA, $EFEF0DEB, $EFFA20F7, $EDF631FA, $EEF638FA, $EEF73BF6, $ECF33DF7, $F2F843F7
	Data.l $EFF94FFC, $F0F75EF9, $F0F567FA, $F0F56AFA, $F0F56AFA, $F0F56AFA, $F0F56AFA, $F0F56AFA
	Data.l $F0F56AFA, $F0F56AFA, $F0F56AFA, $F0F76AFA, $F2F769FA, $F3F663FC, $F0F755FC, $F0F542FB
	Data.l $ECF933FA, $F0F029F9, $F5F523F8, $DBED19F5, $BFBF0EED, $000004BF, $00000000, $DBDB0000
	Data.l $EDF607DB, $E8F21DF6, $EEF74FF5, $EFF786F9, $EDF6A5F8, $EAF4AEF8, $DFE6B0F4, $BDC2B9E7
	Data.l $9DA1CAC4, $9DA1DAA1, $9EA2DDA2, $9EA2DDA2, $9DA1DDA2, $9A9FDDA1, $9A9DDD9F, $9C9EDD9F
	Data.l $9C9EDDA0, $9C9EDDA0, $9C9EDDA0, $9D9FDDA1, $9EA1DDA2, $B0B3DBA4, $E1E8D0B6, $EFF7B6EB
	Data.l $F1F8A1FA, $EFF793FA, $F0F782F9, $F2F666FA, $E7F33CFB, $FFFF15F3, $000002FF, $D4D40000
	Data.l $E9F006D4, $EFF623F8, $909570FA, $2425D995, $1B1CFA23, $1515FC1A, $0E0FFE14, $0C0DFF0D
	Data.l $0F0FFF0B, $1011FF0C, $1213FF0F, $1314FF10, $1415FF11, $1516FF12, $1617FF13, $1717FF14
	Data.l $1718FF15, $1718FF15, $1819FF15, $1819FF16, $1718FF16, $1617FF15, $1919FF14, $2628FF17
	Data.l $3839FB25, $4B4DF738, $5051F14B, $BFC4E650, $F0F594C6, $E3E335FA, $000009E3, $CCCC0000
	Data.l $E9F005CC, $F1F723F8, $565A80FB, $0000F159, $0000FF00, $0000FF00, $0000FF00, $0000FF00
	Data.l $0000FF00, $0000FF00, $0000FF00, $0000FF00, $0001FF00, $0001FF00, $0103FF00, $0102FF02
	Data.l $0002FF01, $0102FF01, $0102FF01, $0102FF01, $0103FF02, $0103FF02, $0103FF02, $0305FF02
	Data.l $0406FF03, $080AFF04, $1011FF06, $9499FF0E, $F0F9D299, $EFEF54F9, $000010EF, $BFBF0000
	Data.l $EAF104BF, $F0F724F8, $393C88FB, $0F11FB39, $0F10FF0D, $0E0FFF0D, $0C0EFF0C, $0C0DFF0A
	Data.l $0B0CFF0A, $0A0CFF0A, $090AFF08, $090AFF08, $080AFF07, $1F24FF07, $6B81FF1D, $677BFF6B
	Data.l $0C0EFF66, $090AFF0B, $090AFF07, $080AFF07, $080AFF07, $090BFF07, $090BFF08, $090BFF07
	Data.l $090BFF07, $090BFF07, $0C0DFF07, $797BFF0A, $F0FAE87A, $E7F367FA, $000015F3, $CCCC0000
	Data.l $F2F805CC, $F0F627F8, $44458FF9, $3336FC43, $3335FF31, $3134FF31, $2A2BFF30, $2629FF28
	Data.l $2022FF24, $2323FF1F, $1E1FFF20, $1E1EFF1C, $1D1EFF1C, $2C31FF1B, $515EFF2A, $5563FF50
	Data.l $292DFF54, $2527FF27, $282AFF23, $2B2CFF26, $2D2EFF29, $2F32FF2B, $2F31FF2D, $2D2FFF2D
	Data.l $292CFF2B, $2526FF27, $2224FF22, $6F73FF20, $F1F8EB72, $EAF46DFA, $000018F4, $FFFF0000
	Data.l $F2F905FF, $F1F828F9, $3E4390FA, $2533FD3D, $2227FF24, $2B34FF20, $1E23FF2A, $1F27FF1D
	Data.l $1C22FF1F, $1B1EFF1B, $1719FF19, $1B1FFF16, $191DFF19, $1518FF18, $141AFF13, $1820FF14
	Data.l $1B22FF18, $1E23FF1A, $2128FF1D, $2729FF21, $292DFF25, $2831FF28, $2F32FF26, $272EFF2D
	Data.l $222CFF26, $1720FF21, $222BFF17, $7174FF21, $F1F8EA73, $EAEA6DFA, $000018F4, $CCCC0000
	Data.l $F2F805CC, $EFF827F8, $4F508FF9, $3438FA4D, $2B2DFF32, $2F38FF2A, $2326FF2E, $1B1FFF22
	Data.l $2125FF1A, $181BFF20, $191CFF17, $171BFF18, $1B1FFF16, $171BFF1A, $1518FF17, $1A20FF14
	Data.l $171CFF1A, $2122FF17, $282DFF1F, $2C2CFF27, $3639FF2A, $343EFF35, $3939FF34, $272EFF37
	Data.l $1E26FF26, $1319FF1E, $1C20FF13, $787BFF1B, $F0F5E87A, $E8E869FA, $000016F3, $FFFF0000
	Data.l $EAF104FF, $F0F624F8, $50538AFB, $313FF850, $282DFF2F, $485EFF26, $2225FF47, $242DFF21
	Data.l $171CFF24, $1B21FF17, $262DFF1B, $1D24FF25, $171CFF1C, $1C23FF16, $1E26FF1C, $1A20FF1E
	Data.l $1E27FF19, $2126FF1D, $2D39FF20, $2426FF2D, $2E38FF23, $4560FF2F, $2126FF49, $2C36FF21
	Data.l $242EFF2B, $1D26FF23, $2328FF1C, $8084FF21, $EFF7E483, $E5F264FA, $000014F2, $BFBF0000
	Data.l $F0F704BF, $F1F722F7, $5B5F85FB, $3139F75C, $2E31FF31, $4355FF2C, $2B33FF42, $2A34FF2A
	Data.l $2730FF29, $2630FF25, $262FFF25, $2B34FF25, $2730FF2A, $242DFF26, $2830FF23, $252EFF27
	Data.l $2630FF24, $252FFF24, $363FFF24, $2E33FF35, $262CFF2D, $3746FF25, $3644FF36, $2F3DFF36
	Data.l $2530FF2E, $1B25FF24, $2328FF1B, $888CFF22, $EFF7DF8C, $E4E460FA, $000013F2, $FFFF0000
	Data.l $EFF703FF, $F1F920F7, $646880FD, $3742F565, $383CFF36, $393CFF37, $393DFF38, $2C2FFF38
	Data.l $2D30FF2B, $3338FF2D, $2F32FF32, $292CFF2E, $2C31FF27, $2A2FFF2B, $2D31FF28, $2A2EFF2C
	Data.l $3035FF29, $2C2DFF2F, $383CFF2B, $3E3FFF37, $3538FF3D, $3C46FF34, $3B42FF3B, $3C43FF3A
	Data.l $3337FF3B, $2B2DFF32, $3233FF2A, $9397FF30, $EEF6DA97, $EFEF5BF9, $000010EF, $FFFF0000
	Data.l $EDED02FF, $F0F61DF6, $6E7379FB, $4551F26F, $3A3FFF44, $3945FF39, $3A3FFF38, $323EFF3A
	Data.l $2D38FF32, $262CFF2C, $3037FF26, $2128FF30, $2833FF20, $2934FF28, $353AFF29, $2A34FF35
	Data.l $212AFF2A, $2734FF21, $2D3BFF27, $4248FF2D, $2B3BFF42, $344AFF2B, $3D4DFF34, $3841FF3D
	Data.l $3C3EFF38, $636AFF3A, $5A60FF62, $A4A9FF59, $F0F6D3A8, $EDED54F9, $00000EED, $FFFF0000
	Data.l $E9E902FF, $EFF517F4, $808563FA, $5152E684, $5152FF54, $5255FF53, $5255FF52, $4A50FF55
	Data.l $4849FF4B, $3836FF47, $2E2CFF3A, $3A38FF2F, $5051FF3B, $5050F950, $5654FA46, $5655F945
	Data.l $4F50F945, $5254F94A, $3C40FB52, $4347FF3C, $5253FF42, $585BFF51, $5758FF58, $545CFF57
	Data.l $4E56FF55, $4C56FF4E, $484CFF4D, $A6AAFF47, $F0F8BEAB, $E8E845F8, $00000BE8, $00000000
	Data.l $EAEA0100, $F2F60CEA, $C1C73BFB, $B1BA93C7, $AEB5C7B6, $A8AFD6B3, $A1A9DEAC, $8F95E5A5
	Data.l $6E70EF91, $4848F76E, $4747FD48, $4849FA48, $1A1BF948, $2927FC1A, $5B50FF0D, $5149FF10
	Data.l $2525FF10, $2629FE14, $7179FD26, $4444F572, $4F4FFF44, $696BFE4F, $8285FA6A, $8F93F384
	Data.l $9194EC92, $8F94E693, $898DE093, $CBD2CE8D, $EDF37CD4, $FFFF2BF9, $000006FF, $00000000
	Data.l $FFFF0000, $E5F203FF, $EFF514F2, $EEF531FA, $EEF64CF8, $EFF75BF9, $EFF664FA, $F1F96FFA
	Data.l $F1F87FFB, $EEF694FA, $DFE7AAF7, $2021C7E8, $1213F921, $1616FF10, $555DFF0E, $3638FF4A
	Data.l $1717FF2A, $0F10FF12, $7F84FF0E, $C3CDE682, $D3DDDCC9, $EFF6D3DA, $EFF6B6FA, $F0F991FA
	Data.l $F1F87AFB, $F0F76EFA, $EFF865FA, $EFF451FC, $DFEF2FF9, $FFFF10EF, $000001FF, $00000000
	Data.l $00000000, $AAAA0000, $DFDF03AA, $EBEB08DF, $E3F10DEB, $F3F312F1, $EBF515F3, $F0F01AF5
	Data.l $EDF321F7, $EEF72BF9, $EFF73DF7, $C1C762FA, $71749CC7, $7579C474, $767ACC79, $787ACE7A
	Data.l $7678D07B, $868ACD78, $E4EBBE8A, $E9F299EC, $E5F28AF0, $EFF979F0, $EEF450FC, $EEF62EF9
	Data.l $EBF51EF6, $E8F31AF5, $E1F016F3, $DFDF11F0, $AAAA08DF, $000003AA, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $FFFF0000, $7F7F01FF
	Data.l $BFBF027F, $E3E304BF, $EAF409E3, $EFFA18F4, $F0F830FA, $EFF646FB, $F3F952F9, $F0F654FC
	Data.l $EFF656F9, $ECF452F9, $F0FA44F7, $EEF932FA, $F2F82CF9, $E9E927F8, $DFDF17F4, $FFFF08DF
	Data.l $FFFF01FF, $000001FF, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $BFBF0100, $DBDB04BF, $E3E307DB, $E3E309E3, $E3E309E3
	Data.l $E3E309E3, $DBDB09E3, $BFBF07DB, $CCCC04BF, $D4D405CC, $BFBF06D4, $000004BF, $00000100
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000
	Data.l $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $00000000, $FFFF0000
	Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
	Data.l $00E0FFFF, $00E01F00, $00C00700, $00C00700, $00C00700, $00C00700, $00C00700, $00C00700
	Data.l $00C00700, $00C00700, $00E00700, $00E00700, $00E00700, $80FF0F00, $F0FFFF00, $FFFFFF07
	Data.l $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF, $FFFFFFFF
	Data.b $FF, $FF
EndDataSection
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Re: Logitech G15 u. G19 EasyAccess

Beitrag von KeyKon »

Hm, vll bin ich irgendwie blind, aber ich kann nirgends einen Link zur "lgLcd.lib" finden.
Wär cool wenn du den noch oben in deinem Beitrag einfügen könntest!

LG KeyKon
(\/) (°,,,°) (\/)
Benutzeravatar
Bisonte
Beiträge: 2427
Registriert: 01.04.2007 20:18

Re: Logitech G15 u. G19 EasyAccess

Beitrag von Bisonte »

KeyKon hat geschrieben:Hm, vll bin ich irgendwie blind, aber ich kann nirgends einen Link zur "lgLcd.lib" finden.
Wär cool wenn du den noch oben in deinem Beitrag einfügen könntest!

LG KeyKon
Ist urheberrechtlich geschützt ...

Muss auf deiner TreiberCD mit drauf sein. SDK als Stichwort....
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​​
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:

Re: Logitech G15 u. G19 EasyAccess

Beitrag von HeX0R »

Hast du das hier übersehen?
;| You need to copy the 'lgLcd.lib'
;| to the same dir as this Header.
;| The SDK with the 'lgLcd.lib' should be here:
;| C:\Program Files\Common Files\Logitech\LCD Manager\SDK
Oder hast du am Ende gar keine G15/G19?
Benutzeravatar
KeyKon
Beiträge: 1412
Registriert: 10.09.2004 20:51
Computerausstattung: Laptop: i5 2,8 Ghz, 16GB DDR3 RAM, GeForce 555GT 2GB VRAM
PC: i7 4,3 Ghz, 32GB DDR3 RAM, GeForce 680 GTX 4GB VRAM
Win10 x64 Home/Prof
PB 5.30 (64bit)
Wohnort: Ansbach
Kontaktdaten:

Re: Logitech G15 u. G19 EasyAccess

Beitrag von KeyKon »

Ne habs gesehen, war wohl etwas neben der Kappe^^
Hab das falschrum interpretiert so im Sinne von das man das da hinkopieren muss, reden wir nich weiter darüber :freak:
Und ja ich hab eine G15, wenn ich keine hätte wär ich auch zu faul ein Tool dafür zu schreiben ^^

Aber danke nochmal, mal sehen wie gut ich damit zurecht komme!
LG KeyKon
(\/) (°,,,°) (\/)
Antworten