I am trying to use a system variable &[winuser] to get the Windows user name. But it is always empty.

&winuser is supported in directory names (GuiXT profile) only. 
But you can address any Windows environment variable using the notation  "&%[xxx]", e.g. "&%[TEMP]" for the temporary directory.
In your case, please use "&%[USERNAME]".