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
'--------------------------------------------------------------------------------