Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Данные о состоянии инет-подключения, время, трафик, скорость и т.д. 
:(
    Опции темы
alhimik
Дата 23.7.2007, 17:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.7.2007

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



Как программно узнать время, входящий и исходящий трафик, текущую скорость передачи данных инет-подключения?
Искал подходящие функции wininet.dll, но ничего полезного не нашел :(
PM ICQ   Вверх
Stepan_Lameroff
Дата 23.7.2007, 20:08 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 16.12.2006

Репутация: 9
Всего: 14



Цитата

Искал подходящие функции wininet.dll, но ничего полезного не нашел :( 

Полезное есть в iphlpapi.dll  smile 
Мне хватило этих методов:

Код

    public class Iphlpapi
    {
        #region defines

        public const int MAX_ADAPTER_ADDRESS_LENGTH = 8;
        public const int MAX_ADAPTER_DESCRIPTION_LENGTH = 128;
        public const int MAX_ADAPTER_NAME_LENGTH = 256;
        public const int MAX_INTERFACE_NAME_LEN = 256;

        public const int MAXLEN_IFDESCR = 256;
        public const int MAXLEN_PHYSADDR = 8;
        public const int MIB_IF_OPER_STATUS_CONNECTED = 4;
        public const int MIB_IF_OPER_STATUS_CONNECTING = 3;
        public const int MIB_IF_OPER_STATUS_DISCONNECTED = 2;
        public const int MIB_IF_OPER_STATUS_NON_OPERATIONAL = 0;
        public const int MIB_IF_OPER_STATUS_OPERATIONAL = 5;
        public const int MIB_IF_OPER_STATUS_UNREACHABLE = 1;

        public const int MIB_IF_TYPE_ETHERNET = 6;
        public const int MIB_IF_TYPE_FDDI = 15;
        public const int MIB_IF_TYPE_LOOPBACK = 24;
        public const int MIB_IF_TYPE_OTHER = 1;
        public const int MIB_IF_TYPE_PPP = 23;
        public const int MIB_IF_TYPE_SLIP = 28;
        public const int MIB_IF_TYPE_TOKENRING = 9;
        public const int MIB_TCP_STATE_CLOSE_WAIT = 8;

        public const int MIB_TCP_STATE_CLOSED = 1;
        public const int MIB_TCP_STATE_CLOSING = 9;
        public const int MIB_TCP_STATE_DELETE_TCB = 12;
        public const int MIB_TCP_STATE_ESTAB = 5;
        public const int MIB_TCP_STATE_FIN_WAIT1 = 6;
        public const int MIB_TCP_STATE_FIN_WAIT2 = 7;
        public const int MIB_TCP_STATE_LAST_ACK = 10;
        public const int MIB_TCP_STATE_LISTEN = 2;
        public const int MIB_TCP_STATE_SYN_RCVD = 4;
        public const int MIB_TCP_STATE_SYN_SENT = 3;
        public const int MIB_TCP_STATE_TIME_WAIT = 11;
        public const int NO_ERROR = 0;
        public static uint ERROR_NOT_SUPPORTED = 50;

        #endregion
        #region AdaptersInfo

        #region Nested type: IP_ADAPTER_INFO

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public struct IP_ADAPTER_INFO
        {
            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_ADAPTER_NAME_LENGTH + 4)]
            public string AdapterName;

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAX_ADAPTER_ADDRESS_LENGTH)]
            public byte[] Address;

            public uint AddressLength;
            public uint ComboIndex;

            public IntPtr CurrentIpAddress;

            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_ADAPTER_DESCRIPTION_LENGTH + 4)]
            public string Description;

            public bool DhcpEnabled;

            public IP_ADDR_STRING DhcpServer;
            public IP_ADDR_STRING GatewayList;
            public bool HaveWins;
            public uint Index;
            public IP_ADDR_STRING IpAddressList;
            public int LeaseExpires;
            public int LeaseObtained;
            public IntPtr Next;
            public IP_ADDR_STRING PrimaryWinsServer;
            public IP_ADDR_STRING SecondaryWinsServer;
            public uint Type;
        } ;

        #endregion
        #region Nested type: IP_ADDR_STRING

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public struct IP_ADDR_STRING
        {
            public uint Context;

            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4*4)]
            public string IpAddress;

            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 4*4)]
            public string IpMask;

            public IntPtr Next;
        } ;

        #endregion

        #endregion
        #region IfTable

        #region Nested type: MIB_IFROW

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Unicode)]
        public struct MIB_IFROW
        {
            [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAXLEN_IFDESCR)]
            public byte[] bDescr;

            [MarshalAs(UnmanagedType.ByValArray, SizeConst = MAXLEN_PHYSADDR)]
            public byte[] bPhysAddr;

            public uint dwAdminStatus;
            public uint dwDescrLen;
            public uint dwIndex;
            public uint dwInDiscards;
            public uint dwInErrors;
            public uint dwInNUcastPkts;
            public uint dwInOctets;
            public uint dwInUcastPkts;
            public uint dwInUnknownProtos;
            public uint dwLastChange;
            public uint dwMtu;
            public uint dwOperStatus;
            public uint dwOutDiscards;
            public uint dwOutErrors;
            public uint dwOutNUcastPkts;
            public uint dwOutOctets;
            public uint dwOutQLen;
            public uint dwOutUcastPkts;
            public uint dwPhysAddrLen;
            public uint dwSpeed;
            public uint dwType;

            [MarshalAs(UnmanagedType.ByValTStr, SizeConst = MAX_INTERFACE_NAME_LEN)]
            public string wszName;
        } ;

        #endregion
        #region Nested type: MIB_IFTABLE

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public struct MIB_IFTABLE
        {
            public uint dwNumEntries;
            public MIB_IFROW table;
        } ;

        #endregion

        #endregion
        #region TCP

        #region Nested type: MIB_EXTCPROW

        [StructLayout(LayoutKind.Sequential)]
        public struct MIB_EXTCPROW
        {
            public int dwLocalAddress;
            public int dwLocalPort;
            public int dwProcessId;
            public int dwRemoteAddress;
            public int dwRemotePort;
            public int dwState;
        } ;

        #endregion
        #region Nested type: MIB_EXTCPTABLE

        [StructLayout(LayoutKind.Sequential)]
        public struct MIB_EXTCPTABLE
        {
            public int dwNumEntries;
            public MIB_EXTCPROW table;
        }

        #endregion
        #region Nested type: MIB_TCPROW

        [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Ansi)]
        public struct MIB_TCPROW
        {
            public int dwLocalAddress;
            public int dwLocalPort;
            public int dwRemoteAddress;
            public int dwRemotePort;
            public int dwState;
        }

        #endregion
        #region Nested type: MIB_TCPSTATS

        [StructLayout(LayoutKind.Sequential)]
        public struct MIB_TCPSTATS
        {
            public int dwActiveOpens;
            public int dwAttemptFails;
            public int dwCurrEstab;
            public int dwEstabResets;
            public int dwInErrs;
            public int dwInSegs;
            public int dwMaxConn;
            public int dwNumConns;
            public int dwOutRsts;
            public int dwOutSegs;
            public int dwPassiveOpens;
            public int dwRetransSegs;
            public int dwRtoAlgorithm;
            public int dwRtoMax;
            public int dwRtoMin;
        }

        #endregion
        #region Nested type: MIB_TCPTABLE

        [StructLayout(LayoutKind.Sequential)]
        public struct MIB_TCPTABLE
        {
            public int dwNumEntries;
            public MIB_TCPROW table;
        }

        #endregion

        #endregion
        #region UDP

        #region Nested type: MIB_EXUDPROW

        [StructLayout(LayoutKind.Sequential)]
        public struct MIB_EXUDPROW
        {
            public int dwLocalAddress;
            public int dwLocalPort;
            public int dwProcessId;
        }

        #endregion
        #region Nested type: MIB_EXUDPTABLE

        [StructLayout(LayoutKind.Sequential)]
        public struct MIB_EXUDPTABLE
        {
            public int dwNumEntries;
            public MIB_EXUDPROW table;
        }

        #endregion
        #region Nested type: MIB_UDPROW

        [StructLayout(LayoutKind.Sequential)]
        public struct MIB_UDPROW
        {
            public int dwLocalAddress;
            public int dwLocalPort;
        }

        #endregion
        #region Nested type: MIB_UDPSTATS

        [StructLayout(LayoutKind.Sequential)]
        public struct MIB_UDPSTATS
        {
            public int dwInDatagrams;
            public int dwInErrors;
            public int dwNoPorts;
            public int dwNumAddrs;
            public int dwOutDatagrams;
        }

        #endregion
        #region Nested type: MIB_UDPTABLE

        [StructLayout(LayoutKind.Sequential)]
        public struct MIB_UDPTABLE
        {
            public int dwNumEntries;
            public MIB_UDPROW table;
        }

        #endregion

        #endregion
        #region API

        [DllImport("kernel32.dll", EntryPoint = "CopyMemory")]
        public static extern void CopyMemory_IpAddrString(
            ref IP_ADDR_STRING Destination,
            byte[] Source,
            int Length
            );

        [DllImport("kernel32.dll", EntryPoint = "CopyMemory")]
        public static extern void CopyMemory_IpAdapterInfo(
            ref IP_ADAPTER_INFO Destination,
            byte[] Source,
            int Length
            );

        [DllImport("kernel32.dll", EntryPoint = "CopyMemory")]
        public static extern void CopyMemory_IpAdapterInfoPtr(
            ref IP_ADAPTER_INFO Destination,
            IntPtr Source,
            int Length
            );

        [DllImport("kernel32.dll", EntryPoint = "CopyMemory")]
        public static extern void CopyMemory_Int(
            ref int Destination,
            ref byte Source,
            int Length
            );

        [DllImport("kernel32.dll", EntryPoint = "CopyMemory")]
        public static extern void CopyMemory_MibIfRow(
            ref MIB_IFROW Destination,
            ref byte Source,
            int Length
            );

        [DllImport("kernel32.dll", EntryPoint = "CopyMemory")]
        public static extern void CopyMemory_MibIfTable(
            ref MIB_IFTABLE Destination,
            byte[] Source,
            int Length
            );

        [DllImport("kernel32.dll", EntryPoint = "CopyMemory")]
        public static extern void CopyMemory_MibTCPRow(
            ref MIB_TCPROW Destination,
            IntPtr Source,
            int Length
            );

        [DllImport("kernel32.dll", EntryPoint = "CopyMemory")]
        public static extern void CopyMemory_MibExTCPRow(
            ref MIB_EXTCPROW Destination,
            IntPtr Source,
            int Length
            );

        [DllImport("kernel32.dll", EntryPoint = "CopyMemory")]
        public static extern void CopyMemory_MibUDPRow(
            ref MIB_UDPROW Destination,
            IntPtr Source,
            int Length
            );

        [DllImport("kernel32.dll", EntryPoint = "CopyMemory")]
        public static extern void CopyMemory_MibExUDPRow(
            ref MIB_EXUDPROW Destination,
            IntPtr Source,
            int Length
            );

        [DllImport("iphlpapi.dll")]
        public static extern uint GetAdaptersInfo(
            byte[] pAdapterInfo,
            ref uint dwOutBufLen
            );

        [DllImport("iphlpapi.dll")]
        public static extern uint GetIfTable(
            byte[] pIfTable,
            ref uint pdwSize,
            bool bOrder
            );

        [DllImport("iphlpapi.dll", SetLastError = true)]
        public static extern int GetTcpStatistics(
            ref MIB_TCPSTATS pStats
            );

        [DllImport("iphlpapi.dll", SetLastError = true)]
        public static extern int GetTcpTable(
            byte[] pTcpTable,
            out int pdwSize,
            bool bOrder
            );

        [DllImport("iphlpapi.dll", SetLastError = true)]
        public static extern int GetUdpStatistics(
            ref MIB_UDPSTATS pStats
            );

        [DllImport("iphlpapi.dll", SetLastError = true)]
        public static extern int GetUdpTable(
            byte[] UcpTable,
            out int pdwSize,
            bool bOrder
            );

        [DllImport("iphlpapi.dll", SetLastError = true)]
        public static extern int AllocateAndGetTcpExTableFromStack(
            ref IntPtr pTcpExTable,
            bool bOrder,
            IntPtr hHeap,
            int dwZero,
            int dwFlags
            );

        [DllImport("iphlpapi.dll", SetLastError = true)]
        public static extern int AllocateAndGetUdpExTableFromStack(
            ref IntPtr pUdpExTable,
            bool bOrder,
            IntPtr hHeap,
            int dwZero,
            int dwFlags
            );

        [DllImport("iphlpapi.dll", SetLastError = true)]
        public static extern int SetTcpEntry(
            ref IntPtr pTcpRow
            );

        [DllImport("iphlpapi.dll", SetLastError = true)]
        public static extern int SetTcpEntry(
            ref MIB_TCPROW pTcpRow
            );

        [DllImport("kernel32.dll", SetLastError = true)]
        public static extern IntPtr GetProcessHeap();

        #endregion
    }


