[C#] Message verwijderen

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
Ik heb een Scanneer welke als HID apparaat werkt. Ik vang deze keystrokes af met een een applicatie zoals deze

Dit werkt heel goed echter komen de keystrokes ook nog binnen als normale keys, wat ik wil voorkomen.

Ik mijn mainform doe ik:

C#:
1
2
3
4
5
6
7
8
9
[System.Security.Permissions.PermissionSet(System.Security.Permissions.SecurityAction.Demand, Name = "FullTrust")]
        protected override void WndProc(ref Message message)
        {
            bool handled= Builder.Instance.Scanner.ProcessMessage(ref message);
            if (handled){
                //Hier moet die message dus verwijderd worden
            }
            base.WndProc(ref message);
        }


Ik wil dus die messag weghalen, markeren als affgehandled, oid zodat een ander (sub)form van mijn applicatie niets meer met de message gaat doen. Ik ben de gehele avond bezig maar kom niet verder.

Wel ben ik tegen de Peekmessage function gelopen, maar deze doet volgens mij niet het goede.

if broken it is, fix it you should


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Euh; als je dan base.WndProc() eens niet aanroept als je 'm afgehandeld hebt? ;)

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
RobIII schreef op dinsdag 05 juni 2012 @ 23:00:
Euh; als je dan base.WndProc() eens niet aanroept als je 'm afgehandeld hebt? ;)
Dat heb ik ook al geporbeert; werkt niet. Althans wel voor het huidige form, maar niet voor subforms.

if broken it is, fix it you should


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Normaliter heeft een WndProc, zo uit m'n blote bol althans, ook een (bool) handled argument dat (by ref) je functie in gepassed wordt. Die op true zetten zou moeten werken; maar je method signature is heel anders dan "normaal". Heeft "Message" geen handled property oid?

[ Voor 15% gewijzigd door RobIII op 05-06-2012 23:08 ]

There are only two hard problems in distributed systems: 2. Exactly-once delivery 1. Guaranteed order of messages 2. Exactly-once delivery.

Je eigen tweaker.me redirect

Over mij


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Je bent niet de enige met dit probleem, heb je het draadje "How did you solve the Handled = true problem?" gelezen? De 'oplossing' is om te registreren wat je binnenkrijgt op het 'te vergeten' keyboard en die messages vervolgens te annuleren met een globale hook op alle keyboards. Als het alleen om je eigen applicatie gaat, dan kun je natuurlijk die messages ook gewoon negeren in de normale routines die messages afhandelen en is zo'n hook niet eens nodig.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
@Robill: Nee, die zit er niet in.

@Pedorus: Thread gelezen en wat gehobbied, redelijk complexe materie :(
zoiets dus?


Je hebt het ook over die messgages negeren. Ik weet echter pas dat het 'die message' is als ik hem heb geprocessed (hardwareid opgevraagd). Dat zou betekenen dat ik dit voor elk form moet gaan doen. Kan dat niet anders?

[ Voor 11% gewijzigd door elgringo op 06-06-2012 07:28 ]

if broken it is, fix it you should


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
In je eigen applicatie, afhankelijk van je applicatiemodel waarschijnlijk
MSDN: Application.AddMessageFilter Method (System.Windows.Forms)

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
pedorus schreef op woensdag 06 juni 2012 @ 10:01:
In je eigen applicatie, afhankelijk van je applicatiemodel waarschijnlijk
MSDN: Application.AddMessageFilter Method (System.Windows.Forms)
En als je deze 1x ingesteld hebt is het voor de hele applicatie?

if broken it is, fix it you should


Acties:
  • 0 Henk 'm!

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
Ik heb een tijdelijke implemantie van IMessageFilter gemaakt:

C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 public bool PreFilterMessage(ref Message message)
        {
            bool ret = false;
            switch (message.Msg)
            {
                case WM_INPUT:
                    {
                        return true;
                        
                    }
                    break;
            }
            return ret;
        }


maw alle WM_input zouden geannuleerd moeten worden. Deze zit in een class welke met
C#:
1
Application.AddMessageFilter(test);
is toevoegd.

Functie wordt aangeroepn en er wordt true geretourneerd. Echter blijven de toetsaanslagen wel bij de applicaite terecht komen. Waarom filtered hij niet?

if broken it is, fix it you should


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Omdat het event WM_KEYDOWN (0x100) is. :p

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


Acties:
  • 0 Henk 'm!

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 16-09 20:30
pedorus schreef op woensdag 06 juni 2012 @ 17:31:
Omdat het event WM_KEYDOWN (0x100) is. :p
Ik merk het....
Echter heb ik WM_INPUT nodig of te achter halen welk device id het is en dat device id is bepalend of een key door moet of niet.

De WM_KEYDOWN message heeft echter geen device id...

if broken it is, fix it you should


Acties:
  • 0 Henk 'm!

  • pedorus
  • Registratie: Januari 2008
  • Niet online
Nee, daarom moet je dus eerst de WM_INPUT verwerken (die overigens ook langs PreMessageFilter komt), en registeren wat de inhoud was als je hem hebt afgehandeld. Vervolgens krijg je een WM_KEYDOWN die overeenkomt met wat je al hebt afgehandeld en dan retourneer je true in PreMessageFilter. Je moet dus bijhouden wat je al hebt afgehandeld.

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten

Pagina: 1