Модераторы: Akina
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Функция на С (win32). Помогите переписать на .... 
:(
    Опции темы
chaos
Дата 12.8.2005, 09:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



Здрасте!!!
Возникла такая проблема: необходимо переписать функцию(см.ниже) на VB6.

Ребята помогите!!! Очень надо

Код

CString GetTerminalIPAddress()
{
    //GetSystemMetrics лежит в user32.dll
    //int GetSystemMetrics(int nIndex)

    //SM_REMOTESESSION (нужная константа) = 0x1000


    //WTSQuerySessionInformation лежит в Wtsapi32.dll
    //BOOL WTSQuerySessionInformation(HANDLE hServer, DWORD SessionId,
    //    WTS_INFO_CLASS WTSInfoClass,  LPTSTR *ppBuffer, DWORD *pBytesReturned)

    //WTS_INFO_CLASS это просто enum, WTSClientAddress (нужная константа) имеет значение 14
    //WTS_CURRENT_SERVER_HANDLE = NULL, WTS_CURRENT_SESSION = (DWORD)-1
    //(константы, нужные для вызова)

    //VOID WTSFreeMemory(PVOID pMemory)

    //typedef struct _WTS_CLIENT_ADDRESS {
    //    DWORD  AddressFamily;
    //    BYTE   Address[20]; //<- здесь лежит адрес в 4 байтах со смещением 2
                //(6 если от начала структуры)
    //} WTS_CLIENT_ADDRESS;


    CString soRet;

    char * cpBuffer;
    DWORD dwBufferLen;

    //позволяет узнать, в терминальной ли сессии мы работаем (не 0 - значит да)
    if (0 != ::GetSystemMetrics(SM_REMOTESESSION)
        //запрос ip адреса клиента терминальной сессии (терминала)
        && ::WTSQuerySessionInformation(WTS_CURRENT_SERVER_HANDLE, WTS_CURRENT_SESSION,
            WTSClientAddress, &cpBuffer, &dwBufferLen)
        && cpBuffer)
    {
        //если все хорошо, адрес нам вернули, выдергиваем его
        //(лежит в возвращаемом буфере в 4 байтах, начиная со смещения 6
        //(
        if ( *(((WTS_CLIENT_ADDRESS *)cpBuffer)->Address + 2) )
            //форматирование ip адреса в строку (наверное вам не надо)
            soRet = inet_ntoa(*(in_addr *)(((WTS_CLIENT_ADDRESS *)cpBuffer)->Address + 2));

        //буфер который аллоцировала WTSQuerySessionInformation, нужно освободить
        ::WTSFreeMemory(cpBuffer);
    }

    return soRet;
}



PM WWW   Вверх
Guest
Дата 12.8.2005, 21:18 (ссылка)    |    (голосов: 0) Загрузка ... Загрузка ... Быстрая цитата Цитата


Unregistered











a s kakogo? si?
  Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "VB6"
Akina

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по VB обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • Используйте теги [code=vb][/code] для подсветки кода. Используйтe чекбокс "транслит" (возле кнопок кодов) если у Вас нет русских шрифтов.


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Akina.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | VB6 | Следующая тема »


 




[ Время генерации скрипта: 0.0866 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.