Using Different Mappings for Uppercase and Lowercase of the Same Key

Solution 1:

Based on my work on the question Replace [ with { and ] with } using AutoHotkey, I would use the following logic:

AppsKey & l::
    if(GetKeyState("Shift"))
        SendInput, b
    else
        SendInput, a
    return