Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Получить список компов в локальной сети...

725
04 июля 2006 года
UnErase
190 / / 08.06.2006
Нашел функцию WNetEnumResource и с ней WNetOpenEnum.

Это те функции или нет?
В MSDN`e написано, что WNetEnumResource возвращает сетевые ресурсы.

А то я их заюзал, прям как в MSDN написано, но функция WNetOpenEnum все время возращает 87 (это ERROR_INVALID_PARAMETER - Either the dwScope or the dwType parameter is invalid, or there is an invalid combination of parameters).
Какие тогда параметры надо писать?

Может кто-нибудь работал с этими функциями, объясните что к чему!

Пожалуйста помогите разобраться!!!

Вот код:
Код:
#include "stdafx.h"
#include <windows.h>
#include <winnetwk.h>

int _tmain(int argc, _TCHAR* argv[])
{
    LPNETRESOURCE lpNet1;
    LPNETRESOURCE lpNet2;
    HANDLE hEnum;
    DWORD buff = 16384;
    DWORD cnt = -1;
    DWORD dwResult;

    lpNet1 = (LPNETRESOURCE) GlobalAlloc(GPTR, buff);

    dwResult = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_UNKNOWN, RESOURCEUSAGE_CONNECTABLE, lpNet1, &hEnum);

    if(dwResult == NO_ERROR)
    {
        lpNet2 = (LPNETRESOURCE) GlobalAlloc(GPTR, buff);

        if(WNetEnumResource(hEnum, &cnt, lpNet2, &buff) == NO_ERROR)
        {

            for(DWORD i = 0; i < cnt; i++)
            {
                printf("RemoteName: %s", lpNet2->lpRemoteName);
            }

        }

        WNetCloseEnum(hEnum);
    }

    return 0;
}
725
04 июля 2006 года
UnErase
190 / / 08.06.2006
О получилось!!!!!!!
Только он мне всегда выдает "Службы терминалов Microsoft".

Причем цикл вывода результата повторяется 3 раза.

А где другие элементы?

Вот новый код:
Код:
#include "stdafx.h"
#include <windows.h>
#include <winnetwk.h>

int _tmain(int argc, _TCHAR* argv[])
{
    LPNETRESOURCE lpNet1;
    LPNETRESOURCE lpNet2;
    HANDLE hEnum;
    DWORD buff = 16384;
    DWORD cnt = -1;
    DWORD dwResult;

    lpNet1 = (LPNETRESOURCE) GlobalAlloc(GPTR, buff);

    dwResult = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, lpNet1, &hEnum);

    if(dwResult == NO_ERROR)
    {
        lpNet2 = (LPNETRESOURCE) GlobalAlloc(GPTR, buff);

        if(WNetEnumResource(hEnum, &cnt, lpNet2, &buff) == NO_ERROR)
        {

            for(DWORD i = 0; i < cnt; i++)
            {
                //printf("RemoteName: %s", lpNet2->lpRemoteName);
                MessageBox(NULL, lpNet2->lpRemoteName, "Message", MB_OK);
            }

        }

        WNetCloseEnum(hEnum);
    }

    return 0;
}
725
04 июля 2006 года
UnErase
190 / / 08.06.2006
Никто так и не помог - пришлось самому разобраться.
Выкладываю рабочий код, который выводит через MessageBox список всех share и компов.

Код:
#include "stdafx.h"
#include <windows.h>
#include <winnetwk.h>

BOOL GetListNet(LPNETRESOURCE lpNet1)
{
    LPNETRESOURCE lpNet2;
    HANDLE hEnum;
    DWORD buff = 16384;
    DWORD cnt = -1;
    DWORD dwResult;

    dwResult = WNetOpenEnum(RESOURCE_GLOBALNET, RESOURCETYPE_ANY, 0, lpNet1, &hEnum);

    if(dwResult == NO_ERROR)
    {
        lpNet2 = (LPNETRESOURCE) GlobalAlloc(GPTR, buff);
        if(lpNet2 == NULL)
            return FALSE;

        do
        {
            ZeroMemory(lpNet2, buff);

            dwResult = WNetEnumResource(hEnum, &cnt, lpNet2, &buff);

            if(dwResult == NO_ERROR)
            {

                for(DWORD i = 0; i < cnt; i++)
                {
                    MessageBox(NULL, lpNet2.lpRemoteName, "Message", MB_OK);
               
                    if(RESOURCEUSAGE_CONTAINER == (lpNet2.dwUsage & RESOURCEUSAGE_CONTAINER))
                    {
                         if(!GetListNet(&lpNet2))
                         {
                            MessageBox(NULL, "GetListNet return FALSE;", "Message", MB_OK);
                         }
                    }
                }

            }
            else return FALSE;
        }
        while (dwResult != ERROR_NO_MORE_ITEMS);

        if(WNetCloseEnum(hEnum) != NO_ERROR)
            return FALSE;

    }
    else return FALSE;

    return TRUE;
}

int _tmain(int argc, _TCHAR* argv[])
{
    LPNETRESOURCE lpRun;
    DWORD buff = 16384;

    lpRun = (LPNETRESOURCE) GlobalAlloc(GPTR, buff);

    GetListNet(lpRun);

    return 0;
}
56K
31 декабря 2009 года
niidem
1 / / 30.12.2009
благодарю UnErase :) использовал в своем проекте.
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог