READ THE KEYBOARD

You can share your experience with HMG. Share with some screenshots/project details so that others will also be benefited.

Moderator: Rathinagiri

User avatar
srvet_claudio
Posts: 2044
Joined: Thu Feb 25, 2010 8:43 pm
Location: Uruguay
Has thanked: 35 times
Been thanked: 146 times
Contact:

Re: READ THE KEYBOARD

Post by srvet_claudio » Wed Apr 14, 2010 5:41 pm

Thanks Alex.
Alex Gustow wrote:But... can anybody translate comments etc in this to English (for better understanding and "internationalization")? I think it helps to many guys whose Spanish is "not the best"
You are right.
My excuses, my English is very poor.
Best regards,
Claudio Soto
Best regards.
Dr. Claudio Soto
(from Uruguay)
http://srvet.blogspot.com

User avatar
esgici
Posts: 4508
Joined: Wed Jul 30, 2008 9:17 pm
DBs Used: DBF
Location: iskenderun / Turkiye
Has thanked: 386 times
Been thanked: 111 times
Contact:

Post by esgici » Wed Apr 14, 2010 6:57 pm

Alex Gustow wrote:...translate comments etc in this to English (for better understanding and "internationalization")? I think it helps to many guys whose Spanish is "not the best" [like me :) ].
I agree heartily with Alex :!:

Saludos, regards

--

Esgici
Viva INTERNATIONAL HMG :D

User avatar
srvet_claudio
Posts: 2044
Joined: Thu Feb 25, 2010 8:43 pm
Location: Uruguay
Has thanked: 35 times
Been thanked: 146 times
Contact:

Post by srvet_claudio » Wed Apr 14, 2010 7:15 pm

Alex Gustow wrote:translate comments etc in this to English (for better understanding and "internationalization")? I think it helps to many guys whose Spanish is "not the best"
Hi all,
READ THE KEYBOARD in English (using google).
Best regards,
Claudio Soto

Code: Select all

****************************************************************************
* PROGRAMA: READ THE KEYBOARD 
* LENGUAJE: HARBOUR-MINIGUI 3.0.29
* FECHA:    13 ABRIL 2010
* AUTOR:    CLAUDIO SOTO
* PAIS:     URUGUAY
* E-MAIL:   srvet@adinet.com.uy
****************************************************************************

***************************************************************************************************
* DESCRIPTION
*
* Read keyboard input entries and returns information about the key pressed.
* These functions intercept keyboard messages from the system will send the application
* (WM_KEYUP and WM_KEYDOWN) and stores information about the virtual key generated.
*
***************************************************************************************************

***************************************************************************************************
* SYNTAX:
*
* INSTALL_READ_KEYBOARD ()   // Install the "driver" that reads the keyboard (returns. T. if successful) 
* UNINSTALL_READ_KEYBOARD () // Uninstall the "driver" that reads the keyboard (returns. T. if successful)
*
* GET_LAST_VK()              // Returns the virtual value (VK Code) of the key pressed 
* GET_LAST_VK_NAME()         // Returns the name of the virtual key press
*
* GET_STATE_VK_SHIFT ()      // Returns. T. if SHIFT key is pressed
* GET_STATE_VK_CONTROL ()    // Returns. T. if CONTROL key is pressed
* GET_STATE_VK_ALT ()        // Returns. T. if ALT key is pressed
*
* PAUSE_READ_VK (.T.)        // Pause reading keyboard in order to process the key pressed
* PAUSE_READ_VK (.F.)        // Restore keyboard reading after the pause
*
*******************************************************************************************************
* Virtual values (VK Code) of the different keys can be found in the file
* C:\hmg.3.0.29\MinGW\include\winuser.h
* 
* They begin with the prefix # define VK_
* For example, # define VK_SHIFT 16
*******************************************************************************************************


#include "minigui.ch"

Function Main

SET LANGUAGE TO ENGLISH 

	DEFINE WINDOW Form_1 ;
		AT 0,0 ;
		WIDTH 400 ;
		HEIGHT 600 ;
		TITLE 'READ THE KEYBOARD' ;
		MAIN 
     
        @  10 , 10 LABEL Label_1 AUTOSIZE BOLD FONTCOLOR RED
        @  40 , 10 LABEL Label_2 AUTOSIZE BOLD FONTCOLOR RED
        @  80 , 10 LABEL Label_3 AUTOSIZE BOLD FONTCOLOR BLUE
        @ 120 , 10 LABEL Label_4 AUTOSIZE BOLD FONTCOLOR BLUE
        @ 160 , 10 LABEL Label_5 AUTOSIZE BOLD FONTCOLOR BLUE
        @ 200 , 10 LABEL Label_6 AUTOSIZE BOLD FONTCOLOR BROWN
        @ 240 , 10 LABEL Label_7 AUTOSIZE BOLD FONTCOLOR BROWN
        @ 280 , 10 LABEL Label_8 AUTOSIZE BOLD FONTCOLOR BROWN
    
        @ 420 , 10 LABEL Label_9 AUTOSIZE BOLD
       
        @ 380 , 10 LABEL Label_10 VALUE "Press SHIFT + A open Dialog Box" AUTOSIZE BOLD
		
		@ 450 , 10 EDITBOX EditBox_1  WIDTH 200 HEIGHT 100 VALUE "Write" 

		IF INSTALL_READ_KEYBOARD () = .F.
		   MsgInfo ("ERROR when installing READ_KEYBOARD")
		ELSE
		   DEFINE TIMER timer_1 OF Form_1 INTERVAL 100  action Show_Key () 
		ENDIF
		
	//	IF UNINSTALL_READ_KEYBOARD () = .F.
	//	   MsgInfo ("ERROR when uninstalling READ_KEYBOARD")
	//  ELSE
	//     Form_1.Timer_1.Release
	//	ENDIF
				
	END WINDOW

	Form_1.Center 

	Form_1.Activate 

Return



Procedure Show_Key
  Form_1.Label_1.Value := "VK Code: " + str (GET_LAST_VK())
  Form_1.Label_2.Value := "VK Name:            " + GET_LAST_VK_NAME()
  Form_1.Label_3.Value := "Pressed SHIFT :     " + IF (GET_STATE_VK_SHIFT()=.T.,"Yes","No")
  Form_1.Label_4.Value := "Pressed CONTROL:    " + IF (GET_STATE_VK_CONTROL()=.T.,"Yes","No")
  Form_1.Label_5.Value := "Pressed ALT:        " + IF (GET_STATE_VK_ALT()=.T.,"Yes","No")
  Form_1.Label_6.Value := "CAPS LOCK:          " + IF (IsCapsLockActive() =.T.,"On","Off") // HMG function
  Form_1.Label_7.Value := "NUM LOCK:           " + IF (IsNumLockActive()  =.T.,"On","Off") // HMG function
  Form_1.Label_8.Value := "INSERT:             " + IF (IsInsertActive() =.T.,"On","Off")   // HMG function

  IF (GET_STATE_VK_SHIFT()=.T. .OR. IsCapsLockActive() =.T.) .AND. GET_LAST_VK() <> 0
      Form_1.Label_9.Value := "Writing in CAPS"
  ELSE
      Form_1.Label_9.Value := "Writing in MINISCULE"
  ENDIF
  
  
  IF GET_LAST_VK() = 65  .AND. GET_STATE_VK_SHIFT()=.T.  //  VK code  A = 65
      PAUSE_READ_VK (.T.) // Pause reading keyboard in order to process the key pressed
      Form_1.Timer_1.Enabled := .F.
       
      Msginfo ("Process the action of the SHIFT + A")
      
      Form_1.Timer_1.Enabled := .T.
      PAUSE_READ_VK (.F.) // Restore keyboard reading after the pause
  ENDIF
Return


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

#pragma begindump

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

BOOL flag_hhk = FALSE;
BOOL PAUSE_hhk = FALSE;
HHOOK hhk = NULL;
long VK_PRESIONADO = 0;
LONG VK_lParam = 0;


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


HB_FUNC (GET_STATE_VK_SHIFT)
{
   if (GetKeyState(VK_SHIFT) & 0x8000)
       hb_retl (TRUE); 
   else    
       hb_retl (FALSE);
}


HB_FUNC (GET_STATE_VK_CONTROL)
{
   if (GetKeyState(VK_CONTROL) & 0x8000)
       hb_retl (TRUE); 
   else    
       hb_retl (FALSE);
}


HB_FUNC (GET_STATE_VK_ALT)
{
   if (GetKeyState(VK_MENU) & 0x8000)
       hb_retl (TRUE); 
   else    
       hb_retl (FALSE);
}


HB_FUNC (GET_LAST_VK)
{  if (flag_hhk == TRUE)
       hb_retnl (VK_PRESIONADO);
   else
      hb_retnl (0);    
}


HB_FUNC (GET_LAST_VK_NAME)
{  CHAR cadena [128];

   if (flag_hhk == TRUE)
      {  GetKeyNameText (VK_lParam, (LPTSTR) &cadena, 128);
         hb_retc (cadena);
      }
   else
      hb_retc ("");    
}


