If ((A_Hour>=12) && (A_Min>30) || (A_Hour=15) && (A_Min<=5))

This can be tricky. Notice that you are accepting if the time is 18:35, where 18>=12 and 35>30, so it must be true.

I would break it up into three blocks. A portion of the first hour, a portion of the last hour, and all the hours in between.

If (((A_Hour=12 && A_Min>30)) || ((A_Hour>12) && (A_Hour<15)) || ((A_Hour=15) && (A_Min<=5)))
MsgBox The time is after 12:30 but before or exactly 15:05.

That first block makes sure that the hour is 12. If so, it must be past 30 minutes into the hour.

The second block makes sure that the hour is 13 or 14. If so, the minutes don't matter.

The third block makes sure that the hour is 15. If so, it must be within the first 6 minutes (00, 01, 02, 03, 04, and 05) of the hour.

If all three evaluate to false, then the MsgBox will not appear.