Key F10 abfangen

Plattformunabhängige GUIs mit wxWidgets.
Antworten
ZZHAT
User
Beiträge: 10
Registriert: Sonntag 6. August 2006, 14:37

Hallo,
ich habe ein kleines Problem mit der Taste F10.
Ich fange den KeyDown und KeyUp der Taste ab und bekomme im Prinzip auch das gewünschte Ergebnis jedoch verliere ich den Focus aus dem Panel an das MenuBar. Das möchte ich jedoch gern verhindern.
Kann mir da jemand helfen?

Viele Grüße
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

ZZHAT hat geschrieben:jedoch verliere ich den Focus aus dem Panel an das MenuBar.
Hi ZZHAT!

F10 ist vom Betriebssystem her für den Sprung zum Menü des aktuellen Fensters reserviert. Das zu unterbinden ist mir bis jetzt noch nicht gelungen.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

evtl kannst du ein Veto einlegen (evtl) :D
ZZHAT
User
Beiträge: 10
Registriert: Sonntag 6. August 2006, 14:37

Hallo gerold,
ist ja echt eigenwillig.. :roll:
Es muss doch ein Weg geben.. verflixt nochmal.. :lol:
Muss ich direkt mal ausprobieren ob mich das Problem auch in anderen Sprachen einschränkt.

Hallo DatenMetzgerX,
das mit dem Veto ist gut hehehe.

Viele Grüße
ZZHAT
User
Beiträge: 10
Registriert: Sonntag 6. August 2006, 14:37

Hallo zusammen,
ich habe für mich eine Lösung gefunden. Sie ist zwar eigentlich nicht das,
was ich mir vorgestellt habe aber ich kann damit erstmal leben.

Beim stöbern im Netz, bin ich auf "RegisterHotKey" und "UnregisterHotKey" gestoßen.
Leider funktionierte bei mir das mit dem "UnregisterHotKey" überhaupt nicht
und sowas wie "KeyboardHook", wollt ich jetzt nicht auch noch bauen.
Ich habe mich dann dazu entschlossen für die Laufzeit, der Anwendung,
F10 als HotKey zu definieren und damit den SystemHotKey
ausser Kraft zu setzen. Dies Funktioniert bei mir soweit ich das testen konnte
einwandfrei.

Aber wie immer ist ein Beispiel am besten:

Code: Alles auswählen

# -*- coding: iso-8859-1 -*-
import wx
import win32con #VK keycodes
ID_MENU_5 = 5
class FrameWithHotKey(wx.Frame):
     def __init__(self, *args, **kwargs):
          wx.Frame.__init__(self, *args, **kwargs)
          self.regHotKey()
          self.Bind(wx.EVT_HOTKEY, self.handleHotKeyF10, id=self.hotKeyIdF10)
          self.MenuBar= wx.MenuBar()
          self.Verwaltung=wx.Menu()
          self.MenuBar.Append(self.Verwaltung,"Verwaltung")
          itemmenu = wx.MenuItem(self.Verwaltung,ID_MENU_5,"Item5","",0)
          self.Verwaltung.AppendItem(itemmenu)
          self.SetMenuBar(self.MenuBar)
          
     def regHotKey(self):
         self.hotKeyIdF10 = 50001
         self.RegisterHotKey(
             self.hotKeyIdF10, #Eindeutige ID fuer den HotKey
             0,
             win32con.VK_F10)  #Key auf den geachtet werden soll
                  
     def handleHotKeyF10(self, evt):
         print "F10 gehört nun nur noch mir"
     
class App(wx.App):
    def OnInit(self):
        frame = FrameWithHotKey(None,-1,'')
        frame.Show()
        return 1

def main():
    application = App(0)
    application.MainLoop()

if __name__ == '__main__':
    main()
Edit by Gerold: Code-Tag geändert
Zuletzt geändert von ZZHAT am Mittwoch 9. August 2006, 22:52, insgesamt 1-mal geändert.
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

Vielleicht kann man die Bedingung einbauen, dass das Programm nur startet, wenn die Taste F10 von der Tastatur entfernt wurde. Ich habe noch gar nicht alle durchprobiert, aber bislang brauchte ich als Windoof-User nur die F8. :lol:

Michael
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Antworten