#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;
}
Получить список компов в локальной сети...
Это те функции или нет?
В 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).
Какие тогда параметры надо писать?
Может кто-нибудь работал с этими функциями, объясните что к чему!
Пожалуйста помогите разобраться!!!
Вот код:
Код:
Только он мне всегда выдает "Службы терминалов 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;
}
#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;
}
Выкладываю рабочий код, который выводит через 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;
}
#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;
}
благодарю UnErase :) использовал в своем проекте.