If the man who wanted to change his semicolon to a colon, okay, he uses whatever program to change it. Now if he wants to change the original colon to a semicolon, and he enters as a destination what the key says is a semicolon, he won’t get a semicolon because the semicolon was overwritten with a colon. You can’t tell the software “make this a semicolon” because the semicolon doesn’t exist any more. Both positions on the key call up a colon.

You would have to temporarily make some unused key a semicolon so you still have it.

It should be possible, because the operating system doesn’t see colons and semicolons, it sees a lower-level representation of the keys. For example on Linux they’re called keycodes or scancodes. There’s a table that translates these into the key symbols. You just need to change it so the normal press generates a colon and the shifted press generates a semicolon.

xmodmap -e "keycode 47 = colon semicolon"

The above command would accomplish what the caller was asking. I’ve no idea how to do it in Windows but there should be a way.