|
You have a microsoft certificate, or you want one ? Why don't you register ?
What do you want to know ? You want to create drag and drop objects, like Visio ? To do that, you need an array of objects and an array of points that represent where you can grab an object. When someone clicks, you need to step through your array and work out if something has been clicked that you want to drag, then you need to move the co-ordinates for that object as you drag. Finally, your draw function should redraw the objects based on those co-ordinates.
Christian Graus - Microsoft MVP - C++
|
|
|
|
|
|
Hi
1) How to get list of workgroups in LAN?
2) How to get list of computers in specified workgroup?
Application must run on Windows 2k/xp, I use VisualC++ 6.0
------------------------------------------
gouranga
JID badzio(at)chrome(dot)pl
------------------------------------------
|
|
|
|
|
badzio wrote:
2) How to get list of computers in specified workgroup?
How about NetGroupGetUsers() ?
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|
<br />
const WCHAR * srvName=NULL;<br />
DWORD dwPrefMaxLen = MAX_PREFERRED_LENGTH;<br />
DWORD dwEntriesRead = 0;<br />
DWORD dwTotalEntries = 0;<br />
DWORD dwTotalCount = 0;<br />
DWORD dwLevel = 0;<br />
DWORD dwResumeHandle = 0;<br />
NET_API_STATUS nStatus;<br />
GROUP_USERS_INFO_0 usrbuf;<br />
CString ls_grp="Alfasoft";<br />
wchar_t grp[UNCLEN+4];<br />
mbstowcs( grp, ls_grp, lenof( grp) );<br />
nStatus = NetGroupGetUsers(srvName,grp,dwLevel, (LPBYTE *) &usrbuf,dwPrefMaxLen,&dwEntriesRead,&dwTotalEntries,&dwResumeHandle);<br />
result: nStatus = 2220 (NERR_GroupNotFound)
but groupname - Alfasoft is valid. This group exists (my computers in in this group)
So - what do I do wrong?
I'm affraid that this function is linked with groups on computer not in LAN
------------------------------------------
gouranga
JID badzio(at)chrome(dot)pl
------------------------------------------
|
|
|
|
|
Is "Alfasoft" a global group in the security database? You might also try NetLocalGroupGetMembers() .
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|
Hmmm... I don't know anything about security database
I have LAN. In this LAN are many computers and 4 workgroups. My computer belongs to Alfasoft. Computers of my friends from the same room - too. But computers of another workers belong to another workgroup. Every computers are in the same LAN, in the same subnet (192.168.0.x)
And I want get list of all workgroups in my LAN and list of computers in specified workgroup.
NetLocalGroupEnum() returns local user's groups. But I want computers from workgroups.
------------------------------------------
gouranga
JID badzio(at)chrome(dot)pl
------------------------------------------
|
|
|
|
|
I know exactly what you are looking for, but since I do not work with the Netxxx() API, my answers may be a bit rusty. I'll keep looking...
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|
what do u mean "global group in the security database"?
------------------------------------------
gouranga
JID badzio(at)chrome(dot)pl
------------------------------------------
|
|
|
|
|
See here.
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|
1) See WNetOpenEnum , WNetEnumResource and WNetCloseEnum .
|
|
|
|
|
but function WNetOpenEnum() returns all computer in network. But I need
1) list of all workgroups
2) list of computer from specified workgroup
So I can't get it using WNetOpenEnum()
------------------------------------------
gouranga
JID badzio(at)chrome(dot)pl
------------------------------------------
|
|
|
|
|
badzio wrote:
but function WNetOpenEnum() returns all computer in network
Look at the dwUsage parameter passed into WNetOpenEnum - you need RESOURCEUSAGE_CONTAINER . We have an app here that uses this API, and it enumerates domains (classic NT and AD, workgroups and individual computers. You have to give it appropriate parameters depending on what you want to enumerate.
|
|
|
|
|
hmmm... first, I try enumerate domain (NT/AD/workgroups)
<br />
DWORD dwScope = RESOURCE_CONTEXT;<br />
DWORD dwUsage = RESOURCEUSAGE_CONTAINER;<br />
DWORD dwType = RESOURCETYPE_ANY;<br />
NETRESOURCE *NetResource = NULL;<br />
HANDLE hEnum;<br />
WNetOpenEnum( dwScope, dwType, dwUsage, NetResource, &hEnum );<br />
DWORD Count = 0xFFFFFFFF;<br />
DWORD BufferSize = 2048;<br />
LPVOID Buffer = new char[2048];<br />
WNetEnumResource( hEnum, &Count, Buffer, &BufferSize );<br />
NetResource = (NETRESOURCE*)Buffer;<br />
for ( unsigned int i = 0; i < BufferSize/sizeof(NETRESOURCE); i++, NetResource++ )<br />
{<br />
}<br />
but still I got all resources from network. I'd like to get list of domains - can you show me some code's example?
------------------------------------------
gouranga
JID badzio(at)chrome(dot)pl
------------------------------------------
|
|
|
|
|
You'll need to test the dwDisplayType and dwUsage fields of the NETRESOURCE structure for each item you get back.
|
|
|
|
|
ok, i checked... it seems to work... but... some problem
My LAN:
Microsoft Windows Network: Domain1 (domain Windows2k Server), Domain2 (workgroup), Domain3 (domain Windows2k Server), Domain4 (workgroup)
NetWare Services: Serwery NetWare, System NDS
<br />
DWORD dwScope = RESOURCE_CONTEXT;<br />
DWORD dwUsage = RESOURCEUSAGE_CONTAINER;<br />
DWORD dwType = RESOURCETYPE_ANY;<br />
NETRESOURCE *NetResource = NULL, *ResDomain=NULL;<br />
HANDLE hEnum;<br />
dwScope = RESOURCE_GLOBALNET;<br />
WNetOpenEnum( dwScope, dwType, dwUsage, NetResource, &hEnum );<br />
if ( hEnum )<br />
{<br />
DWORD Count = 0xFFFFFFFF;<br />
DWORD BufferSize = 2048;<br />
LPVOID Buffer = new char[2048];<br />
LPVOID BuffDomain = new char[2048];<br />
WNetEnumResource( hEnum, &Count, Buffer, &BufferSize );<br />
NetResource = (NETRESOURCE*)Buffer;<br />
for ( unsigned int i = 0; i < BufferSize/sizeof(NETRESOURCE); i++, NetResource++ )<br />
{<br />
if (NetResource->dwDisplayType==RESOURCEDISPLAYTYPE_NETWORK ) <br />
{<br />
WNetOpenEnum(dwScope,dwType,dwUsage,NetResource,&hEnum);<br />
WNetEnumResource(hEnum,&Count,BuffDomain,&BufferSize);<br />
ResDomain=(NETRESOURCE*)BuffDomain;<br />
for (unsigned int k=0; k<BufferSize/sizeof(NETRESOURCE); k++, ResDomain++)<br />
{<br />
if (ResDomain->dwDisplayType==RESOURCEDISPLAYTYPE_DOMAIN)<br />
{<br />
}<br />
}<br />
}<br />
}<br />
this code finds me not all workgroups/domain
It finds two domains of NetWare Services
But domains/groups from Microsoft Windows Network - finds only Domain1 and Domain2
I tried debug - app found some network with dwDisplayType=3452816845. And some of them have missing groups (Domain3 and Domain4). So - I made code (remark /* || NetResource->dwDisplayType>RESOURCEDISPLAYTYPE_NDSCONTAINER*/) - now apps finds all workgroups but - groups which were missing (Domain3 and Domain4) are multiple - I mean that apps finds it more that one time
What do I do wrong?
------------------------------------------
gouranga
JID badzio(at)chrome(dot)pl
------------------------------------------
|
|
|
|
|
You aren't testing the return code of WNetEnumResource. If that returns ERROR_MORE_DATA, you need to call it again, and go through the next set of resources. You then keep calling WNetEnumResources until it doesn't return ERROR_MORE_DATA.
|
|
|
|
|
ok, enumerating of workgroups/domain is ok
but next problem - I want get list of computers from specified workgroup/domain
so... I enumerate workgroups... if I found workgroup with correct name, then I remember NETRESOURCE value.
Next I use WNetOpenEnum with NETRSOURCE value which I remembered. And then, WNetEnumResource and testing dwDisplayType etc...
but i get only two computers (I expected about 19 computers from this workgroup). WNetEnumResource return value 0 (so - NO_ERROR). parameter lpcCount also returns 2. So - what's wrong?
------------------------------------------
gouranga
JID badzio(at)chrome(dot)pl
------------------------------------------
|
|
|
|
|
badzio wrote:
So - what's wrong?
Impossible to say - you'll need to post the relevant source code.
|
|
|
|
|
<br />
int error;<br />
DWORD dwScope = RESOURCE_CONTEXT;<br />
DWORD dwUsage = RESOURCEUSAGE_CONTAINER;<br />
DWORD dwType = RESOURCETYPE_ANY;<br />
DWORD dwStatus;<br />
NETRESOURCE *NetResource = NULL, *NetRes = NULL,*ResDomain=NULL, *ResServer=NULL, *ResTree=NULL;<br />
NETRESOURCE *WorkgroupResource = NULL, *ResComputers = NULL;<br />
HANDLE hEnum, hWorkgroup = NULL;<br />
dwScope = RESOURCE_GLOBALNET;<br />
error = -3;<br />
WNetOpenEnum( dwScope, dwType, dwUsage, NetResource, &hEnum );<br />
CString ls_workgroups = "";<br />
DWORD Count = 0xFFFFFFFF;<br />
DWORD BufferSize = 2048;<br />
LPVOID Buffer = new char[2048];<br />
LPVOID BufferRes = new char[2048], BuffDomain = new char[2048], BuffNet = new char[2048], BuffComputers = new char[2048];<br />
CString workgroup;<br />
m_edit.GetWindowText(workgroup);<br />
bool lb_exists = false;<br />
if ( hEnum )<br />
{<br />
WNetEnumResource( hEnum, &Count, Buffer, &BufferSize );<br />
NetResource = (NETRESOURCE*)Buffer;<br />
for ( unsigned int i = 0; i < BufferSize/sizeof(NETRESOURCE); i++, NetResource++ )<br />
{<br />
if (NetResource->dwDisplayType==RESOURCEDISPLAYTYPE_NETWORK || NetResource->dwDisplayType>RESOURCEDISPLAYTYPE_NDSCONTAINER)<br />
{<br />
bool lb_test = false;;<br />
if (NetResource->dwType>RESOURCETYPE_RESERVED)<br />
lb_test = true;<br />
else<br />
if (!strcmp(NetResource->lpProvider,"Microsoft Windows Network"))<br />
lb_test = true;<br />
if (!lb_test)<br />
continue;<br />
WNetOpenEnum(dwScope,dwType,dwUsage,NetResource,&hEnum);<br />
if (!hEnum)<br />
continue;<br />
dwStatus = WNetEnumResource(hEnum,&Count,BuffDomain,&BufferSize);<br />
if (dwStatus==ERROR_NO_MORE_ITEMS)<br />
break;<br />
ResDomain=(NETRESOURCE*)BuffDomain;<br />
for (unsigned int k=0; k<BufferSize/sizeof(NETRESOURCE); k++, ResDomain++)<br />
{<br />
if ((ResDomain->dwDisplayType==RESOURCEDISPLAYTYPE_DOMAIN || ResDomain->dwDisplayType==RESOURCEDISPLAYTYPE_GROUP) &&<br />
(strcmp(ResDomain->lpProvider,"Microsoft Windows Network") || strcmp(ResDomain->lpProvider,"")))<br />
{<br />
if (!strcmp(ResDomain->lpRemoteName,workgroup))<br />
{<br />
hWorkgroup=hEnum;<br />
lb_exists = true;<br />
WorkgroupResource = ResDomain;<br />
break;<br />
}<br />
ls_workgroups += ResDomain->lpRemoteName;<br />
ls_workgroups += ";";<br />
}<br />
}<br />
if (lb_exists)<br />
break;<br />
}<br />
}<br />
}<br />
else<br />
return;<br />
WNetCloseEnum(hEnum);<br />
if (hWorkgroup==NULL)<br />
{<br />
error = -4;<br />
return;<br />
}<br />
dwUsage=RESOURCEUSAGE_ALL;<br />
dwStatus = WNetOpenEnum(dwScope,dwType,dwUsage,WorkgroupResource,&hWorkgroup);<br />
dwStatus = WNetEnumResource(hWorkgroup,&Count,BuffComputers,&BufferSize);<br />
if (dwStatus!=NO_ERROR)<br />
{<br />
error = -4;<br />
return;<br />
}<br />
ResComputers = (NETRESOURCE*)BuffComputers;<br />
CString ls_computers = "";<br />
for (unsigned int l=0; l<BufferSize/sizeof(NETRESOURCE); l++, ResComputers++)<br />
{<br />
if (ResComputers->dwDisplayType==RESOURCEDISPLAYTYPE_SERVER)<br />
{<br />
ls_computers+=ResComputers->lpRemoteName;<br />
ls_computers+=";";<br />
}<br />
}<br />
------------------------------------------
gouranga
JID badzio(at)chrome(dot)pl
------------------------------------------
|
|
|
|
|
badzio wrote:
Application must run on Windows 2k/xp, I use VisualC++ 6.0
You application will run only on win2000 and above as Api use for this purposes are not supported for WIN ME/98/95.
"Opinions are neither right nor wrong. I cannot change your opinion. I can, however, change what influences your opinion." - David Crow
cheers,
Alok Gupta
|
|
|
|
|
ok - it's good that it run on win2k and above. but - how can I do it?
------------------------------------------
gouranga
JID badzio(at)chrome(dot)pl
------------------------------------------
|
|
|
|
|
We have legacy VC6 C++ application.
We need to link with a new DLL written in VC7 C++ (.NET) .
In our legacy application we are using alot of streams
(#include <iostream.h>).
DLL that we need to link with uses a namespace std and <iostream>.
How we can link one with the other?
Thanks in advance.
Julia
|
|
|
|
|
Hi,
I need to get all the printers that are installed in the computer (both local and network). I am using EnumPrinters with level 2. But this is giving only local printer details! Could anyone please help me.
Thanks,
Chetan
|
|
|
|
|
How about a code snippet for us to look at?
"Ideas are a dime a dozen. People who put them into action are priceless." - Unknown
|
|
|
|
|