Воспользовавшись советом на VBS тут, написал для C++ и Qt5 такую вот функцию#include <wtsapi32.h>
QString win_getlogin()
{
QString name;
PWTS_SESSION_INFO pSessions = NULL;
DWORD dwCount = 0;
if (!WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pSessions, &dwCount)){
log_error("win_getlogin(WTSEnumerateSessions): %s\n",
get_win_error(GetLastError()));
} else if (dwCount == 0){
log_error(QObject::tr("win_getlogin: No sessions available \n").toStdString().c_str());
WTSFreeMemory(pSessions);
return nullptr;
}
DWORD dwNumActive = 0;
for (DWORD i = 0; i < dwCount; ++i) {
if (pSessions[i].State == WTSActive){ // has a logged in user
++dwNumActive;
LPWSTR pUserName = NULL;
DWORD dwBufSize = 0;
if (!WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, pSessions[i].SessionId, WTSUserName, &pUserName, &dwBufSize)){
log_error("win_getlogin(WTSQuerySessionInformation): %s\n",
get_win_error(GetLastError()));
} else {
name = QString::fromUtf16((const ushort *) pUserName);
if(scan_debug)
log_debug("session user: %s\n", name.toStdString().c_str());
WTSFreeMemory(pUserName);
}
}
}
if (!dwNumActive)
log_warning(QObject::tr("win_getlogin: No users are logged inn").toStdString().c_str());
WTSFreeMemory(pSessions);
return name;
}