c ++ - Er det muligt at fælde Windows Start Menu popup via Windows-nøgle (muligvis uden en krog)?

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg har arbejdet på et input eventsystem.
Jeg kortlagde alle nøglerne på mit eget tastatur, scannoderne og så videre, herunder begge windows nøgler.
Når jeg trykker på dem, modtager programmet succesfulde keydown events for dem uden problemer.
Når jeg slipper nøglerne, vises menuen Start, men observerer programmet i Windows-tilstand eller endda minimerer det i fuldskærm.


Så mit problem ligger i at undertrykke det.


Arma 2, en militær simulator/spil gør det muligt at kortlægge kommandoer på disse nøgler uden problemer.


Hvor skal jeg fange den begivenhed?
Kan jeg gøre det til mit eget vindue, så længe det har fokus?
Skal jeg sidde fast med en handicappet win-nøgle, så længe den kører?
Eller noget andet?


Googling det var hovedsagelig frugtløst på grund af Windows-nøglen også henvisende til produktnøglen, og da jeg fandt noget, var det normalt fladt ude af stand til hele knappen.
Jeg vil bare undertrykke popupen.


Redigere:
jeg forsøgte


case WM\_SYSCOMMAND:
        switch(wParam)
        {

        case SC\_TASKLIST:
            return 0;

        default:
            break;
        }


Men det gav mig meget mærkelige resultater.
Hvis jeg spammede winkeys og kun winkeysne, syntes det at fungere, så snart jeg flyttede musen mens jeg gjorde det, så startede startmenuen ikke igen.


Redigere:
Jeg har også prøvet kroge, men på win7 bliver de fjernet, hvis tilbagekaldelsen tager for meget tid, hvilket kan ske, når store data er indlæst, så de foreslår en dedikeret tråd til det, men jeg tror, ​​at det er overkillet for kun en nøgle, der behøver håndteres.


Jeg vil bare vide, hvor startmenuen bliver kaldt. Mit eget program? Systemet?
Dette er så friggin irriterende, jeg overvejer at forsøge at nå folkene fra Bohemia Interactive og spørge dem, hvordan de gjorde det.


Bare denne ene nøgle, sheesh Microsoft ... selv med 'Super key/superkey' søgeord, får jeg normalt kun fladskærende metoder, fra registreringsdatabasen til tredjeparts baggrundsprogrammer.


Bah!

Bedste reference


Raw Input API skal løse dit problem.


http://msdn.microsoft.com/en-us/library/ms645543.aspx[2]

Andre referencer 1


Denne artcile var relateret til C # men kan vise dig i den rigtige retning;


Fra MSDN: [4]



  En global krog overvåger meddelelser for alle tråde i samme skrivebord som
  den kaldende tråd. En trådspecifik krog overvåger kun meddelelser
  en individuel tråd. En global hook procedure kan kaldes i
  sammenhæng med enhver applikation i det samme skrivebord som den kaldende tråd,
  så proceduren skal være i et separat DLL-modul. En trådspecifik
  krogprocedure kaldes kun i sammenhæng med den tilknyttede tråd.



Dette var den mest nyttige link for at besvare spørgsmålet i ovenstående artikel [5]