How translate virtual key to asc code?

How translate virtual key to asc code?

Postby emotta_no » Tue Jul 22, 2014 4:39 pm

How translate "virtual key" to "asc"?

In this code I have the number virtual key. I need the asc code.

Code: Select all  Expand view

#include "fivewin.ch"

Function TestHook()
Local nKey
Local oWnd
Private oTimer

   DEFINE WINDOW oWnd TITLE "3D objects"


   ACTIVATE WINDOW oWnd On Init (MyHook(oWnd))

IF UNINSTALL_READ_KEYBOARD() == .F.
   ? "ERROR al desinstalar READ_KEYBOARD"
ENDIF                                                      

Return

Static Function MyHook(oWnd)

IF INSTALL_READ_KEYBOARD() == .F.
   ? 'ERROR al instalar READ_KEYBOARD'
   Return
EndIf

DEFINE TIMER oTimer OF oWnd INTERVAL 100 ACTION Processar_Tecla()
oTimer:Activate()


Return

Static Function Processar_Tecla()
Local nKey := GET_LAST_VK(1)
Local nChar
Static nKeyAnt := 0
oTimer:DeActivate()                                                          

If nKey # nKeyAnt
   nKeyAnt := nKey
   nChar   := GET_LAST_VK(3)
   MsgStop(Str(nKey,6)+" "+Str(GET_LAST_VK(2),10)+" "+Str(GET_LAST_VK(3),6)+" "+Str(GET_LAST_VK(4),6))
EndIf
oTimer:Activate()

Return

*##################################################################################################
* FUNCIONES EN C    
*##################################################################################################

#pragma begindump

#include <windows.h>
#include <stdlib.h>
#include "hbapi.h"

#define WH_KEYBOARD_LL 13                                              

HINSTANCE hInst ; // Instance handle


HB_BOOL flag_hhk = FALSE;
HHOOK hhk = NULL;

HB_LONG VK_PRESIONADO = 0;
HB_LONG VK_lParam     = 0;
HB_LONG VK_Code       = 0;

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
  if (nCode < 0)
    return CallNextHookEx(hhk, nCode, wParam, lParam);
   
  VK_Code       = (LONG) nCode;
  VK_PRESIONADO = (long) wParam;
  VK_lParam     = (LONG) lParam;
 
 
  return CallNextHookEx(hhk, nCode, wParam, lParam);
}


HB_FUNC (GET_LAST_VK)
{
  int iPCount;

  int iAscCod;
 
  iAscCod = 65 // It's here I need to convert.


  iPCount = hb_pcount();

  if (iPCount == 0)
     hb_retnl(VK_PRESIONADO);
  else if (hb_parni(1) == 1)
     hb_retnl(VK_PRESIONADO);
  else if (hb_parni(1) == 2)
     hb_retnl(VK_lParam);
  else if (hb_parni(1) == 3)
     hb_retnl(VK_Code);
  else if (hb_parni(1) == 4)
     hb_retnl(iAscCod);


}

HB_FUNC (GET_LAST_VK_NAME)
{
 CHAR cadena [128];

 GetKeyNameText (VK_lParam, (LPTSTR) &cadena, 128);
 hb_retc (cadena);
 
}


HB_FUNC (INSTALL_READ_KEYBOARD)
{


 if (flag_hhk == FALSE)
 {  hhk = SetWindowsHookEx (WH_KEYBOARD_LL, (HOOKPROC)KeyboardProc, hInst, 0 );
   
    if (hhk == NULL)
      hb_retl (FALSE);
    else
    { flag_hhk = TRUE;  
      hb_retl (TRUE);          
    }
 }
 else
   hb_retl (TRUE);  
}

HB_FUNC (UNINSTALL_READ_KEYBOARD)
{
 if (flag_hhk == TRUE)
 { if (UnhookWindowsHookEx (hhk) == TRUE)
   { flag_hhk = FALSE;
     hb_retl (TRUE);    
   }
   else
     hb_retl (FALSE);
 }
 else
   hb_retl (TRUE);  
}

#pragma enddump

 
emotta_no
 
Posts: 33
Joined: Thu Jul 04, 2013 9:28 pm

Re: How translate virtual key to asc code?

Postby sambomb » Tue Jul 22, 2014 6:48 pm