Это сообщение отредактировал(а) Stepan_Lameroff - 23.7.2007, 20:18
PM MAIL   Вверх
alhimik
Дата 23.7.2007, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.7.2007

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



с помощью System.Net.NetworkInformation можно узнать трафик:
Код

IPv4InterfaceStatistics ipStats =  currentInterface.GetIPv4Statistics();
long bytesReceivedInKB = ipStats.BytesReceived / 1024;
long bytesSentInKB = ipStats.BytesSent / 1024;

остальное пока под вопросом...буду разбираться с iphlpapi.dll  smile 
PM ICQ   Вверх
Stepan_Lameroff
Дата 23.7.2007, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 16.12.2006

Репутация: 9
Всего: 14



Попробуйте так (с использованием вышеприведенного кода):
Код

    public class NetworkAdapter : IDisposable
    {
        private readonly string _adapterName;
        private readonly Timer _timerSpeed;
        private DateTime _lastTick;
        private uint _adapterIndex;
        private Iphlpapi.IP_ADAPTER_INFO _adapterInfo;
        private Iphlpapi.MIB_IFROW _IfRow;
        private uint _lastIn;
        private uint _lastOut;
        private int _DL;
        private int _UL;

        public NetworkAdapter(string adapterName)
        {
            _adapterName = adapterName;

            //Build the information
            BuildAdapterInfo();
            BuildAdapterStats();

            _lastTick = DateTime.Now;
            _lastIn = 0;
            _lastOut = 0;

            //Initialize the speed timer
            _timerSpeed = new Timer();
            _timerSpeed.Interval = 1000;
            _timerSpeed.Tick += timerSpeed_Tick;
        }

        //Adapter name
        public string AdapterName
        {
            get { return _adapterName; }
        }

        //Information
        public Iphlpapi.IP_ADAPTER_INFO AdapterInfo
        {
            get { return _adapterInfo; }
        }

        //Statistics
        public Iphlpapi.MIB_IFROW IfRow
        {
            get { return _IfRow; }
        }
        #region IDisposable Members

        void IDisposable.Dispose()
        {
            StopSpeedCounter();
        }

        #endregion
        //Start the speed counter
        public void StartSpeedCounter()
        {
            _timerSpeed.Enabled = true;
        }

        //Stop the speed counter
        public void StopSpeedCounter()
        {
            _timerSpeed.Enabled = false;
        }

        //Return the incoming speed
        public int GetDownSpeed()
        {
            return _DL;
        }

        //Return the outgoing speed
        public int GetUpSpeed()
        {
            return _UL;
        }

        //Build the adapter information
        public void BuildAdapterInfo()
        {
            uint nBufLen = 0;
            uint nError;

            // Retrieve the buffer size
            nError = Iphlpapi.GetAdaptersInfo(null, ref nBufLen);
            if (nError == Iphlpapi.ERROR_NOT_SUPPORTED)
            {
                Debug.WriteLine(
                    "GetAdaptersInfo is not supported by the operating system running on the local computer.");
                return;
            }

            //Allocate the required buffer
            byte[] IpInterfaceInfoBuffer = new byte[nBufLen];
            //Retrieve the information
            nError = Iphlpapi.GetAdaptersInfo(IpInterfaceInfoBuffer, ref nBufLen);
            if (nError != 0)
            {
                return;
            }

            //Copy the first adapter information
            _adapterInfo = new Iphlpapi.IP_ADAPTER_INFO();
            Iphlpapi.CopyMemory_IpAdapterInfo(
                ref _adapterInfo,
                IpInterfaceInfoBuffer,
                Marshal.SizeOf(_adapterInfo));

            //Loop through all the adapter
            while (_adapterName != _adapterInfo.AdapterName)
            {
                //Nomore adapters, exit
                if (_adapterInfo.Next.ToInt32() == 0)
                {
                    return;
                }
                else
                {
                    //Copy the next adapter information
                    Iphlpapi.CopyMemory_IpAdapterInfoPtr(
                        ref _adapterInfo,
                        _adapterInfo.Next,
                        Marshal.SizeOf(_adapterInfo));
                }
            }
            //Assignt the right index
            _adapterIndex = _adapterInfo.Index;
        }

        //Build the adapter statistics
        public void BuildAdapterStats()
        {
            uint nBufLen = 0;
            uint nError;

            // Retrieve the buffer size
            nError = Iphlpapi.GetIfTable(null, ref nBufLen, true);
            if (nError == Iphlpapi.ERROR_NOT_SUPPORTED)
            {
                Debug.WriteLine("GetIfTable is not supported by the operating system running on the local computer.\n");
                return;
            }

            //Allocate the required buffer
            byte[] IfTableBuffer = new byte[nBufLen];
            //Retrieve the table
            nError = Iphlpapi.GetIfTable(IfTableBuffer, ref nBufLen, true);
            if (nError != 0)
            {
                return;
            }

            int NumEntries = 0;
            int byteCount = 0;

            Iphlpapi.CopyMemory_Int(ref NumEntries, ref IfTableBuffer[byteCount], 4);
            byteCount += 4;

            //Loop through all the adpaters
            _IfRow = new Iphlpapi.MIB_IFROW();
            while (byteCount < nBufLen)
            {
                //Copy the buffer
                _IfRow = new Iphlpapi.MIB_IFROW();
                Iphlpapi.CopyMemory_MibIfRow(
                    ref _IfRow,
                    ref IfTableBuffer[byteCount],
                    Marshal.SizeOf(_IfRow)
                    );
                //Increment the byte count
                byteCount += Marshal.SizeOf(_IfRow);

                //The current adapter is found, the last copied buffer is kept
                if (_adapterIndex == _IfRow.dwIndex)
                    break;
            }
        }

        private void timerSpeed_Tick(object sender, EventArgs e)
        {
            //Update the statistics
            BuildAdapterStats();

            //Update the speed
            if (_lastIn != 0)
                _DL = (int)(_IfRow.dwInOctets - _lastIn);
            _lastIn = _IfRow.dwInOctets;

            if (_lastOut != 0)
                _UL = (int)(_IfRow.dwOutOctets - _lastOut);
            _lastOut = _IfRow.dwOutOctets;
        }
    }


