[C++] sneltoetsen doen het niet op xp maar wel op windows 7

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • lauwsa
  • Registratie: Juli 2010
  • Laatst online: 10-09 20:43
Ik heb een probleem met sneltoetsen die ik gemaakt heb.
Ze werken wel op windows 7 64 bit. Maar als iemand anders ze op windows xp 32 bit uitprobeert doen ze het niet.

Ik heb het commando zo geschreven:

if(GetAsyncKeyState(VK_NUMPAD1)&1) {
cout << "Nump 1\n";
}

Doe ik nu wat fout? of is het bekent dat dit commando "bugd" is op xp 32 bit?
Ik heb op google gezocht maar kan alleen dingen over windows 98 vinden :S

Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Although the least significant bit of the return value indicates whether the key has been pressed since the last query, due to the pre-emptive multitasking nature of Windows, another application can call GetAsyncKeyState and receive the "recently pressed" bit instead of your application. The behavior of the least significant bit of the return value is retained strictly for compatibility with 16-bit Windows applications (which are non-preemptive) and should not be relied upon.
en ook:
[q]The return value is zero for the following cases:
• The current desktop is not the active desktop
• The foreground thread belongs to another process and the desktop does not allow the hook or the journal record.
Al lijkt me dit weer onwaarschijnlijk. Tenzij die win XP gebruiker met heel weinig rechten ingelogd is.

Wat ik niet snap is waarom je niet gewoon zelf even de documentatie gaat lezen op het moment dat je merkt dat een functie niet helemaal doet wat je verwacht...

[ Voor 33% gewijzigd door .oisyn op 13-08-2010 12:07 ]

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • lauwsa
  • Registratie: Juli 2010
  • Laatst online: 10-09 20:43
Ik kon er niks over vinden, ik had op msdn etc gekeken alleen daar vond ik niks. dus het best lijkt me dan om een ander commando op te gaan zoeken. Want het eerste lijkt me best logisch. Bedankt.


Heb al een nieuwe functie gevonden: RegisterHotKey :D

[ Voor 44% gewijzigd door lauwsa op 13-08-2010 12:29 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

Dat lijkt me sowieso handiger ja, dat is ook de manier om hotkeys te implementeren :)

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • lauwsa
  • Registratie: Juli 2010
  • Laatst online: 10-09 20:43
Ik heb nu alleen het probleem als ik een hotkey gamaakt heb (bijvoorbeeld de 0 toets) dat ik dan nergens meer een 0 kan type :S.

(ook buiten het programma)

[ Voor 10% gewijzigd door lauwsa op 13-08-2010 18:53 ]


Acties:
  • 0 Henk 'm!

  • .oisyn
  • Registratie: September 2000
  • Laatst online: 21:24

.oisyn

Moderator Devschuur®

Demotivational Speaker

't is ook gebruikelijk om hotkeys te combineren met ctrl en evt. alt. Een andere optie is keyboard hooks, maar volgens mij krjig je dan exact hetzelfde probleem als met die GetAsyncKeyState()

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
lauwsa schreef op vrijdag 13 augustus 2010 @ 18:53:
Ik heb nu alleen het probleem als ik een hotkey gamaakt heb (bijvoorbeeld de 0 toets) dat ik dan nergens meer een 0 kan type :S.

(ook buiten het programma)
Euh, wat had je dan verwacht :? Je registreert een global hotkey en vindt het dan raar dat 'ie precies doet wat je 'm opdraagt? En het is je nooit opgevallen dat hotkeys altijd in combinatie met 1 of meerdere control-keys (ctrl/shift/alt) gebruikt worden?

Overigens: Waar hoort mijn topic?
SEA >> PRG

[ Voor 10% gewijzigd door RobIII op 13-08-2010 19:58 ]

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!

  • lauwsa
  • Registratie: Juli 2010
  • Laatst online: 10-09 20:43
Ik zal morgen eens proberen als die het wel doen,
bedankt
RobIII schreef op vrijdag 13 augustus 2010 @ 19:47:
[...]

Euh, wat had je dan verwacht :? Je registreert een global hotkey en vindt het dan raar dat 'ie precies doet wat je 'm opdraagt? En het is je nooit opgevallen dat hotkeys altijd in combinatie met 1 of meerdere control-keys (ctrl/shift/alt) gebruikt worden?

Overigens: Waar hoort mijn topic?
SEA >> PRG
Ik had meer verwacht als er je op je toetsenbord bijvoorbeeld een 0 typed, dat er dan ergens true door word gegeven in het script om zo maar te zeggen.

En dit is toch programmeren, dus dan zit het toch wel goed zou ik zeggen :P
"Problemen met applicatieprogrammering of serversided scripting."


Edit:

Ow zo, had ik hem dan daar neer gezet. Sorry :$

[ Voor 10% gewijzigd door lauwsa op 13-08-2010 20:29 ]


Acties:
  • 0 Henk 'm!

  • denyos
  • Registratie: Februari 2004
  • Laatst online: 22:33
Er is een groot verschil tussen ontwikkelen en Software Engineering en Architecture, daar SEA (de plek waar je topic in eerste instantie stond) over het algemeen puur theoretisch is en gaat over het bedenken van je architectuur en de opzet van je programma. Dus niet daadwekelijk over de code. Daarom staat ook het volgende boven de topiclijst in SEA: "Het forum om alles te bespreken dat vooraf gaat aan het daadwerkelijk programmeren. Bespreek hier je denkwijzen, modellen en programma-architectuur."

[ Voor 26% gewijzigd door denyos op 13-08-2010 20:29 ]

Strava


Acties:
  • 0 Henk 'm!

  • lauwsa
  • Registratie: Juli 2010
  • Laatst online: 10-09 20:43
