Partage
  • Partager sur Facebook
  • Partager sur Twitter

[VB.NET] Applet pour l'écran LCD du clavier G19

Transformer une Windows "Form" en Applet compatible ? [Mode débutant]

Sujet résolu
13 juin 2013 à 22:03:39

Bonjour les zéro ! C'est encore tonton Komega le newbie !

Mon premier post sur ma R.A.T 9 fut un succès et je vous en remercie.

Petite piqûre de rappel, il s'agissait de faire une application (réalisé avec Visual Studio) affichant le niveau de batterie de ma souris sans fil (R.A.T 9 de chez Cyborg) .

Ceci fut donc fait :

Maintenant, je souhaiterai que cette fenêtre soit compatible et apparaisse dans mon petit écran LCD intégré à mon clavier G19 de chez Logitech afin de ne plus être surpris en plein milieu de partie par une souris à 0% de batterie (même si le changement se fait rapidement a haut niveau c'est un handicap, les gamers comprendrons) .

Il y a donc le SDK de chez Logitech pour se faire qui m'indique les bases à réaliser, soit voici le fichier "readme" tel quel :

Logitech LCD SDK for PC

Introduction

--------------------------------------------------------------------------

This package is aimed at PC game developers and other users who are interested in creating applications to run on a Logitech monochrome or

color LCD, such as the ones found on the G15 and G19 keyboards, the G13, or the Z-10 speakers.

It greatly simplifies the task for creating screens by generating bitmaps for you based on what text, progress bars or bitmaps you want

to display. Furthermore it takes care of all the plumbing that is otherwise needed when using the Core SDK's library directly. => très cordial tout ceci mais...

This package contains the following components:

- Doc folder: contains documentation that describes the api and its methods. =>oulalah !

- Libs: lglcd.lib library used to connect to the LCD Manager software running on your machine. The LCD Manager is started automatically after the Logitech GamePanel Software is installed.

- Samples: sample program that demonstrates the use of every method  available in the LCD SDK. =>reoulalah !

- Src: full source code for the LCD SDK. =>achevez moi !

Environment

--------------------------------------------------------------------------

1. Visual Studio 2005 to build and run demo samples. => OK je l'ai .

2. Logitech GamePanel Software 3.03 or later installed. => OK je l'ai .

3. A compatible Logitech product (G19, G15, G13, Z10). => OK je l'ai .

Where to start

--------------------------------------------------------------------------

1. Install Logitech GamePanel Software 3.03 or later. => OK c'est fait .

2. Plug in a compatible Logitech device. => OK c'est fait .

3. Load, compile and run the sample contained in "Samples". => La je pige pas trop ni pourquoi ni comment je compile tout ce bazar ?

For implementing LCD support in your game/applet

--------------------------------------------------------------------------

1. Add all files contained in "Src" to your project. => OK c'est fait .

2. Add lgLcd.lib contained in "Lib" to your project. => OK c'est fait .

3. See sample program for an example on how to use all of the wrapper's methods. => La je pige pas tout non plus (c'est quoi un wrapper's ? moi je connais que le pti wrap a mac'do :p )

Where to find documentation

--------------------------------------------------------------------------

In "Doc" directory: api.html contains the necessary information for all the available methods. => Et la pour comprendre cet doc faut vraiment être calé en programmation, et comme vous le savez certainement déjà "i'am a big big big newbie !"


Toutes infos seront les bienvenues ! 

Sachant que mon projet (ou bien mon rêve du moment) serait ceci au final (c'est un simple montage je vous rassure) : 

-
Edité par komega 13 juin 2013 à 22:07:13

  • Partager sur Facebook
  • Partager sur Twitter
Et si j'allais jusqu'au bout d'un projet aujourd'hui ?
14 juin 2013 à 11:11:35

"La je pige pas tout non plus (c'est quoi un wrapper's ? moi je connais que le pti wrap a mac'do :p )"

Un wrapper, c'est un composant qui encapsule plein de trucs pour te faciliter l'usage d'autre chose.

Par exemple : Faire une fenêtre en Win32 (C++), ça nécessite pas mal d'initialisation diverses avant de pouvoir l'afficher. Pour en simplifier la création, le .NET encapsule tout le nécessaire dans la classe Form. Du coup, on peut dire que la classe Form est un wrapper Win32 vers tout ce qui permet de gérer les fenêtres sous Windows.

Dans ce cas là, il est probable que Logitech aie développé le composant logiciel permettant de piloter l'écran du G19 en C(++?...voir autre chose)...Pour en simplifier l'usage dans d'autres technologies (comme le .NET), ils mettent probablement à disposition des wrappers dans les technos cibles pour encapsuler des trucs.

"très cordial tout ceci mais..."

En rapport avec ce qui est dit au dessus, ils te précisent juste que ce SDK te fait tout le boulot et que tu as juste à indiquer quel texte, progress barre ou autre doivent être affichés et le SDK se charge pour toi de générer les images à envoyer au périphérique...chose que tu es censé faire toi même si tu utilise le noyau seul du SDK.

"oulalah"

La doc, tu pourras pas t'en passer. A moins de tomber sur un 0 qui aura fait un projet similaire, personne ne saura te répondre quant aux questions relatives à l'usage de ce SDK....en dehors de la doc bien sûr :D

Le dossier SRC, tu peux le laisser tomber. Il doit probablement contenir le code source du SDK...Dès fois que t'aies un besoin spécifique qui nécessite de modifier le code du SDK.

Le dossier sample, tu peux t'en passer, mais il reste super utile. T'y trouvera probablement des exemples concret de comment utiliser leur SDK. Par exemple, quand tu démarres avec DirectX 9, tu as un SDK à installer...il contient plein de mini-projet-exemple pour t'aider à comprendre...Ca va du simple "Voici un projet affichant une fenêtre vide accélérée matériellement en utilisant DirectX" (c'est inutile mais ça te montre concrètement comment initialiser DirectX pour commencer à s'en servir) à "Voici un projet-exemple montrant une façon d'implémenter un système d'éclairage différé complexe". Dans le cas présent, il y aura peut-être un projet-exemple montrant comment afficher "Hello World" sur l'écran du clavier...

"La je pige pas trop ni pourquoi ni comment je compile tout ce bazar ?"

Comme dit ci-dessus, tu n'es pas obligé de le faire. Cependant, si tu le fait, c'est un moyen "simple" de vérifier que ton environnement dispose bien de tous les prérequis nécessaires à son bon fonctionnement (Par extension : Si les exemples fonctionnent, tout est ok, vous pouvez commencer à bricoler)

-
Edité par Nisnor 14 juin 2013 à 11:14:08

  • Partager sur Facebook
  • Partager sur Twitter
14 juin 2013 à 14:09:48

Tout d'abord merci pour tes infos !

En fait je ne sais pas trop par ou commencer, le SDK ne dispose pas d'une interface IDE tel que visual studio que je pourrai édité facilement . Je doit, si j'ai bien compris me servir de l'interface de visual studio puis par le biais de je ne sais que compilation (en y intégrant les bon élément) à faire apparaître une application compatible G19..."rame, rame, rame..."

-
Edité par komega 14 juin 2013 à 14:10:33

  • Partager sur Facebook
  • Partager sur Twitter
Et si j'allais jusqu'au bout d'un projet aujourd'hui ?
14 juin 2013 à 16:44:40

Déjà il faudrait identifier dans quelle technologie est faite le SDK en question.

Visual Studio peut compiler autre chose que du .NET....Comme du C/C++ classique par exemple (Microsoft édite un des nombreux compilateur C/C++ disponibles : MSVC). Là encore, il faut bien faire la différence...Car il y a le C++ "traditionnel" (celui qui génère du code natif sans rien de plus) et le C++/CLI, qui réutilise des segments bas-niveau du système .NET (comme le garbage-collector par exemple) pour faire un environnement plus ".NET-like" en C++ (mais bon...C'est pas encore du .NET...On va dire plutôt que c'est du super-C++...)

Si le SDK est effectivement en C/C++ classique, il te faudra trouver un moyen de faire la transition entre le SDK indiqué et le .NET.

Pour ça, .NET propose de quoi faire du P/Invoke (opération visant à appeler du code non-managé à partir d'une application managée [en .NET]). Dans les grandes lignes, il faudrait récupérer une version dynamique des binaires du SDK (des .dll) pour pouvoir les charger/appeler depuis une application .NET.

Pour le C++/CLI, je ne sais pas du tout ce qui est possible (j'ai jamais touché au C++/CLI)...Mais vu que les deux sont assez proche, il y a peut-être moyen d'inclure une librairie dynamique de C++/CLI directement dans un programme .NET.

"le SDK ne dispose pas d'une interface IDE tel que visual studio que je pourrai édité facilement"

SDK ne veut pas dire qu'il y a forcément un logiciel fourni avec. Un SDK (Software Development Kit) peut-être très bien n'être composé que de binaires à intégrer dans un autre projet avec un peu de doc et éventuellement des exemples (comme ce qui semble être le cas ici).

-
Edité par Nisnor 14 juin 2013 à 16:48:51

  • Partager sur Facebook
  • Partager sur Twitter
14 juin 2013 à 17:41:51

Merci pour ta réponse mais j'ai un peu du mal à tout comprendre .

---EDIT---

Post partiellement supprimé

-
Edité par komega 8 juillet 2013 à 11:39:49

  • Partager sur Facebook
  • Partager sur Twitter
Et si j'allais jusqu'au bout d'un projet aujourd'hui ?
1 juillet 2013 à 11:18:29

A supprimer

-
Edité par komega 8 juillet 2013 à 11:39:06

  • Partager sur Facebook
  • Partager sur Twitter
Et si j'allais jusqu'au bout d'un projet aujourd'hui ?
3 juillet 2013 à 17:43:11

Pti up' les z'amis zeros, un tuto pour débutant serait tellement appréciable pour ce clavier qui ne dispose pas de beaucoup d'applet . En VB.NET ou autre quelque chose avec une interface graphique similaire (delphi,etc...) par example .

Au prix qu'il coûte c'est plutôt dommage d'être aussi restreint :) 

  • Partager sur Facebook
  • Partager sur Twitter
Et si j'allais jusqu'au bout d'un projet aujourd'hui ?
3 juillet 2013 à 23:59:06

En même temps, ce produit est à champ tellement restreint (fonctionnel uniquement sur clavier logitech Gxx qui coûtent une blinde pour un clavier et vise donc une niche plus que la masse) que je doute que tu puisse trouver quelconque autre support que celui fournit par Logitech.
  • Partager sur Facebook
  • Partager sur Twitter
4 juillet 2013 à 15:43:43

Tout à fait vrai, en attendant un tuto (qui ne viendra peut être jamais 'snif' je vais essayer de faire différemment en utilisant un "applet" qui se nomme LCDhost que l'on peut customizer un peu comme avec une interface IDE . Reste à savoir comment importer ma .dll dans cette applet mais ca me semble tout a fait réalisable .
  • Partager sur Facebook
  • Partager sur Twitter
Et si j'allais jusqu'au bout d'un projet aujourd'hui ?
8 juillet 2013 à 11:29:14

Bon j'ai une solution "détourné" :D

Il vous faut:

-LCDhost pour G19, téléchargeable ici : http://www.linkdata.se/software/lcdhost/

-Logitech Game Panel, téléchargeable soit chez Logitech soit ici: http://www.softpedia.com/get/System/System-Miscellaneous/Logitech-GamePanel.shtml

-Une form (Visual studio par exemple) qui récupère la valeur de charge batterie via la .dll et qui envoie la valeur dans un fichier texte . Donc voici le code (j'ai supprimé les élément superflue ainsi que les menu de réglages personels )

Imports Saitek.Devices

Public Class Form1
    Private SaitekDevices_List As Saitek.Devices.DeviceList
    Private SaitekDevice_Object As Saitek.Devices.SaitekDevice
    Dim SaitekMouse_MouseLink As String
    Dim SaitekMouse_ProfilActuel As String


    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        ' En premier, on crée une nouvelle liste de périphérique dont le GUID ( identifiant unique )
        ' est égal a celui fourni par la DLL, via TorontoDevice.InterfaceGuid
        ' Il semble que TorontoDevice designe le modèle de la R.A.T 9.
        SaitekDevices_List = New Saitek.Devices.DeviceList(TorontoDevice.InterfaceGuid)

        ' Ensuite, nous devons forcer notre nouvelle liste à se raffraichir.
        ' Si ceci n'est pas fait, elle reste totalement vide, et rend le code d'après inopérant.
        SaitekDevices_List.EnumerateExistingDevices()

        ' Nous récupérons ensuite le "LinkName". Il s'agit d'un espèce de chaine de caractère désignant votre souris.
        ' Nous en aurons besoin pour obtenir une variable contennant notre R.A.T 9.
        SaitekMouse_MouseLink = SaitekDevices_List.Devices(0).LinkName

        ' Et pour finir, nous stockons notre R.A.T 9 dans cette variable, grâce au LinkName.
        SaitekDevice_Object = New Saitek.Devices.SaitekDevice(SaitekMouse_MouseLink)

    End Sub

    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick

        ' Tout ce passage est optionel mais ne sachant pas encore parametrer LCDhost pour jouer des alertes, etc... c'est la form visualstudio qui se chargera de jouer les alertes audio, etc...
'Il faut aussi écréter la valeur de charge batterie lors des veilles car cette dernière = 201 lors des veillle profonde et = valeur actuel+100 lors des veilles dite courte ou simple . Ceci afin de ne jamais dépasser la valeur max de la progress bar qui conduit à une erreur sinon
        ' Si la souris n'est pas en veille (donc sa valeur <= 100 % )
        If SaitekDevice_Object.GetBatteryChargeLevel() <= 100 Then
            ProgressBar1.Maximum = 100

            ' Affichage dans la progressbar1 du niveau de batterie
            ProgressBar1.Value = SaitekDevice_Object.GetBatteryChargeLevel()

            'Affichage du pourcentage dans le label1
            Label1.Text = ProgressBar1.Value.ToString + "%"

            'NotifyIcon Affichage de la charge batterie
            NotifyIcon1.Text = "Charge batterie = " + Label1.Text

            ' Sinon si elle est en veille longue ( valeur charge = 201%)
        ElseIf SaitekDevice_Object.GetBatteryChargeLevel() = 201 Then
            ProgressBar1.Maximum = 201
            Label1.Text = "Veille P"
            ProgressBar1.Value = SaitekDevice_Object.GetBatteryChargeLevel()

            ' Sinon veille simple ( valeur charge + 100 )
        ElseIf SaitekDevice_Object.GetBatteryChargeLevel() > 100 And SaitekDevice_Object.GetBatteryChargeLevel() < 201 Then
            ProgressBar1.Maximum = 201
            Label1.Text = "Veille"
            ProgressBar1.Value = SaitekDevice_Object.GetBatteryChargeLevel()
        End If

        ' Changement des couleur progressbar et affichage du label en %

        'Alerte courte !
        If ProgressBar1.Value <= NumericUpDown4.Value And Panel1.Visible = False Then
            ' le timer d'alerte courte se règle
            Timer2.Interval = NumericUpDown3.Value * 1000
            ProgressBar1.ForeColor = Color.DarkRed
            Label1.ForeColor = Color.DarkRed

            'Alerte simple
        ElseIf (ProgressBar1.Value <= NumericUpDown1.Value And ProgressBar1.Value > NumericUpDown4.Value) And Panel1.Visible = False Then
            
            ' le timer d'alerte simple se règle
            Timer2.Interval = NumericUpDown2.Value * 1000
            ProgressBar1.ForeColor = Color.OrangeRed
            Label1.ForeColor = Color.OrangeRed
        Else
            ProgressBar1.ForeColor = Color.Lime
            Label1.ForeColor = Color.Lime

        End If

    End Sub

    Private Sub Timer2_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer2.Tick

        'Jouer alerte batterie basse quand la valeur de charge batterie est a la fois compris entre votre réglage (pour moi une numerique bar qui n'apparait pas dans mon code mais vous pouvez mettre ce que vous voulez) et 1% (pas 0% car peut etre synonime de souris éteinte) et aussi lorsque ma checkbox autorisant l'alarme est coché (optionel)
        If (Panel1.Visible = False And ProgressBar1.Value <= NumericUpDown1.Value And CheckBox1.Checked = True And ProgressBar1.Value > 0) Then
            My.Computer.Audio.Play("C:\Users\VOTRENOMDUTILISATEUR\documents\visual studio 2010\Projects\WindowsApplication1\WindowsApplication1\Resources\alerte.wav", _
        AudioPlayMode.WaitToComplete)

            'Stopper alerte batterie basse dans les autres cas
        ElseIf ProgressBar1.Value > NumericUpDown1.Value Then
            My.Computer.Audio.Stop()
        End If
    End Sub


    Private Sub Timer4_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer4.Tick

        'Envoie pour LCDhost dans un fichier texte de la  valeur du niveau de la batterie . 
        ' écrase l'ancienne valeur toute les timer4.secondes
        My.Computer.FileSystem.WriteAllText("C:\Users\VOTRENOMDUTILISATEUR\Documents\LCDHost\layouts\g19-eos\fichierdestockagedelavaleurbatterie.txt", ProgressBar1.Value , False)
    End Sub

End Class




Ensuite vous installez Logitech Game Panel puis LCD host

Vous allez dans Logitech Game Panel et vous cochez la case activant LCDhost (cherchez donc un peu c'est facile)

De la devrait apparaître le layout de base dans l'écran de votre G19

Ensuite vous compilez la petite application dont le code est ci dessus vous la lancez et vérifiez que le fichier texte apparait dans le dossier layout\g19-eos\... et affiche la valeur batterie

Puis dans LCDhost vous créez dans l'onglet layout>classes>static>text(files) que vous clic'n'drag sur votre layout, puis vous cliquez dessus et dans le champ file vous mettez votre fichier texte qui contient la valeur batterie (devrait apparaitre en numérique dans votre text (file) plus qu'a rajouter un jolie % avec un static text)

Ensuite vous glissez un static>color swatch hors du layout et vous cliquez a coté du champ current value le petit bouton (c'est un link) vers layout>votrenom.xml>text(file)>~hiddenText (vous voyez le changement dans Valuefield)

Puis vous glissez dynamic>data Bar dans votre layout (pour avoir une progressbar) et vous linkez le champ data template à Layout>votrenom.xml>color swatch>currentvalue (de la s'affiche la valeur numérique dans le champ)

Cela devrez donc afficher au final la valeur en numérique dans le champ statictext et la progression dans la data bar .

Attention parfois l'application crash, pas de panique fermez LCDhost LogitechGamePanel et votre application VisualBasic puis relancez dans l'ordre le GamePanel, LCDhost et votre appli, tout devrez fonctionner .

Et voilou une jolie Applet pour G19 avec affichage de la batterie de la Cyborg R.A.T 9 !

-
Edité par komega 8 juillet 2013 à 11:38:24

  • Partager sur Facebook
  • Partager sur Twitter
Et si j'allais jusqu'au bout d'un projet aujourd'hui ?
3 janvier 2017 à 21:53:50

Bonjour, je déterre ce "tuto". Komega, est ce que tu peux mettre en fichier téléchargeable le fichier de paramétrage complet qui correspond à ta capture d'écran. Je la trouve très intéressante et je viens d'acquérir un clavier G19 et une souris rat9.

Merci d'avance, Julien

  • Partager sur Facebook
  • Partager sur Twitter
17 août 2022 à 12:11:22

Bonjour,
j'allais poster un message pour savoir si vous arrivez toujours à utiliser LCD Host, car j'avais moi même un problème lors du lancement du programme (suite à la réinstallation de Windows 10) j'avais ce message :
Erreur d'application
L'application n'a pas réussi à démarrer correctement (0x000007b).

Mais je viens de trouver la solution et je la donne ici, ça peut faire des heureux ;)
En fait il faut installer ce package Microsoft :
visual C++ redistributable for visual studio 2010 update 4


Rendons à César, c'est grâce à cette vidéo youtube que j'ai trouvé ce qu'il fallait faire : https://www.youtube.com/watch?v=8cVuKQLVrsU

J'étais vraiment dégouté de ne plus pouvoir utiliser le petit écran LCD de mon logitech G510s. Perso je couple LCD Host avec GPU-Z et c'est top, on peut afficher pleins d'infos exactement où l'on veut sur l'écran. Il est aussi possible d'utiliser d'autres programme de monitoring comme CoreTemp, Fraps, HWinfo, SpeedFan, ...

Si y a besoin d'aide pas problème, je sais qu'il est un peu galère à prendre en main LCD Host.

^^

  • Partager sur Facebook
  • Partager sur Twitter
17 août 2022 à 13:56:32

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter