General Help regarding HMG, Compilation, Linking, Samples
Moderator: Rathinagiri
-
edk
- Posts: 911
- Joined: Thu Oct 16, 2014 11:35 am
- Location: Poland
Post
by edk »
Hi.
In GUI mode it is quite easy to "disable" the Caps Lock key in the entire application:
Code: Select all
#include "hmg.ch"
FUNCTION Main()
IF KSetCaps ()
//Set Caps Lock to OFF
//KSetCaps ( .F. ) //Turns off Caps Lock but doesn't change the Caps Lock indicator on the keyboard (tested on Win10 1803)
HMG_PressKey ( VK_CAPITAL ) //"Press" the Caps Lock key.
ENDIF
DEFINE WINDOW Demo;
MAIN;
ROW 100;
COL 100;
WIDTH 490 ;
HEIGHT 350 ;
TITLE "Caps Lock - Prevent";
NOSIZE;
NOMAXIMIZE;
NOMINIMIZE
DEFINE LABEL EditLabel
ROW 10
COL 10
WIDTH 470
HEIGHT 13
VALUE "EditBox:"
END LABEL
DEFINE EDITBOX Edit1
ROW 25
COL 10
WIDTH 470
HEIGHT 210
VALUE ""
END EDITBOX
DEFINE LABEL TextLabel
ROW 245
COL 10
WIDTH 470
HEIGHT 13
VALUE "TextBox:"
END LABEL
DEFINE TEXTBOX Edit2
ROW 260
COL 10
WIDTH 470
HEIGHT 23
VALUE ""
END TEXTBOX
DEFINE BUTTON Exit
ROW 293
COL 380
WIDTH 100
HEIGHT 25
CAPTION "Exit"
ACTION Demo.RELEASE
END BUTTON
END WINDOW
CREATE EVENT PROCNAME OnkeyCapsLock ()
Demo.CENTER
Demo.ACTIVATE
RETURN NIL
*******************************************************************************
Function OnkeyCapsLock ()
// Caps Lock - Prevent
IF EventMSG () == WM_KEYDOWN .AND. EventWPARAM() == VK_CAPITAL .AND. KSetCaps ()
//KSetCaps ( .F. ) //Turns off Caps Lock but doesn't change the Caps Lock indicator on the keyboard (tested on Win10 1803)
HMG_PressKey ( VK_CAPITAL ) //"Press" again the Caps Lock key.
ENDIF
Return NIL
But how to do it for console mode?
Edward.
-
KDJ
- Posts: 243
- Joined: Mon Sep 05, 2016 3:04 am
- Location: Poland
Post
by KDJ »
Hi, Edward
Here is simple way, by using dummy window with timer:
Code: Select all
#include "hmg.ch"
#include "hbgtinfo.ch"
#include "hbthread.ch"
REQUEST HB_GT_WVT_DEFAULT
MEMVAR GetList
FUNCTION Main()
LOCAL cText := Space(30)
//create dummy window with timer in new thread
IF (! HB_MTVM()) .or. HB_IsNIL(HB_ThreadStart(HB_THREAD_INHERIT_PUBLIC, @DummyWindow()))
MsgInfo("Create a new thread is failed!")
ENDIF
//
@ 5, 5 TO 11,75 DOUBLE
@ 8,20 GET cText
READ
InKey(0)
QUIT
RETURN NIL
FUNCTION DummyWindow()
DEFINE WINDOW Dummy MAIN VISIBLE .F.
DEFINE TIMER DummyTIMER INTERVAL 10 ACTION If((GetForegroundWindow() == PtoN(HB_gtInfo(HB_GTI_WINHANDLE))) .and. IsCapsLockActive(), HMG_PressKey(VK_CAPITAL), NIL)
END WINDOW
Dummy.ACTIVATE
RETURN NIL
FUNCTION PtoN(pValue)
IF HB_IsPointer(pValue)
RETURN HB_HexToNum(SubStr(HB_ValToStr(pValue), 3))
ENDIF
RETURN 0
-
mol
- Posts: 3720
- Joined: Thu Sep 11, 2008 5:31 am
- Location: Myszków, Poland
-
Contact:
Post
by mol »
Great
-
edk
- Posts: 911
- Joined: Thu Oct 16, 2014 11:35 am
- Location: Poland
Post
by edk »
Krzysztof THANK YOU
-
KDJ
- Posts: 243
- Joined: Mon Sep 05, 2016 3:04 am
- Location: Poland
Post
by KDJ »
In the previous example, when you press Close button the program freezes.
Here is improved example:
Code: Select all
#include "hmg.ch"
#include "hbgtinfo.ch"
#include "hbthread.ch"
#include "inkey.ch"
REQUEST HB_GT_WVT_DEFAULT
MEMVAR GetList
FUNCTION Main()
LOCAL cText
//create dummy window with timer in new thread
IF (! HB_MTVM()) .or. HB_IsNIL(HB_ThreadStart(@DummyWindow()))
MsgInfo("Create a new thread is failed!")
ENDIF
//
//to generate HB_K_CLOSE after pressing Close button
HB_gtInfo(HB_GTI_CLOSEMODE, 1)
Set(_SET_EVENTMASK, INKEY_KEYBOARD + HB_INKEY_GTEVENT)
SetKey(K_ALT_F4, { || OnClose() })
SetKey(HB_K_CLOSE, { || OnClose() })
SetCancel(.F.)
DO WHILE .T.
cText := Space(30)
CLS
@ 5, 5 TO 11,75 DOUBLE
@ 8,20 GET cText
READ
@ 13, 5 SAY cText
@ 18, 5 SAY "Press Esc to exit or other key to continue ..."
SWITCH InKey(0)
CASE K_ALT_F4
CASE HB_K_CLOSE
OnClose()
EXIT
CASE K_ESC
QUIT
ENDSWITCH
ENDDO
RETURN NIL
FUNCTION OnClose()
IF MsgOkCancel("Do you want to exit?") == .T.
QUIT
ENDIF
RETURN NIL
FUNCTION DummyWindow()
DEFINE WINDOW Dummy VISIBLE .F.
DEFINE TIMER DummyTIMER INTERVAL 10 ACTION If((GetForegroundWindow() == PtoN(HB_gtInfo(HB_GTI_WINHANDLE))) .and. IsCapsLockActive(), HMG_PressKey(VK_CAPITAL), NIL)
END WINDOW
Dummy.ACTIVATE
RETURN NIL
FUNCTION PtoN(pValue)
IF HB_IsPointer(pValue)
RETURN HB_HexToNum(SubStr(HB_ValToStr(pValue), 3))
ENDIF
RETURN 0