Asc( nChr ) // Return the character 65 -> "A"
Email: SamirSSabreu@gmail.com
MSN: SamirAbreu@hotmail.com
Skype: SamirAbreu
xHarbour 1.1.0 + FwXh 8.02
xHarbour 1.2.1 + Fwhh 10.6
User avatar
sambomb
 
Posts: 385
Joined: Mon Oct 13, 2008 11:26 am
Location: Itaocara - RJ - Brasil

Re: How translate virtual key to asc code?

Postby emotta_no » Tue Jul 22, 2014 6:53 pm

No, It'snt solution....

"65" is AscCode.... I have virtualkey and I need to convert to asc code.
emotta_no
 
Posts: 33
Joined: Thu Jul 04, 2013 9:28 pm

Re: How translate virtual key to asc code?

Postby emotta_no » Tue Jul 22, 2014 8:25 pm

I managed to do, thanks.

The code is this.

Code: Select all  Expand view

#include "fivewin.ch"

Function TestHook()
Local nKey
Local oWnd
Private oTimer,oTimer2

   DEFINE WINDOW oWnd TITLE "3D objects"


   ACTIVATE WINDOW oWnd On Init (MyHook(oWnd))

IF UNINSTALL_READ_KEYBOARD() == .F.
   ? "ERROR al desinstalar READ_KEYBOARD"
ENDIF                                                      

Return

Static Function MyHook(oWnd)

IF INSTALL_READ_KEYBOARD() == .F.
   ? 'ERROR al instalar READ_KEYBOARD'
   Return
EndIf

DEFINE TIMER oTimer OF oWnd INTERVAL 100 ACTION Processar_Tecla()
oTimer:Activate()

//DEFINE TIMER oTimer2 OF oWnd INTERVAL 3000 ACTION (SendKey(30))
//oTimer2:Activate()


Return

Static Function Processar_Tecla()
Local nKey := GET_LAST_VK(1)
Local nChar
Static nKeyAnt := 0
oTimer:DeActivate()                                                          


If nKey # nKeyAnt
   nKeyAnt := nKey
   nChar   := GET_LAST_VK(3)
   MsgStop(Str(nKey,6)+" "+Str(GET_LAST_VK(2),10)+" "+Str(GET_LAST_VK(3),6)+" Codigo asc = "+Str(GET_LAST_VK(4),10))
EndIf
oTimer:Activate()

Return

*##################################################################################################
* FUNCIONES EN C    
*##################################################################################################

#pragma begindump

#include <windows.h>
#include <stdlib.h>
#include "hbapi.h"

#define WH_KEYBOARD_LL 13                                              

HINSTANCE hInst ; // Instance handle


HB_BOOL flag_hhk = FALSE;
HHOOK hhk = NULL;

HB_LONG VK_PRESIONADO = 0;
HB_LONG VK_lParam     = 0;
HB_LONG VK_Code       = 0;
HB_LONG VK_Asc        = 0;

typedef struct
{
  DWORD     vkCode;
  DWORD     scanCode;
  DWORD     flags;
  DWORD     time;
  ULONG_PTR dwExtraInfo;
} KBDLLHOOKSTRUCT;


LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
  KBDLLHOOKSTRUCT* nAsc = (KBDLLHOOKSTRUCT*)lParam;
  DWORD nvcode;
 
  nvcode = nAsc->vkCode;
 
  if (nCode < 0)
    return CallNextHookEx(hhk, nCode, wParam, lParam);

  VK_Code       = (LONG) nCode;
  VK_PRESIONADO = (long) wParam;
  VK_lParam     =  (LONG) lParam;
  VK_Asc        =  (LONG) nvcode;
 
 
  return CallNextHookEx(hhk, nCode, wParam, lParam);
}


HB_FUNC (GET_LAST_VK)
{
  int iPCount;

  iPCount = hb_pcount();

  if (iPCount == 0)
     hb_retnl(VK_PRESIONADO);
  else if (hb_parni(1) == 1)
     hb_retnl(VK_PRESIONADO);
  else if (hb_parni(1) == 2)
     hb_retnl(VK_lParam);
  else if (hb_parni(1) == 3)
     hb_retnl(VK_Code);
  else if (hb_parni(1) == 4)
     hb_retnl(VK_Asc);


}