Ik dacht dat ik hem bij programmeren gezet had, en dat RobIII bedoelde dat hij na SEA moest.
Sorry

Acties:
  • 0 Henk 'm!

  • lauwsa
  • Registratie: Juli 2010
  • Laatst online: 10-09 20:43
Ik heb nu een hotkey geregistreert
Alleen hoe kan ik zien welke er ingedrukt is.

Ik heb het nu met een switch geprobeert met de waarde LOWORD(wParam).
En als case case HOTKEY_A: .

Alleen ik krijg steeds deze foutmelding
c:\documents and settings\owner\my documents\visual studio 2008\projects\key\key\key.cpp(35) : error C2051: case expression not constant

Ik zie niet wat ik fout doe.

Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
Het wordt je anders precies verteld:
lauwsa schreef op zondag 15 augustus 2010 @ 12:52:

c:\documents and settings\owner\my documents\visual studio 2008\projects\key\key\key.cpp(35) : error C2051: case expression not constant
Zonder relevante code kunnen wij hier ook weinig mee natuurlijk en onze glazen bol is net ter reparatie bij de bollenwinkel. Wat je wél had kunnen doen is zelf een beetje moeite investeren in het oplossen van je probleem; dat was waarschijnlijk sneller gegaan dan hier een post plaatsen en gaan zitten duimendraaien tot je een antwoord hebt.

[ Voor 25% gewijzigd door RobIII op 15-08-2010 14:00 ]

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!

  • lauwsa
  • Registratie: Juli 2010
  • Laatst online: 10-09 20:43
Edit:

Zoals gevraagd de code die ik nu heb:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include "stdafx.h"
#include <windows.h>
#include <iostream>
#include <string>

using namespace std;

int main() {
    int check;

    RegisterHotKey(NULL,1,NULL,0x30);   
    RegisterHotKey(NULL,2,MOD_SHIFT,0x31);      
    RegisterHotKey(NULL,3,MOD_SHIFT,0x32);          
    RegisterHotKey(NULL,4,MOD_SHIFT,0x33);          


    MSG msg = {0};
    while (GetMessage(&msg, NULL, 0, 0) != 0) {
        cout << "hier";
        if (msg.message == WM_HOTKEY) {
            printf("In WM_HOTKEY");
            

            if( WM_HOTKEY == 1 ) {
                printf("A");
            }

            if( WM_HOTKEY == 2 ) {
                printf("B");;
            }

            if( WM_HOTKEY == 3 ) {
                printf("C");
            }

            if ( WM_HOTKEY == 4 ) {
                printf("D");
            }

        }
    }
    system("pause");
}


De hotkey's doen het nu, alleen nu moet ik een andere manier vinden om te kijken als de hotkey's werken. De WM_HOTKEY == 1 etc zijn er voor om maar wat in de if te hebben.

[ Voor 77% gewijzigd door lauwsa op 15-08-2010 19:02 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
lauwsa schreef op zondag 15 augustus 2010 @ 18:06:
alleen nu moet ik een andere manier vinden om te kijken als de hotkey's werken
Nou, wat heb je dan al geprobeerd/gezocht/gevonden? Je doet nu niets anders dan wat code plaatsen en verwachten dat wij voor jou wel even invullen wat er op 1/2/3/4 moet komen staan. En zo werkt het hier niet: scriptrequest. We verwachten, zoals je in onze Quickstart vast al gelezen hebt, wel eigen initiatief en inzet en dat bespeur ik niet in je topic en post.

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!

  • lauwsa
  • Registratie: Juli 2010
  • Laatst online: 10-09 20:43
Ik heb geprobeerd om via een switch te kijken wat er ingetoetst is, alleen dan kreeg ik het constant probleem.
Maar onder de code had ik gezet dat ik nog aan het zoeken was hoe ik dat kon doen ;)

Acties:
  • 0 Henk 'm!

  • farlane
  • Registratie: Maart 2000
  • Laatst online: 22:02

Somniferous whisperings of scarlet fields. Sleep calling me and in my dreams i wander. My reality is abandoned (I traverse afar). Not a care if I never everwake.


Acties:
  • 0 Henk 'm!

  • lauwsa
  • Registratie: Juli 2010
  • Laatst online: 10-09 20:43
Ik heb het gevonden, met wParam kan je zien welke ingedrukt is.
Heel erg bedankt iedereen.

Als jullie weten hoe ik het gedaan heb roep dan maar dan post ik het wel ;)
En dit werkt echt perfect onder windows xp :D

[ Voor 12% gewijzigd door lauwsa op 16-08-2010 11:59 ]


Acties:
  • 0 Henk 'm!

  • RobIII
  • Registratie: December 2001
  • Niet online

RobIII

Admin Devschuur®

^ Romeinse Ⅲ ja!

(overleden)
[b]lauwsa schreef op maandag 16 augustus 2010 @ 11:58:[/b

Als jullie weten hoe ik het gedaan heb roep dan maar dan post ik het wel ;)
En dit werkt echt perfect onder windows xp :D
Het is sowieso altijd fijn als je je oplossing post; op die manier hebben anderen ook nog iets aan je topic mochten ze er met een zoektoch op google of onze eigen search ooit op stuiten ;) Zie daarvoor ook onze faq betreffende topiceinde.

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!

  • lauwsa
  • Registratie: Juli 2010
  • Laatst online: 10-09 20:43
code:
1
2
3
4
5
6
7
RegisterHotKey(NULL,1,NULL,0x71);   
    MSG msg = {0};
    while (GetMessage(&msg, NULL, 0, 0) != 0) {
        if (msg.message == WM_HOTKEY) {
            if( msg.wParam == 1 ) {
                //Hotkey met id 1
            }
Pagina: 1