HB_FUNC (PAUSE_READ_VK)
{  if (hb_pcount () == 1 && hb_parinfo (1) == HB_IT_LOGICAL)   
   {   if (hb_parl (1) == TRUE) 
       {   VK_PRESIONADO = 0;
           VK_lParam = 0;
       }     
       PAUSE_hhk = hb_parl (1);
   }
}


HB_FUNC (INSTALL_READ_KEYBOARD)
{  if (flag_hhk == FALSE)
   {    hhk = SetWindowsHookEx (WH_KEYBOARD, KeyboardProc, (HINSTANCE) NULL, GetCurrentThreadId());
        
        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

Best regards.
Dr. Claudio Soto
(from Uruguay)
http://srvet.blogspot.com

User avatar
esgici
Posts: 4508
Joined: Wed Jul 30, 2008 9:17 pm
DBs Used: DBF
Location: iskenderun / Turkiye
Has thanked: 386 times
Been thanked: 111 times
Contact:

Post by esgici » Wed Apr 14, 2010 7:23 pm

Thanks Dr.

By the way, does "srvt" means "speedy" :?: :D

Saludos cordiales.

--

Esgici
Viva INTERNATIONAL HMG :D

jparada
Posts: 255
Joined: Fri Jan 23, 2009 5:18 pm
Been thanked: 2 times

Post by jparada » Wed Apr 14, 2010 8:41 pm

Hola Claudio,

Muchas Gracias por esta implementación.

Realmente un gran esfuerzo de tu parte.

Saludos
Javier

User avatar
srvet_claudio
Posts: 2044
Joined: Thu Feb 25, 2010 8:43 pm
Location: Uruguay
Has thanked: 35 times
Been thanked: 146 times
Contact:

Post by srvet_claudio » Wed Apr 14, 2010 8:44 pm

Hi Esgici,
esgici wrote:By the way, does "srvt" means "speedy"
Yes of course,
S = super
R = rápido (fast)
VET = Veterinary

No, it's a joke :lol:

srvet = Soto & Reinoso veterinary.
Valeria Reinoso is my wife.

srvet@adinet.com.uy is our professional e-mail

Best regards,
Claudio
Last edited by srvet_claudio on Wed Apr 14, 2010 8:58 pm, edited 1 time in total.
Best regards.
Dr. Claudio Soto
(from Uruguay)
http://srvet.blogspot.com

User avatar
srvet_claudio
Posts: 2044
Joined: Thu Feb 25, 2010 8:43 pm
Location: Uruguay
Has thanked: 35 times
Been thanked: 146 times
Contact:

Post by srvet_claudio » Wed Apr 14, 2010 8:50 pm

jparada wrote:Hola Claudio,

Muchas Gracias por esta implementación.

Realmente un gran esfuerzo de tu parte.

Saludos
Javier
Hola Javier,
Es un placer poder colaborar, programar es mi hobby.
Saludos,
Claudio Soto
Best regards.
Dr. Claudio Soto
(from Uruguay)
http://srvet.blogspot.com

User avatar
esgici
Posts: 4508
Joined: Wed Jul 30, 2008 9:17 pm
DBs Used: DBF
Location: iskenderun / Turkiye
Has thanked: 386 times
Been thanked: 111 times
Contact:

Post by esgici » Wed Apr 14, 2010 9:07 pm

Hola Dr.

Your joke is good as your programs :)

Your veterinary clinic is family-size, very well.

By the way, in my language we have a word most similar your nickname : servet : its mean is fortune, richness :)

Saludos

--

Esgici
Viva INTERNATIONAL HMG :D

User avatar
srvet_claudio
Posts: 2044
Joined: Thu Feb 25, 2010 8:43 pm
Location: Uruguay
Has thanked: 35 times
Been thanked: 146 times
Contact:

Post by srvet_claudio » Wed Apr 14, 2010 10:12 pm

Hi friend Esgici,
thanks for your always kind words.

In reality we not have a veterinary clinic.
We are ranchers (breeding cattle and sheep) and we work as consultants in animal production.
In Uruguay, the livestock is a very important activity for the country economy.

Best regards,
Claudio.
Best regards.
Dr. Claudio Soto
(from Uruguay)
http://srvet.blogspot.com

User avatar
esgici
Posts: 4508
Joined: Wed Jul 30, 2008 9:17 pm
DBs Used: DBF
Location: iskenderun / Turkiye
Has thanked: 386 times
Been thanked: 111 times
Contact:

Post by esgici » Wed Apr 14, 2010 10:32 pm

Hola Amigo Claudio

Well, working open-air may be fatiguing but more healthy, it isn't ?

I wish a life always fruitful to you and your wife; God bless you :)

Saludos

--

Esgici
Viva INTERNATIONAL HMG :D

Post Reply