Russian Qt Forum

Qt => Вопросы новичков => Тема начата: iproute от Ноябрь 15, 2012, 09:27



Название: Где найти WTSGetActiveConsoleSessionId?
Отправлено: iproute от Ноябрь 15, 2012, 09:27
Здравствуйте!

 Возникла такя проблема: в программе необходимо использовать WTSGetActiveConsoleSessionId, но при попытке компиляции выходит сообщение "'WTSGetActiveConsoleSessionId' was not declared in this scope". В msdn написано что нужно подключить заголовок windows.h, но после подключения ошибка остается. Пробовал подключить еще такие заголовки: qt_windows.h, wtsapi32.h и winbase.h. В файле Project.pro добавил следующие строки:
Код:
LIBS += -lkernel32
LIBS += -lwtsapi32
Результата нет.

 Где можно найти WTSGetActiveConsoleSessionId()?


Название: Re: Где найти WTSGetActiveConsoleSessionId?
Отправлено: Serr500 от Ноябрь 15, 2012, 09:40
Код:
#define _WIN32_WINNT 0x0501  // Windows XP or above
#include <windows.h>


Название: Re: Где найти WTSGetActiveConsoleSessionId?
Отправлено: iproute от Ноябрь 15, 2012, 10:09
Не работает :(((

Вот мой код:
Код:
#include <QtCore/QCoreApplication>

#define _WIN32_WINNT 0x0501  // Windows XP or above
#include <windows.h>

#include <wtsapi32.h>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    HANDLE sessionID = NULL;

    sessionID = (HANDLE) WTSGetActiveConsoleSessionId();
   
    return a.exec();
}

Project.pro:
Код:
QT       += core

TARGET = Project
CONFIG   += console
CONFIG   -= app_bundle

TEMPLATE = app


SOURCES += main.cpp

LIBS += -lkernel32
LIBS += -lwtsapi32


Название: Re: Где найти WTSGetActiveConsoleSessionId?
Отправлено: Serr500 от Ноябрь 15, 2012, 10:24
Ежели не работает, то у Вас, скорее всего, компилятор MinGW, который о такой функции не знает. В этом случае её нужно объявлять самому и грузить через QLibrary:
Код:
typedef DWORD (WINAPI * PWTSGetActiveConsoleSessionId)();
QLibrary Kernel32("kernel32");
PWTSGetActiveConsoleSessionId pWTSGetActiveConsoleSessionId =
    (PWTSGetActiveConsoleSessionId)Kernel32.resolve("WTSGetActiveConsoleSessionId");
if (pWTSGetActiveConsoleSessionId)
{
    sessionID = pWTSGetActiveConsoleSessionId();
}
else {
    // Что-то пошло не так.
}


Название: Re: Где найти WTSGetActiveConsoleSessionId?
Отправлено: iproute от Ноябрь 15, 2012, 10:47
Спасибо. Ошибки больше нет.

PS У меня действительно компилятор mingw