myCSharp.de - DIE C# und .NET Community
Willkommen auf myCSharp.de! Anmelden | kostenlos registrieren
 
 | Suche | FAQ

» Hauptmenü
myCSharp.de
» Startseite
» Forum
» FAQ
» Artikel
» C#-Snippets
» Jobbörse
» Suche
» Regeln
» Wie poste ich richtig?
» Forum-FAQ

Mitglieder
» Liste / Suche
» Wer ist wo online?

Ressourcen
» openbook: Visual C#
» openbook: OO
» Microsoft Docs

Team
» Kontakt
» Übersicht
» Wir über uns

» myCSharp.de Diskussionsforum
Du befindest Dich hier: Community-Index » Diskussionsforum » Entwicklung » Grafik und Sound » Button abschalten mit Hilfe von DirectX oder GAPI
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | Thema zu Favoriten hinzufügen

Antwort erstellen
Zum Ende der Seite springen  

Button abschalten mit Hilfe von DirectX oder GAPI

 
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Taggert Taggert ist männlich
myCSharp.de-Mitglied

avatar-1985.jpg


Dabei seit: 04.08.2006
Beiträge: 45
Entwicklungsumgebung: Visual Studio
Herkunft: Würzburg


Taggert ist offline

Button abschalten mit Hilfe von DirectX oder GAPI

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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 eMVC++3.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 Augenzwinkern .

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

C#-Code:
            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
Neuer Beitrag 13.03.2007 12:15 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ikaros
myCSharp.de-Mitglied

Dabei seit: 27.05.2005
Beiträge: 1.739


ikaros ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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.
Neuer Beitrag 25.03.2007 22:43 Beiträge des Benutzers | zu Buddylist hinzufügen
Mystique Mystique ist männlich
myCSharp.de-Mitglied

avatar-1933.png


Dabei seit: 01.06.2006
Beiträge: 148
Entwicklungsumgebung: Visual Studio .Net 2003 / 2008
Herkunft: Stuttgart


Mystique ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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 smile

C#-Code:
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..
Neuer Beitrag 30.03.2007 12:03 E-Mail | Beiträge des Benutzers | zu Buddylist hinzufügen
ikaros
myCSharp.de-Mitglied

Dabei seit: 27.05.2005
Beiträge: 1.739


ikaros ist offline

Beitrag: beantworten | zitieren | editieren | melden/löschen       | Top

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).
Neuer Beitrag 31.03.2007 00:12 Beiträge des Benutzers | zu Buddylist hinzufügen
Baumstruktur | Brettstruktur       | Top 
myCSharp.de | Forum Der Startbeitrag ist älter als 12 Jahre.
Der letzte Beitrag ist älter als 12 Jahre.
Antwort erstellen


© Copyright 2003-2019 myCSharp.de-Team | Impressum | Datenschutz | Alle Rechte vorbehalten. | Dieses Portal verwendet zum korrekten Betrieb Cookies. 14.11.2019 15:51