Toon posts:

[C#] Message verwijderen

Pagina: 1
Acties:

Acties:
  • 0Henk 'm!

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 23-05 22:24
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:
  • 0Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 05:14

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

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.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


Acties:
  • 0Henk 'm!

  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 23-05 22:24
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:
  • 0Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Laatst online: 05:14

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

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.

Roses are red Violets are blue, Unexpected ‘{‘ on line 32.

Over mij


Acties:
  • 0Henk '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


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 23-05 22:24
@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


  • 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


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 23-05 22:24
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


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 23-05 22:24
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


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

Vitamine D tekorten in Nederland | Dodelijk coronaforum gesloten


  • elgringo
  • Registratie: Januari 2001
  • Laatst online: 23-05 22:24
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


  • 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


Tweakers maakt gebruik van cookies

Tweakers plaatst functionele en analytische cookies voor het functioneren van de website en het verbeteren van de website-ervaring. Deze cookies zijn noodzakelijk. Om op Tweakers relevantere advertenties te tonen en om ingesloten content van derden te tonen (bijvoorbeeld video's), vragen we je toestemming. Via ingesloten content kunnen derde partijen diensten leveren en verbeteren, bezoekersstatistieken bijhouden, gepersonaliseerde content tonen, gerichte advertenties tonen en gebruikersprofielen opbouwen. Hiervoor worden apparaatgegevens, IP-adres, geolocatie en surfgedrag vastgelegd.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Toestemming beheren

Hieronder kun je per doeleinde of partij toestemming geven of intrekken. Meer informatie vind je in ons cookiebeleid.

Functioneel en analytisch

Deze cookies zijn noodzakelijk voor het functioneren van de website en het verbeteren van de website-ervaring. Klik op het informatie-icoon voor meer informatie. Meer details

janee

    Relevantere advertenties

    Dit beperkt het aantal keer dat dezelfde advertentie getoond wordt (frequency capping) en maakt het mogelijk om binnen Tweakers contextuele advertenties te tonen op basis van pagina's die je hebt bezocht. Meer details

    Tweakers genereert een willekeurige unieke code als identifier. Deze data wordt niet gedeeld met adverteerders of andere derde partijen en je kunt niet buiten Tweakers gevolgd worden. Indien je bent ingelogd, wordt deze identifier gekoppeld aan je account. Indien je niet bent ingelogd, wordt deze identifier gekoppeld aan je sessie die maximaal 4 maanden actief blijft. Je kunt deze toestemming te allen tijde intrekken.

    Ingesloten content van derden

    Deze cookies kunnen door derde partijen geplaatst worden via ingesloten content. Klik op het informatie-icoon voor meer informatie over de verwerkingsdoeleinden. Meer details

    janee