Сейчас на форуме: hgdagon, asfa, bartolomeo (+6 невидимых)

 eXeL@B —› Программирование —› API для проверки воткнутости кабеля в сетевуху
Посл.ответ Сообщение


Ранг: 209.5 (наставник), 42thx
Активность: 0.10
Статус: Участник
WinCE ARM M@sTeR

Создано: 19 апреля 2006 12:38
· Личное сообщение · #1

Может кто знает какими API можно проверить воткнут ли кабель в сетевую карту. Винда ж как-то это определяет внутри себя (перед тем как нарисовать компы с крестом и вывести хинт), значит средства должны быть
Если есть готовый кусок кода, буду признателен.

-----
Get busy living or get busy dying ©




Ранг: 79.4 (постоянный)
Активность: 0.090
Статус: Участник

Создано: 19 апреля 2006 13:03
· Личное сообщение · #2

если я правильно понял, можно проверить свой внутренний айпи? и если он не равен 127.0.0.1 знащит мы подключены к сети
в противном случае у нас локальный хост...



Ранг: 44.7 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 19 апреля 2006 13:33
· Личное сообщение · #3

d1v0x пишет:
можно проверить свой внутренний айпи?

А как это можно сделать :-[



Ранг: 62.8 (постоянный)
Активность: 0.040
Статус: Участник

Создано: 19 апреля 2006 13:39
· Личное сообщение · #4

Вот, а у меня нет сетевухи, но есть внешний кабельный модем (вроде модем называется, на упаковке написано).
Перечисление устройств тебе нужно, по всей видимости, но этой функции у меня в справочнике нет. Ключевое слово "Device", больше ничего сказать не могу к сожалению.




Ранг: 209.5 (наставник), 42thx
Активность: 0.10
Статус: Участник
WinCE ARM M@sTeR

Создано: 19 апреля 2006 13:58
· Личное сообщение · #5

Да тут говорят WMI юзать надо, пытаюсь разобраться вот...

-----
Get busy living or get busy dying ©




Ранг: 79.4 (постоянный)
Активность: 0.090
Статус: Участник

Создано: 19 апреля 2006 14:04
· Личное сообщение · #6

2 Keo
примерно так (исходник на ВБ ):
Private Declare Function GetIpAddrTable_API Lib "IpHlpApi" Alias "GetIpAddrTable" (pIPAddrTable As Any, pdwSize As Long, ByVal bOrder As Long) As Long

Public Function GetIpAddrTable()
Dim Buf(0 To 511) As Byte
Dim BufSize As Long: BufSize = UBound(Buf) + 1
Dim rc As Long
rc = GetIpAddrTable_API(Buf(0), BufSize, 1)
If rc <> 0 Then Err.Raise vbObjectError, , "GetIpAddrTable failed with return value " & rc
Dim NrOfEntries As Integer: NrOfEntries = Buf(1) * 256 + Buf(0)
If NrOfEntries = 0 Then GetIpAddrTable = Array(): Exit Function
ReDim IpAddrs(0 To NrOfEntries - 1) As String
Dim i As Integer
For i = 0 To NrOfEntries - 1
Dim j As Integer, s As String: s = ""
For j = 0 To 3: s = s & IIf(j > 0, ".", "") & Buf(4 + i * 24 + j): Next
IpAddrs(i) = s
Next
GetIpAddrTable = IpAddrs
End Function

Sub Main()
Dim IpAddrs
IpAddrs = GetIpAddrTable
msgbox "Nr of IP addresses: " & UBound(IpAddrs) - LBound(IpAddrs) + 1
Dim i As Integer
For i = LBound(IpAddrs) To UBound(IpAddrs)
msgbox IpAddrs(i)
Next
End Sub

если выполнить этот код там будет локальный, сетевой и внешний...
причом ради эксперимента отключил кабель!! и он выдал вместо 3 всего 1 IP!!! (это ессно был 127.0.0.1)




Ранг: 420.3 (мудрец)
Активность: 0.240
Статус: Участник

Создано: 19 апреля 2006 15:08 · Поправил: ValdiS
· Личное сообщение · #7

Getorix, вот что нашел в DelphiWorld:

Как определить - подключен ли компьютер к сети

Воспользуемся функцией GetSystemMetrics(), переслав ей флаг SM_NETWORK:

procedure TForm1.Button2Click(Sender: TObject);
begin
if GetSystemMetrics(SM_NETWORK) and $01 = $01 then
ShowMessage('Machine is attached to network')
else
ShowMessage('Machine is not attached to network');
end;


Честно говоря, сам не проверял...

[Add]
Вроде работает...

-----
Сколько ни наталкивали на мысль – все равно сумел увернуться





Ранг: 209.5 (наставник), 42thx
Активность: 0.10
Статус: Участник
WinCE ARM M@sTeR

Создано: 19 апреля 2006 15:25
· Личное сообщение · #8

гм, странно конечно но и через WMI и с примером от ValdiS выдает "3" как при включенном кабеле, так и при выключенном.

-----
Get busy living or get busy dying ©




Ранг: 516.1 (!), 39thx
Активность: 0.280
Статус: Участник

Создано: 19 апреля 2006 15:46
· Личное сообщение · #9

найти первый комп в сети и пингануть?



Ранг: 12.9 (новичок)
Активность: 0=0
Статус: Участник

Создано: 19 апреля 2006 17:04 · Поправил: Python
· Личное сообщение · #10

bool IsCablePlugged(int InterfaceIndex)
{
MIB_IFROW iface;
ZeroMemory(&iface, sizeof(iface));
iface.dwIndex = InterfaceIndex;
DWORD dwRet;

dwRet = GetIfEntry(&iface);
if (dwRet == NO_ERROR) {
if ((iface.dwOperStatus == MIB_IF_OPER_STATUS_NON_OPERATIONAL)||
(iface.dwOperStatus == MIB_IF_OPER_STATUS_DISCONNECTED)) {
return false;
}
if (iface.dwOperStatus == MIB_IF_OPER_STATUS_OPERATIONAL) {
return true;
}
}
return false;
}


bool IsNetworkPresent()
{
PIP_ADAPTER_INFO pAdapterInfo, pAdapter = NULL;

pAdapterInfo = (IP_ADAPTER_INFO *) malloc(sizeof(IP_ADAPTER_INFO));
ULONG ulOutBufLen = sizeof(IP_ADAPTER_INFO);

if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) != ERROR_SUCCESS) {
free(pAdapterInfo);
pAdapterInfo = (IP_ADAPTER_INFO *) malloc(ulOutBufLen);
}

