Laden...

Button abschalten mit Hilfe von DirectX oder GAPI

Erstellt von Taggert vor 17 Jahren Letzter Beitrag vor 17 Jahren 2.959 Views
Taggert Themenstarter:in
45 Beiträge seit 2006
vor 17 Jahren
Button abschalten mit Hilfe von DirectX oder GAPI

Hallo,

ich habe einen PDA, dessen WindowsButton nicht in der Systemsteuerung abschaltbar ist. Da es aber auf gar keinen Fall vorkommen darf, dass jemand das Startmenu betätigt, muss der Button abgeschalten werden. Ich weiss, dass der Knopf ein VK_LWIN Signal sendet. Somit sollte es ja eigentlich kein Problem sein, den Knopf abzuschalten - ist es aber dennoch.

Die zwei Möglichkeiten die ich sehe, an den Knopf ranzukommen ist die GAPI (Gaming API) und DirectX.

Aber auch hier gibt es Probleme:

Die GAPI ist eine DLL, die aufgrund eines Rückgabewertes nicht komplett mitels P/Invoke in C# eingebaut werden kann. Unglücklicherweise ist genau die Funktion, die die Tasten steuert davon betroffen. Es gibt in der msdn zwar einen Artikel, wie man mittel eMVC3.0 einen Wrapper baut, allerdings have ich nur das Visual Studio und kenne mich nicht mit eMVC aus. Wenn Ihr ein Tutorial habt, indem beschrieben wird, wie man GAPI im Visual Studio benutzt, dann her damit 😉.

Die andere Möglichkeit wäre Managed DirectX. Auch hier habe ich versucht, die Tastaturkommandos auszulesen, allerdings bekomme ich von der Methode:

   

            protected override void OnKeyPress(KeyPressEventArgs e)
            {
                System.Diagnostics.Debug.WriteLine("KEyEvent: "+e.ToString());
                
            }

nichteinmal einen Event geliefert, wenn ich den Button drücke. Wenn Ihr also wisst, wie man mit DirectX Mobile auf die Tastatur zugreift, dann sagt mit bitte bescheid. Und bitte nicht vergessen, es handelt sich um einen Knopf der vergessen wurde, im Betriebssystem registriert zu werden, der also bei den "normalen" Events gar nicht auftaucht.

Eine 3. Möglichkeit sehe ich noch indem ich den Knopf in der Registry abschalte. Davon hab ich allerdings noch weniger Ahnung, als ein Fisch vom Fahrrad fahren.

Wenn ich Ideen, Vorschläge oder sogar Lösungen habt, dann her damit. Ich bin Euch jetzt schon für Eure Hilfe dankbar.

Gruß Taggert

I
1.739 Beiträge seit 2005
vor 17 Jahren

Da es aber nicht vorkommen soll...
Sollte man einfach das Startmenü entfernen. Ein Fernsteuern der Standardshell ist Gm.E. zu viel des guten.
Also: Startmenü ausblenden oder Standardshell ersetzen.

148 Beiträge seit 2006
vor 17 Jahren

versuchs doch mal, dich an das interface IMessageFilter anzuklinken..

da implementierst du dann die Funktion PreMessageFilter.. die fängt alle Messages ab, die Windows schickt.. lieferst du als rückgabewert true, wird sie nicht weitergegeben, die aktion also unterdrückt und nur das gemacht was du vorgibst; lieferst du false zurück, wird die nachricht nicht gefiltert und weitergegeben.. die reguläre aktion findet also noch statt.. du kannst allerdings trotzdem noch zusätzliche dinge erledigen lassen 🙂


public bool PreFilterMessage(ref Message m)
      {
         // 0x100 = KeyFirst, 0x108 = KeyLast
         if(m.Msg <= 0x108 && m.Msg >= 0x100)
         {
            // mache nix, fange Message ab
            return true;
         }
         // sonst, nix filtern, message durchlassen 
         return false;
      }

im netz findest du listen, welche messages zu welchen tasten gehören.. wenn du dich da einklinkst, kriegst vielleicht auch raus, welchen button du ansprechen musst / kannst..

greetz..

I cna tpye 300 wrods pre mnuite!

I
1.739 Beiträge seit 2005
vor 17 Jahren

Ich glaub so ein Messagefilter hilft bei dem Problem nur eins: nichts.
Entweder man steuert das System bei Auslieferung, oder...
Was ist deine Meinung zu einer Applikation die dein System ungefragt ändert.
Falls das toll sein sollte, muss das Ding das Login Ersetzen, oder direkt danach gestartet werden. Dafür brauchts aber keinen Messagefilter(zum Deformieren des Systems).