HB_FUNC (GET_LAST_VK_NAME)
{
 CHAR cadena [128];

 GetKeyNameText (VK_lParam, (LPTSTR) &cadena, 128);
 hb_retc (cadena);
 
}


HB_FUNC (INSTALL_READ_KEYBOARD)
{


 if (flag_hhk == FALSE)
 {  hhk = SetWindowsHookEx (WH_KEYBOARD_LL, (HOOKPROC)KeyboardProc, hInst, 0 );
   
    if (hhk == NULL)
      hb_retl (FALSE);
    else
    { flag_hhk = TRUE;  
      hb_retl (TRUE);          
    }
 }
 else
   hb_retl (TRUE);  
}

HB_FUNC (UNINSTALL_READ_KEYBOARD)
{
 if (flag_hhk == TRUE)
 { if (UnhookWindowsHookEx (hhk) == TRUE)
   { flag_hhk = FALSE;
     hb_retl (TRUE);    
   }
   else
     hb_retl (FALSE);
 }
 else
   hb_retl (TRUE);  
}

#pragma enddump

 
emotta_no
 
Posts: 33
Joined: Thu Jul 04, 2013 9:28 pm

Re: How translate virtual key to asc code?

Postby emotta_no » Tue Jul 22, 2014 9:39 pm

Code: Select all  Expand view

Virtual-Key Codes

The following table shows the symbolic constant names, hexadecimal values, and mouse or keyboard equivalents for the virtual-key codes used by the system. The codes are listed in numeric order.

Constant/value  Description

VK_LBUTTON
0x01

   

Left mouse button

VK_RBUTTON
0x02

   

Right mouse button

VK_CANCEL
0x03

   

Control-break processing

VK_MBUTTON
0x04

   

Middle mouse button (three-button mouse)

VK_XBUTTON1
0x05

   

X1 mouse button

VK_XBUTTON2
0x06

   

X2 mouse button

-
0x07

   

Undefined

VK_BACK
0x08

   

BACKSPACE key

VK_TAB
0x09

   

TAB key

-
0x0A-0B

   

Reserved

VK_CLEAR
0x0C

   

CLEAR key

VK_RETURN
0x0D

   

ENTER key

-
0x0E-0F

   

Undefined

VK_SHIFT
0x10

   

SHIFT key

VK_CONTROL
0x11

   

CTRL key

VK_MENU
0x12

   

ALT key

VK_PAUSE
0x13

   

PAUSE key

VK_CAPITAL
0x14

   

CAPS LOCK key

VK_KANA
0x15

   

IME Kana mode

VK_HANGUEL
0x15

   

IME Hanguel mode (maintained for compatibility; use VK_HANGUL)

VK_HANGUL
0x15

   

IME Hangul mode

-
0x16

   

Undefined

VK_JUNJA
0x17

   

IME Junja mode

VK_FINAL
0x18

   

IME final mode

VK_HANJA
0x19

   

IME Hanja mode

VK_KANJI
0x19

   

IME Kanji mode

-
0x1A

   

Undefined

VK_ESCAPE
0x1B

   

ESC key

VK_CONVERT
0x1C

   

IME convert

VK_NONCONVERT
0x1D

   

IME nonconvert

VK_ACCEPT
0x1E

   

IME accept

VK_MODECHANGE
0x1F

   

IME mode change request

VK_SPACE
0x20

   

SPACEBAR

VK_PRIOR
0x21

   

PAGE UP key

VK_NEXT
0x22

   

PAGE DOWN key

VK_END
0x23

   

END key

VK_HOME
0x24

   

HOME key

VK_LEFT
0x25

   

LEFT ARROW key

VK_UP
0x26

   

UP ARROW key

VK_RIGHT
0x27

   

RIGHT ARROW key

VK_DOWN
0x28

   

DOWN ARROW key

VK_SELECT
0x29

   

SELECT key

VK_PRINT
0x2A

   

PRINT key

VK_EXECUTE
0x2B

   

EXECUTE key

VK_SNAPSHOT
0x2C

   

PRINT SCREEN key

VK_INSERT
0x2D

   

INS key

VK_DELETE
0x2E

   

DEL key

VK_HELP
0x2F

   

HELP key

0x30

   

0 key

0x31

   

1 key

0x32

   

2 key

0x33

   

3 key

0x34

   

4 key

0x35

   

5 key