try {
if (GetAdaptersInfo(pAdapterInfo, &ulOutBufLen) == NO_ERROR) {
pAdapter = pAdapterInfo;
while (pAdapter) {
if ((pAdapter->Type == MIB_IF_TYPE_ETHERNET)&&(IsCablePlugged(pAdapter->Index))) {
return true;
}
pAdapter = pAdapter->Next;
}
}
} __finally {
free(pAdapterInfo);
}
return false;
}




Ранг: 36.9 (посетитель)
Активность: 0.050
Статус: Участник

Создано: 19 апреля 2006 17:31
· Личное сообщение · #11

Av0id пишет:
найти первый комп в сети и пингануть?

А может просто найти любой комп в сети(кажись есть такие функции) и пингануть те, которые есть в сети.Ну и если есть ответ, то значит шнур подключен. Но метод плох если нет ни одного компа в сети, а кабель все равно подключен(это если сеть небольшая).




Ранг: 260.3 (наставник), 2thx
Активность: 0.120
Статус: Участник
PPC-PROTECT author

Создано: 19 апреля 2006 17:54
· Личное сообщение · #12

да вон уже вариант готовый Python дал)) именно то что просили

-----
Пиво, сиськи, транс




Ранг: 44.7 (посетитель)
Активность: 0.040
Статус: Участник

Создано: 20 апреля 2006 11:21
· Личное сообщение · #13

d1v0x пишет:
примерно так (исходник на ВБ ):

Спасибо, понятно..........


2 Python - тоже спасибо........


 eXeL@B —› Программирование —› API для проверки воткнутости кабеля в сетевуху
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати