Simulet un Alt Entrée

cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 - 11 nov. 2006 à 17:59
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 - 13 nov. 2006 à 14:39
Salut tous, donc voilà, j'suis nouveau en asm
J'ai un vieux projet à faire pour l'école en pascal :) héhé ( un sudoku :s )
Et je voudrais donc lancer l'application directement en Pleine écran

Donc j'ai essayer l'interruption 10h avec MOV ax,13h avant pour passer en mode Graphique
J'ai un drole de truc après donc c'est mort

Après j'ai essayer l'interruption 16h avec MOV ah, 5h juste avant
Il me faut alors placé le Scan Code et le code ASCII
Mais j'ai un souci
c'est une combinaison, et pas moyen de trouver...
J'ai le Scan Code de ALT 38h
Celui de Entrer 1Ch

J'ai le code ASCII de Entrer 13 mais pas celui de ALT...

Donc c'est quoi la solution pour simuler ce fichu Alt+Entrée ... :D

En vous remerciant ;)
ULARGE_INTEGERJokyQi=QI("Joky"

12 réponses

cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
11 nov. 2006 à 18:10
Biensur vous m'excuserez pour cette horrible faute ( Simulet )
Inattention évidemment

ULARGE_INTEGERJokyQi=QI("Joky"
0
nightlord666 Messages postés 746 Date d'inscription vendredi 17 juin 2005 Statut Membre Dernière intervention 23 mai 2007 10
11 nov. 2006 à 19:03
C'est normal : je ne pense pas que ALT puisse avoir un code ASCII, car c'est vraiment inutile. Il faut que tu cherche un moyen pour simuler une touche avec le scancode.

Sinon, le mode graphique peut être une bonne idée.

<hr size="2" width="100%" />Sachant qu'on peut toujours enlever une ligne à un programme, et que dans un programme il y a toujours un bug, un programme peut se résumer à une ligne avec un bug.
0
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
11 nov. 2006 à 19:37
Si c'est pour utiliser avec les interruptions DOS, il existe un tampon clavier qui mémorise la suite de touche et fait BEEP quand il est plein.
Interroger ce tampon en mode scrutation,appuyer sur ALT + la touche et voir ce qu'il y a dans le tampon.
L'adresse du tampon n'a rien de secret,un peu de documentation en livre de poche suffit.

                    TouEnMasm
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
12 nov. 2006 à 01:10
SendInput() t'est interdit ???

ciao...
BruNews, MVP VC++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
12 nov. 2006 à 03:34
En ce qui concerne l' utilisation de SendInput c'est mort parce que j'suis sous turbo pascal lol :D donc voilà impossible
J'vais me renseigner quand même sur le reste pour voir si y'a moyen de chopper une fonction

ULARGE_INTEGERJokyQi=QI("Joky"
0
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
12 nov. 2006 à 18:41
Chanceux,
Un vieux source en 16 bits donne la réponse
adresse du tampon clavier
seg 40H: offset  1AH
Le principe est que a l'adresse si +2 se trouve un byte donnant la longeur des codes touches écrits.Lire la doc devrait être plus facile.

suit le source pour le clavier:

        CLAVIER: PUSH AX
                 PUSH BX
                 PUSH CX
                 PUSH ES
                 PUSH DI
                 PUSH SI
                 LEA  DI,INSERE
                 MOV  AL,[DI]
                 CMP  AL,0
                 JZ   VIDE                ;rien a inserer?
                 PUSH DI
          PLEIN: MOV  AL,[DI]
                 INC  DI
                 CMP  AL,0
                 JNZ  PLEIN
                 MOV  CX,DI
                 DEC  CX
                 POP  DI
                 SUB  CX,DI               ;CX nombre de caracteres a inscrire
                 LEA  SI,TAMP_VIDE
                 XOR  BX,BX
                 MOV  BL,CL
                 ADD  BL,CL
                 ADD  BL,1EH
                 MOV  [SI+2],BL           ;offset fin tampon
                 XOR  AX,AX
                 ADD  SI,4
           QQQS: MOV  AL,[DI]
                 MOV  [SI],AX
                 INC  DI                  ;ecrit dans tampon
                 INC  SI
                 INC  SI
                 LOOP QQQS


           VIDE: MOV  AX,40H              ;recopie dans tamp clavier
                 MOV  ES,AX
                 MOV  DI,1AH              ;ES:[DI] tamp clavier
                 MOV  CX,18               ;16 DW pour le tampon
                 LEA  SI,TAMP_VIDE
                 CLD                      ;incremente le pointeur
                 REP  MOVSW               ;copie TAMP dans tamp clavier 40:1A H
                 POP  SI
                 POP  DI
                 POP  ES
                 POP  CX
                 POP  BX
                 POP  AX
                 SAHF
                 RET
     INSERE DB 'COMPACT\',16 DUP(0),'FIN TAMPON'  ;16 dw,lettres
     TAMP_VIDE DB 1EH,00,1EH,00      ;seg 40H: offset  1AH
                 DB   32 DUP(0)
0
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
12 nov. 2006 à 18:59
la fonction 16h est la plus apropriée pour tester l'état des touches alt ctrl
0
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
12 nov. 2006 à 19:05
j'ai glissé,
fonction 2 ah =2
sortie al=octet d'état
3 alt actionné
la doc précise que cet octet d'état se trouve a l'adresse 40:17
en 40:18
l'octet =1 alt gauche enfoncé
0
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
12 nov. 2006 à 19:15
Pour tout savoir sur l'interruption 16h
Voir mon site ,page de liens,DOS .... en haut de page interruptions dos


L'editeur içi refuse de me faire un copier coller


                             La c'est tout,


                                              ToutEnMasm


 
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
13 nov. 2006 à 11:47
Oula oula oula lol
J'vais lire ça calmement, parce que là ça fait beaucoup d'un coup j'vais voir ton site ;)

ULARGE_INTEGERJokyQi=QI("Joky"
0
cs_Joky Messages postés 1787 Date d'inscription lundi 22 novembre 2004 Statut Membre Dernière intervention 31 janvier 2009 2
13 nov. 2006 à 12:25
Bon en faite j'ai ça comme fonction

PROCEDURE keybd_event( Scan, Ascii : BYTE );
BEGIN
          ASM
                MOV AH, 05h
                MOV CH, Scan
                MOV CL, Ascii
                INT 16h
          END;
END;

Après d'après la doc sur la liste des interruptions

Notes:
Under DESQview, a number of "keystrokes" invoke specific
DESQview-related actions when they are read from the keyboard
buffer

Values for pseudo-keystrokes for DESQview:
38FBh or FB00h switch to next window (only if main menu already popped up)
38FCh or FC00h pop up DESQview main menu
38FEh or FE00h close the current window
38FFh or FF00h pop up DESQview learn menu

Donc on parle de raccourci ( Alt-Tab pr le premier ) ( Alt F4 ) pour le 3ème et on voit bien le 38 ( Scan code de Alt ) bien présent
Le truc, c'est que j'vois pas dans quel registre le mettre
Vu que CH recoit un scan code et CL le code ascii
Donc si j'met dans CX ça va tout écrasé je suppose ( Je pense que CX c'est CH + CL )
Enfin bref c'est bizarre :)
ULARGE_INTEGERJokyQi=QI("Joky"
0
ToutEnMasm Messages postés 587 Date d'inscription jeudi 28 novembre 2002 Statut Membre Dernière intervention 13 décembre 2022 3
13 nov. 2006 à 14:39
Salut,
Tout n'a pas l'air très clair.
La fonction se contente de charger le tampon clavier avec des combinaisons de touches.
cx =38FBh
> CH =38h et CL=0FBh


si ecx existe (32)  ecx == 000038FBh avec même valeurs pour cx,ch et cl.










 
0
Rejoignez-nous