0x36

   

6 key

0x37

   

7 key

0x38

   

8 key

0x39

   

9 key

-
0x3A-40

   

Undefined

0x41

   

A key

0x42

   

B key

0x43

   

C key

0x44

   

D key

0x45

   

E key

0x46

   

F key

0x47

   

G key

0x48

   

H key

0x49

   

I key

0x4A

   

J key

0x4B

   

K key

0x4C

   

L key

0x4D

   

M key

0x4E

   

N key

0x4F

   

O key

0x50

   

P key

0x51

   

Q key

0x52

   

R key

0x53

   

S key

0x54

   

T key

0x55

   

U key

0x56

   

V key

0x57

   

W key

0x58

   

X key

0x59

   

Y key

0x5A

   

Z key

VK_LWIN
0x5B

   

Left Windows key (Natural keyboard)

VK_RWIN
0x5C

   

Right Windows key (Natural keyboard)

VK_APPS
0x5D

   

Applications key (Natural keyboard)

-
0x5E

   

Reserved

VK_SLEEP
0x5F

   

Computer Sleep key

VK_NUMPAD0
0x60

   

Numeric keypad 0 key

VK_NUMPAD1
0x61

   

Numeric keypad 1 key

VK_NUMPAD2
0x62

   

Numeric keypad 2 key

VK_NUMPAD3
0x63

   

Numeric keypad 3 key

VK_NUMPAD4
0x64

   

Numeric keypad 4 key

VK_NUMPAD5
0x65

   

Numeric keypad 5 key

VK_NUMPAD6
0x66

   

Numeric keypad 6 key

VK_NUMPAD7
0x67

   

Numeric keypad 7 key

VK_NUMPAD8
0x68

   

Numeric keypad 8 key

VK_NUMPAD9
0x69

   

Numeric keypad 9 key

VK_MULTIPLY
0x6A

   

Multiply key

VK_ADD
0x6B

   

Add key

VK_SEPARATOR
0x6C

   

Separator key

VK_SUBTRACT
0x6D

   

Subtract key

VK_DECIMAL
0x6E

   

Decimal key

VK_DIVIDE
0x6F

   

Divide key

VK_F1
0x70

   

F1 key

VK_F2
0x71

   

F2 key

VK_F3
0x72

   

F3 key

VK_F4
0x73

   

F4 key

VK_F5
0x74

   

F5 key

VK_F6
0x75

   

F6 key

VK_F7
0x76

   

F7 key

VK_F8
0x77

   

F8 key

VK_F9
0x78

   

F9 key

VK_F10
0x79

   

F10 key

VK_F11
0x7A

   

F11 key

VK_F12
0x7B

   

F12 key

VK_F13
0x7C

   

F13 key

VK_F14
0x7D

   

F14 key

VK_F15
0x7E

   

F15 key

VK_F16
0x7F

   

F16 key

VK_F17
0x80

   

F17 key

VK_F18
0x81

   

F18 key

VK_F19
0x82

   

F19 key

VK_F20
0x83

   

F20 key

VK_F21
0x84

   

F21 key

VK_F22
0x85

   

F22 key

VK_F23
0x86

   

F23 key

VK_F24
0x87

   

F24 key

-
0x88-8F

   

Unassigned

VK_NUMLOCK
0x90

   

NUM LOCK key

VK_SCROLL
0x91

   

SCROLL LOCK key

0x92-96

   

OEM specific

-
0x97-9F

   

Unassigned

VK_LSHIFT
0xA0

   

Left SHIFT key

VK_RSHIFT
0xA1

   

Right SHIFT key

VK_LCONTROL
0xA2

   

Left CONTROL key

VK_RCONTROL
0xA3

   

Right CONTROL key

VK_LMENU
0xA4

   

Left MENU key

VK_RMENU
0xA5

   

Right MENU key

VK_BROWSER_BACK
0xA6

   

Browser Back key

VK_BROWSER_FORWARD
0xA7

   

Browser Forward key

VK_BROWSER_REFRESH
0xA8

   

Browser Refresh key

VK_BROWSER_STOP
0xA9

   

Browser Stop key

VK_BROWSER_SEARCH
0xAA

   

Browser Search key

VK_BROWSER_FAVORITES
0xAB

   

Browser Favorites key

VK_BROWSER_HOME
0xAC

   

Browser Start and Home key

VK_VOLUME_MUTE
0xAD

   

Volume Mute key

VK_VOLUME_DOWN
0xAE

   

Volume Down key

VK_VOLUME_UP
0xAF

   

Volume Up key

VK_MEDIA_NEXT_TRACK
0xB0

   

Next Track key

VK_MEDIA_PREV_TRACK
0xB1

   

Previous Track key

VK_MEDIA_STOP
0xB2

   

Stop Media key

VK_MEDIA_PLAY_PAUSE
0xB3

   

Play/Pause Media key

VK_LAUNCH_MAIL
0xB4

   

Start Mail key

VK_LAUNCH_MEDIA_SELECT
0xB5

   

Select Media key

VK_LAUNCH_APP1
0xB6

   

Start Application 1 key

VK_LAUNCH_APP2
0xB7

   

Start Application 2 key

-
0xB8-B9

   

Reserved

VK_OEM_1
0xBA

   

Used for miscellaneous characters; it can vary by keyboard.

For the US standard keyboard, the ';:' key

VK_OEM_PLUS
0xBB

   

For any country/region, the '+' key

VK_OEM_COMMA
0xBC

   

For any country/region, the ',' key

VK_OEM_MINUS
0xBD

   

For any country/region, the '-' key

VK_OEM_PERIOD
0xBE

   

For any country/region, the '.' key

VK_OEM_2
0xBF

   

Used for miscellaneous characters; it can vary by keyboard.

For the US standard keyboard, the '/?' key

VK_OEM_3
0xC0

   

Used for miscellaneous characters; it can vary by keyboard.

For the US standard keyboard, the '`~' key

-
0xC1-D7

   

Reserved

-
0xD8-DA

   

Unassigned

VK_OEM_4
0xDB

   

Used for miscellaneous characters; it can vary by keyboard.

For the US standard keyboard, the '[{' key

VK_OEM_5
0xDC

   

Used for miscellaneous characters; it can vary by keyboard.

For the US standard keyboard, the '\|' key

VK_OEM_6
0xDD

   

Used for miscellaneous characters; it can vary by keyboard.

For the US standard keyboard, the ']}' key

VK_OEM_7
0xDE

   

Used for miscellaneous characters; it can vary by keyboard.

For the US standard keyboard, the 'single-quote/double-quote' key

VK_OEM_8
0xDF

   

Used for miscellaneous characters; it can vary by keyboard.

-
0xE0

   

Reserved

0xE1

   

OEM specific

VK_OEM_102
0xE2

   

Either the angle bracket key or the backslash key on the RT 102-key keyboard

0xE3-E4

   

OEM specific

VK_PROCESSKEY
0xE5

   

IME PROCESS key

0xE6

   

OEM specific

VK_PACKET
0xE7

   

Used to pass Unicode characters as if they were keystrokes. The VK_PACKET key is the low word of a 32-bit Virtual Key value used for non-keyboard input methods. For more information, see Remark in KEYBDINPUT, SendInput, WM_KEYDOWN, and WM_KEYUP

-
0xE8

   

Unassigned

0xE9-F5

   

OEM specific

VK_ATTN
0xF6

   

Attn key

VK_CRSEL
0xF7

   

CrSel key

VK_EXSEL
0xF8

   

ExSel key

VK_EREOF
0xF9

   

Erase EOF key

VK_PLAY
0xFA

   

Play key

VK_ZOOM
0xFB

   

Zoom key

VK_NONAME
0xFC

   

Reserved

VK_PA1
0xFD

   

PA1 key

VK_OEM_CLEAR
0xFE

   

Clear key
 
emotta_no
 
Posts: 33
Joined: Thu Jul 04, 2013 9:28 pm

Re: How translate virtual key to asc code?

Postby James Bott » Wed Jul 23, 2014 1:12 am

All the v key codes are in FWH\include\vkey.ch
User avatar
James Bott
 
Posts: 4840
Joined: Fri Nov 18, 2005 4:52 pm
Location: San Diego, California, USA

Re: How translate virtual key to asc code?

Postby emotta_no » Wed Jul 23, 2014 1:19 pm

Thanks James, I got...
emotta_no
 
Posts: 33
Joined: Thu Jul 04, 2013 9:28 pm


Return to FiveWin for Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 95 guests