PM MAIL   Вверх
Stepan_Lameroff
Дата 23.7.2007, 21:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 16.12.2006

Репутация: 9
Всего: 14



Можно также использовать PerformanceCounter.
Примерно так:
Код

...
PerformanceCounter dlCounter, ulCounter;
PerformanceCounterCategory category = new PerformanceCounterCategory("Network Interface");
foreach (string name in category.GetInstanceNames())
{
    if (name == "MS TCP Loopback interface")
        continue;

    dlCounter = new PerformanceCounter("Network Interface", "Bytes Received/sec", name);
    ulCounter = new PerformanceCounter("Network Interface", "Bytes Sent/sec", name);
    ...
}
...

но склонно такое решение к глюкам (если на локальной машине PerformanceCounter-ы должным образом не настроены),
поэтому я остановился на мазохистском варианте
PM MAIL   Вверх
alhimik
Дата 26.7.2007, 00:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.7.2007

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



А  делать это все как-то "напрямую" из .NET льзя? А то зачем тогда Framework, если всё юзать c WinAPI?   smile 
PM ICQ   Вверх
Stepan_Lameroff
Дата 26.7.2007, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 164
Регистрация: 16.12.2006

Репутация: 9
Всего: 14



Средствами System.Net.NetworkInformation получить текущую скорость никак :-(
Можно поюзать WMI, но могут понадобиться админ права и притормаживать будет.

Код

            try
            {
                ManagementObjectSearcher searcher = 
                    new ManagementObjectSearcher("root\\CIMV2", 
                    "SELECT * FROM Win32_NetworkAdapter"); 

                foreach (ManagementObject queryObj in searcher.Get())
                {
                    Console.WriteLine("----------------------------------------");
                    Console.WriteLine("Win32_NetworkAdapter:");
                    Console.WriteLine("Name: {0}", queryObj["Name"]);
                    Console.WriteLine("Speed: {0}", queryObj["Speed"]);
                }
            }
            catch (ManagementException e)
            {
                Console.WriteLine("An error occurred while querying for WMI data: " + e.Message);
            }


PM MAIL   Вверх
alhimik
Дата 26.7.2007, 23:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 16
Регистрация: 20.7.2007

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



В принципе среднюю скорость можно вычислять и самому.
А вот как дела с "Duration" (время пребывания в интернете)? Чтобы я смог запустить программу после подключения к интернет и узнать это самое время...буду очень признателен!
PM ICQ   Вверх
kokcu
Дата 29.3.2009, 14:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 69
Регистрация: 23.3.2009

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



Код

public NetworkAdapter(string adapterName)
        {
            _adapterName = adapterName;
            //Build the information
            BuildAdapterInfo();
            BuildAdapterStats();
            _lastTick = DateTime.Now;
            _lastIn = 0;
            _lastOut = 0;
            //Initialize the speed timer
            _timerSpeed = new Timer();
            _timerSpeed.Interval = 1000;
            _timerSpeed.Tick += timerSpeed_Tick;
        }

А как узнать adapterName? 
Пробовал писать как в диспетчере устройств, неполучилось.
Пробовал из wmi написать имя
 NetworkAdapter napd = new NetworkAdapter("Мини-плата Dell Wireless 1390 WLAN Mini-card");
Инфа по нулям вся.

Это сообщение отредактировал(а) kokcu - 29.3.2009, 15:14
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


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

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


 




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


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

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