File "ctrl+maj.bas"
Path: /Ctrl+Maj/ctrl+maj.bas
File size: 4.59 KB
MIME-type:
Charset: 8 bit
#COMPILE EXE "Ctrl+Maj.exe"
#DIM ALL
$Label1 = "Prt intercepter, diminuez la fentre puis tapez Ctrl+M" + $CR + "pour convertir une lettre accentue en majuscule"
$Label2 = "Tapez maintenant la minuscule accentue convertir..." + $CR + "(si a ne marche pas, baissez la fentre puis Ctrl+M)"
#RESOURCE MANIFEST 1, "XPTheme.xml"
#RESOURCE ICON, A, "icon.ico"
#RESOURCE VERSIONINFO
#RESOURCE FILEVERSION 1,0,0,0
#RESOURCE STRINGINFO "0409", "0000"
#RESOURCE VERSION$ "CompanyName", "mougino software"
#RESOURCE VERSION$ "LegalCopyright", "(c) 2019 mougino"
#RESOURCE VERSION$ "ProductName", "Ctrl+Maj"
#RESOURCE VERSION$ "ProductVersion", "1.0"
#RESOURCE VERSION$ "FileDescription", "http://mougino.free.fr"
#INCLUDE ONCE "Win32Api.Inc"
#INCLUDE ONCE "SendKeys.Inc"
'--------------------------------------------------------------------------------
FUNCTION PBMAIN () AS LONG
ShowMain %HWND_DESKTOP
END FUNCTION
'--------------------------------------------------------------------------------
GLOBAL vk AS WORD ' virtual key
GLOBAL mo AS WORD ' modifier (alt, ctl, shift)
'--------------------------------------------------------------------------------
THREAD FUNCTION PrintMaj(BYVAL hDlg AS DWORD) AS LONG
LOCAL hD AS DWORD
LOCAL e AS STRING
LOCAL zCaption AS ASCIIZ*200
' We caught the input > minimize the dialog
DIALOG SEND hDlg, %WM_USER + 1000, 0, 0
hD = GetForegroundWindow()
GetWindowText(hD, zCaption, 200)
IF TRIM$(zCaption) <> "Ctrl+Maj" THEN
SELECT CASE vk
CASE 50 : e = "" '
CASE 48 : e = "" '
CASE 57 : e = "" '
CASE 55 : e = "" '
CASE 192 : e = "" '
END SELECT
IF e <> "" THEN SendString e
END IF
FUNCTION = 1
END FUNCTION
'--------------------------------------------------------------------------------
'--------------------------------------------------------------------------------
CALLBACK FUNCTION ProcMain()
STATIC nAtom AS DWORD
STATIC hThread AS DWORD
LOCAL lRes AS LONG
STATIC firstUp AS LONG
SELECT CASE CB.MSG
CASE %WM_INITDIALOG
' Set up atom for hotkey registration
nAtom = GlobalAddAtom ("Ctrl+Maj" + STR$(TIMER))
mo = 2 ' Ctrl
vk = 77 ' M
IF RegisterHotKey (CB.HNDL, nAtom, mo, vk) = 0 THEN DIALOG END CB.HNDL ' Ctrl+M already registered
CONTROL SET TEXT CB.HNDL, 100, $Label1
CASE %WM_HOTKEY
' Hotkey detected
IF firstUp > 0 THEN CONTROL SET TEXT CB.HNDL, 100, $Label2
DIALOG NORMALIZE CB.HNDL
INCR firstUp
CASE %WM_KEYDOWN
' Key press event
vk = CB.WPARAM
mo = CB.LPARAM
IF hThread THEN THREAD CLOSE hThread TO lRes
THREAD CREATE PrintMaj(BYVAL CB.HNDL) TO hThread
FUNCTION = 1
CASE %WM_USER + 1000
DIALOG MINIMIZE CB.HNDL
CONTROL SET TEXT CB.HNDL, 100, $Label1
CASE %WM_DESTROY
UnregisterHotKey CB.HNDL, nAtom ' Clean up hotkey
GlobalDeleteAtom nAtom ' and atom
END SELECT
END FUNCTION
'--------------------------------------------------------------------------------
'--------------------------------------------------------------------------------
FUNCTION ShowMain(BYVAL hParent AS DWORD) AS LONG
LOCAL lRes AS LONG
LOCAL hDlg AS DWORD
LOCAL hEdit AS DWORD
DIALOG NEW hParent, "Ctrl+Maj", , , 180, 40, %WS_POPUP OR _
%WS_BORDER OR %WS_DLGFRAME OR %WS_SYSMENU OR %WS_MINIMIZEBOX OR _
%WS_CLIPSIBLINGS OR %WS_VISIBLE OR %DS_MODALFRAME OR _
%DS_3DLOOK OR %DS_NOFAILCREATE OR %DS_SETFONT, %WS_EX_WINDOWEDGE OR _
%WS_EX_CONTROLPARENT OR %WS_EX_LEFT OR %WS_EX_LTRREADING OR _
%WS_EX_RIGHTSCROLLBAR, TO hDlg
DIALOG SET ICON hDlg, "A"
' Subclassed textbox to trap key presses
CONTROL ADD TEXTBOX, hDlg, 102, "", -1, -1, 0, 0
CONTROL HANDLE hDlg, 102 TO hEdit
SetWindowLong(hEdit, %GWL_WNDPROC, CODEPTR(ProcMain))
' Hotkey control:
CONTROL ADD "msctls_hotkey32", hDlg, 101, _
"msctls_hotkey321", -1, -1, 0, 0, %WS_CHILD OR %WS_VISIBLE, _
%WS_EX_CLIENTEDGE OR %WS_EX_LEFT OR %WS_EX_LTRREADING
CONTROL ADD LABEL, hDlg, 100, $Label1, 2, 10, 176, 30
DIALOG SHOW MODAL hDlg, CALL ProcMain TO lRes
FUNCTION = lRes
END FUNCTION
'--------------------------------------------------------------------------------