The only way to get correct screen coordinates is throgh the normalized device coordinate system (NDC) which can be computed by multiplying object space coordinates by matWorldViewProj, or world space coordinates by matViewProj, or view space coordinates by matProj, since the projection of the camera is determinant.

Code
float2 normalizedProjectionCoordinatesXY = mul(float4(vecLightPos[i].xyz, 1.0f), matViewProj).xy; // range: -1 <-> 1
// or, with the same price and same result:
// float2 normalizedProjectionCoordinatesXY = mul(float4(vecLightViewPos[i].xyz, 1.0f), matProj).xy;

float2 screenCoordinates = (0.5f + normalizedProjectionCoordinatesXY * 0.5f) * vecViewport.xy; // range: 0 <-> screen_size - 1


As far as I understand, the radius of the light can't be directly tranformed to screen cordinates as easy as common coordinates. It will need to compute a position in the desired coordinate system, transform it to NDC, compute the resulting radius of the projection and use it with light position screen coordinates to draw the projected circle of the light sphere.

Code
float2 normalizedProjectionCoordinatesXY = mul(float4(vecLightViewPos[i].xyz, 1.0f), matProj).xy;
float normalizedProjectionCoordinatesOfOuterPointOfLightSphereX = mul(float4(vecLightViewPos[i].xy, vecLightViewPos[i].z - vecLightViewPos[i].w, 1.0f), matProj).x ; // doing the same in world space would need far more computations
float projectedLightRadiusInScreenPixels = vecViewPort.x * (normalizedProjectionCoordinatesOfOuterPointOfLightSphereX - normalizedProjectionCoordinatesXY.x) / 2.0f;


Notice that in order to compute the projected light radius, the original light radius is subtracted to the view space Z coordinate of the light, which is the inversed X coordinate in screen space. View space YZ plane is parallel to the camera projection plane, so it is proportional to the distance according to the projection.

Salud!

DISCLAIMER: I did not test any of the code above, I might had failed but I am pretty sure it is correct.