Hello all !
Хочу написать небольшой сканер шар и дальше папок и файлов. Но вот не могу найти как это делается в .Net. В WinAPI есть ф-ии WNet* которыми я пользовался, а в .Net их аналога я не нашёл. Подскажите в какую сторону копать...
Знаю, что можно WNet* ф-ии как-то импортировать, но может быть есть более "правильный" способ ?
Я — свихнувшееся сознание Джо
Здравствуйте, Sergey J. A., Вы писали:
Я искал способ этого решения в .NET и ненашел.
ПОэтому использовал как ты и сказал ф-ии WNet*!!
Здравствуйте, Disa, Вы писали:
D>Я искал способ этого решения в .NET и ненашел.
D>ПОэтому использовал как ты и сказал ф-ии WNet*!!
А может есть под рукой кусок кода, как эти ф-ии мипортируются ?
Я — свихнувшееся сознание Джо
Здравствуйте, Sergey J. A., Вы писали:
Вообщето это я нарыл в гугле но это работает
#region NetView
[DllImport("mpr.dll", CharSet=CharSet.Auto)]
public static extern int WNetEnumResource(IntPtr hEnum, ref int lpcCount,
IntPtr lpBuffer,ref int lpBufferSize );
[DllImport("mpr.dll", CharSet=CharSet.Auto)]
public static extern int WNetOpenEnum(RESOURCE_SCOPE dwScope, RESOURCE_TYPE dwType,
RESOURCE_USAGE dwUsage,
[MarshalAs(UnmanagedType.AsAny)][In] Object lpNetResource,
out IntPtr lphEnum);
[DllImport("mpr.dll", CharSet=CharSet.Auto)]
public static extern int WNetCloseEnum( IntPtr hEnum );
//declare the structures to hold info
public enum RESOURCE_SCOPE
{
RESOURCE_CONNECTED = 0x00000001,
RESOURCE_GLOBALNET = 0x00000002,
RESOURCE_REMEMBERED = 0x00000003,
RESOURCE_RECENT= 0x00000004,
RESOURCE_CONTEXT= 0x00000005
}
public enum RESOURCE_TYPE
{
RESOURCETYPE_ANY= 0x00000000,
RESOURCETYPE_DISK= 0x00000001,
RESOURCETYPE_PRINT = 0x00000002,
RESOURCETYPE_RESERVED = 0x00000008,
}
public enum RESOURCE_USAGE
{
RESOURCEUSAGE_CONNECTABLE =0x00000001,
RESOURCEUSAGE_CONTAINER=0x00000002,
RESOURCEUSAGE_NOLOCALDEVICE =0x00000004,
RESOURCEUSAGE_SIBLING=0x00000008,
RESOURCEUSAGE_ATTACHED=0x00000010,
RESOURCEUSAGE_ALL =(RESOURCEUSAGE_CONNECTABLE | RESOURCEUSAGE_CONTAINER | RESOURCEUSAGE_ATTACHED),
}
public enum RESOURCE_DISPLAYTYPE
{
RESOURCEDISPLAYTYPE_GENERIC= 0x00000000,
RESOURCEDISPLAYTYPE_DOMAIN= 0x00000001,
RESOURCEDISPLAYTYPE_SERVER= 0x00000002,
RESOURCEDISPLAYTYPE_SHARE= 0x00000003,
RESOURCEDISPLAYTYPE_FILE = 0x00000004,
RESOURCEDISPLAYTYPE_GROUP= 0x00000005,
RESOURCEDISPLAYTYPE_NETWORK= 0x00000006,
RESOURCEDISPLAYTYPE_ROOT = 0x00000007,
RESOURCEDISPLAYTYPE_SHAREADMIN = 0x00000008,
RESOURCEDISPLAYTYPE_DIRECTORY = 0x00000009,
RESOURCEDISPLAYTYPE_TREE = 0x0000000A,
RESOURCEDISPLAYTYPE_NDSCONTAINER = 0x0000000B
}
public struct NETRESOURCE
{
public RESOURCE_SCOPE dwScope;
public RESOURCE_TYPE dwType;
public RESOURCE_DISPLAYTYPE dwDisplayType;
public RESOURCE_USAGE dwUsage;
[MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)] public string lpLocalName;
[MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)] public string lpRemoteName;
[MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)] public string lpComment;
[MarshalAs(System.Runtime.InteropServices.UnmanagedType.LPTStr)] public string lpProvider;
}
public void WNETOE(Object o, TreeNode ANode)
{
int iRet;
IntPtr ptrHandle = new IntPtr();
try
{
iRet =WNetOpenEnum(
RESOURCE_SCOPE.RESOURCE_GLOBALNET,
RESOURCE_TYPE.RESOURCETYPE_ANY,
RESOURCE_USAGE.RESOURCEUSAGE_CONTAINER,
o,
out ptrHandle );
if( iRet != 0 )
return;
int entries;
int buffer = 16384;
IntPtr ptrBuffer = Marshal.AllocHGlobal( buffer );
NETRESOURCE nr;
for(;;)
{
entries = -1;
buffer = 16384;
iRet =WNetEnumResource( ptrHandle, ref entries, ptrBuffer, ref buffer );
if( (iRet != 0) || (entries < 1) )
break;
Int32 ptr = ptrBuffer.ToInt32();
for( int i = 0; i < entries; i++ )
{
nr = (NETRESOURCE)Marshal.PtrToStructure( new IntPtr(ptr), typeof(NETRESOURCE) );
ptr += Marshal.SizeOf( nr );
TreeNode node=ANode.Nodes.Add(nr.lpRemoteName.Replace("\\",""));
if(RESOURCE_USAGE.RESOURCEUSAGE_CONTAINER == (nr.dwUsage
& RESOURCE_USAGE.RESOURCEUSAGE_CONTAINER))
{
WNETOE(nr,node);
}
}
}
Marshal.FreeHGlobal( ptrBuffer );
iRet =WNetCloseEnum( ptrHandle );
}
catch(Exception e)
{
}
}
public enum NERR
{
NERR_Success = 0,/* Success */
ERROR_MORE_DATA = 234, // dderror
ERROR_NO_BROWSER_SERVERS_FOUND = 6118,
ERROR_INVALID_LEVEL = 124,
ERROR_ACCESS_DENIED = 5,
ERROR_INVALID_PARAMETER = 87,
ERROR_NOT_ENOUGH_MEMORY = 8,
ERROR_NETWORK_BUSY = 54,
ERROR_BAD_NETPATH = 53,
ERROR_NO_NETWORK = 1222,
ERROR_INVALID_HANDLE_STATE = 1609,
ERROR_EXTENDED_ERROR= 1208
}
#endregion
public void FilltvComps()
{
try
{
btnRefresh.Enabled=false;
tvComps.BeginUpdate();
tvComps.Nodes.Clear();
tvComps.Nodes.Add("Сеть");
WNETOE(null,tvComps.Nodes[0]);
}
catch(Exception e)
{
String S=e.ToString();
richTextSend.Text=S;
}
finally
{
tvComps.EndUpdate();
tvComps.ExpandAll();
btnRefresh.Enabled=true;
}
}
public void ThreadStart()
{
byte[] bytes = new byte[1024];
while(true)
{
try
{
Socket s=ser.AcceptSocket();
s.Receive(bytes);
richText.Text=ASCIIEncoding.ASCII.GetString(bytes);
string str_time=DateTime.Now.ToString();
labelTime.Text=str_time;
//s.LocalEndPoint.AddressFamily.ToString();
// System.Net.Sockets.
labelWhoTo.Text="Кто кому: "+s.LocalEndPoint.ToString()+" : "+s.RemoteEndPoint.ToString();
// fileMessXML.WriteMessage(str_time,s.LocalEndPoint.ToString(),s.RemoteEndPoint.ToString(),richText.Text);
// CheckButtons();
}
catch(Exception z)
{}
}
}