La pregunta es hacer un programa, no hacerlo con Windows.
Podes usar la función CopyFile de la API de Win32 y aca tenes una funcion que al pasarle una cadena escribe en la misma el directorio del escritorio (del usuario actual):
Código:
void getDesktopFolder(char *folderStr)
{
LPITEMIDLIST folder = (LPITEMIDLIST)malloc(sizeof(LPITEMIDLIST));
SHGetSpecialFolderLocation(0, CSIDL_DESKTOPDIRECTORY, &folder);
SHGetPathFromIDList(folder, folderStr);
free(folder);
}