Here is an updated version (but still untested) that allows you to find the clientname in the XenDesktop as well. Someone with XenDesktop or any of the other environments please try this out and post your results.

 Code:
function ClientName()
  Dim $AltRegView
  $AltRegView=setoption("WOW64AlternateRegView","On")
  select
    case len(%clientname%)
      $clientname=%clientname%
    case readvalue("HKLM\Software\Citrix\ICA\Session", "ClientName")
      $clientname=readvalue("HKLM\Software\Citrix\ICA\Session", "ClientName")
    case InStr(@PRODUCTTYPE,"Server 2008")
      Dim $s_sessionid, $iIndex, $sessionid
      $s_sessionid = SubStr(%TEMP%,1+InStrRev(%TEMP%,"\"))
      While $s_sessionid <> ""
        $iIndex = InStr("0123456789ABCDEF",Left($s_sessionid,1))
        If $iIndex
          $SessionID = $GetSessionID*16+(Cint($iIndex-1))
          $s_sessionid = SubStr($s_sessionid,2)
        Else
          $SessionID = 0
          $s_sessionid = ""
        EndIf
      Loop
      $ClientName = ReadValue("HKCU\Volatile Environment\" + $sessionid,"CLIENTNAME")
    case InStr(@PRODUCTTYPE,"Server 2003")
      $ClientName = ReadValue("HKCU\Volatile Environment","CLIENTNAME")
    case 1  
      $ClientName = @WKSTA
  endselect
  $AltRegView=setoption("WOW64AlternateRegView",$AltRegView)
endfunction