Laden...

Beim Programmstart Shift-Taste auslesen

Erstellt von JumpinJack vor 14 Jahren Letzter Beitrag vor 14 Jahren 2.916 Views
J
JumpinJack Themenstarter:in
4 Beiträge seit 2009
vor 14 Jahren
Beim Programmstart Shift-Taste auslesen

Hallo Zusammen,

ich schreibe zur Zeit eine kleine Datanbank bzw eine Anwendung zur existierenden DB. Nun programmiere ich noch ein paar Startfunktionen die dem Anwender für den Fall der Fälle aus der klemme helfen sollen.

Und zwar möchte ich, dass wenn das Programm gestartet wird und man die Shift-Taste gedrückt hält, dass man eine DB auswählen kann. (ich rede hier von Access-DBs)

Meine Frage ist, wie bekomme ich das in den Code. Ein Parameter im klassischen Sinn ist es ja nicht.


public Window1()
        {

            string url_db_path;
            if (Shift-Taste gedrückt)
                config_datei.set_db_url(out url_db_path);
            else
                config_datei.get_db_url(out url_db_path);

            InitializeComponent();

        }

Wäre klasse wenn mir da einer helfen könnte.

Viele Grüße
JumpinJack

Liebe Grüße
JumpinJack

6.862 Beiträge seit 2003
vor 14 Jahren

Hallo,

da musst du mit globalen Tastaturhooks arbeiten da deine Applikation beim starten ja keinen Focus hat und selber noch keine Tastaturevents als solches empfangen kann.

Baka wa shinanakya naoranai.

Mein XING Profil.

643 Beiträge seit 2006
vor 14 Jahren

Du kanst die Taste über eine Event der Form abfangen (KeyDown, KeyPress unsw).
Ich würde dir aber nicht empfehlen das vor der InitializeComponent Methode zu machen und wenn doch solltest du das über eine andre Form (z.b einen Splashscreen) oder Keyboard- Hook machen. Du kanst auch bevor du mit der Datenbank verbindest, wenige Sekunden warten um während der Zeit noch ein Tastendruck mit der Hauptform abzufangen.

5.658 Beiträge seit 2006
vor 14 Jahren

So geht es z.B. im Load-Event einer Form:



string url_db_path;
if ((System.Windows.Forms.Control.ModifierKeys & Keys.Shift) == Keys.Shift)
  config_datei.set_db_url(out url_db_path);
else
  config_datei.get_db_url(out url_db_path);


Ohne Forms geht es auch, und zwar so in etwa:


[DllImport("user32.dll")]
static extern short GetKeyState(VirtualKeyStates nVirtKey);

int ks = GetKeyState(VirtualKeyStates.VK_SHIFT);
if ((ks & 0x80) != 0)
{
  // Shift wird gedrückt...
}

Wenn du deine Frage bei Google eingegeben hättest, dann hättest du die Lösung genauso schnell gefunden wie ich 😃

Christian

Weeks of programming can save you hours of planning

J
JumpinJack Themenstarter:in
4 Beiträge seit 2009
vor 14 Jahren

Vielen Dank für die zahlreichen Antworten. Ich werde mir das mal mit den Hooks anschauen. Hab ich aber bis dato noch nicht gemacht.

Was das suchen über Google betrifft: Ich habe gesucht. Aber wahrscheinlich nicht die gleichen Ausdrücke benutzt. Aber is wurscht. Danke an alle.

Liebe Grüße
JumpinJack

5.658 Beiträge seit 2006
vor 14 Jahren

Was das suchen über Google betrifft: Ich habe gesucht. Aber wahrscheinlich nicht die gleichen Ausdrücke benutzt. Aber is wurscht. Danke an alle.

Das ist aber wirklich ein Armutszeugnis, das du dir da ausstellst: http://www.google.de/search?q=c%23+shift-key+pressed 🤔

Weeks of programming can save you hours of planning

J
JumpinJack Themenstarter:in
4 Beiträge seit 2009
vor 14 Jahren

Nun ja, dann ist das wohl so. Was kann ich machen? Ich könnte mich bei meinen Eltern beschweren aber nützt das was? Ich glaub nicht. Aber muss es denn gleich persönlich werden? Auch das glaub ich nicht.

btw: Dein Code funktioniert nicht.

Liebe Grüße
JumpinJack

5.658 Beiträge seit 2006
vor 14 Jahren

Nun ja, dann ist das wohl so. Was kann ich machen? Ich könnte mich bei meinen Eltern beschweren aber nützt das was? Ich glaub nicht. Aber muss es denn gleich persönlich werden? Auch das glaub ich nicht.

siehe [Hinweis] Wie poste ich richtig? Punkt 1.1

btw: Dein Code funktioniert nicht.

siehe [Hinweis] Wie poste ich richtig? Punkt 5

Weeks of programming can save you hours of planning

J
JumpinJack Themenstarter:in
4 Beiträge seit 2009
vor 14 Jahren

Ok.

Liebe Grüße
JumpinJack