Посл.ответ |
Сообщение |
Ранг: 209.5 (наставник), 42thx Активность: 0.1↘0 Статус: Участник WinCE ARM M@sTeR
|
Создано: 19 апреля 2006 12:38 · Личное сообщение · #1
Может кто знает какими API можно проверить воткнут ли кабель в сетевую карту. Винда ж как-то это определяет внутри себя (перед тем как нарисовать компы с крестом и вывести хинт), значит средства должны быть
Если есть готовый кусок кода, буду признателен.
----- Get busy living or get busy dying © | Сообщение посчитали полезным: |
|
Ранг: 79.4 (постоянный) Активность: 0.09↘0 Статус: Участник
|
Создано: 19 апреля 2006 13:03 · Личное сообщение · #2
если я правильно понял, можно проверить свой внутренний айпи? и если он не равен 127.0.0.1 знащит мы подключены к сети
в противном случае у нас локальный хост...
| Сообщение посчитали полезным: |
Ранг: 44.7 (посетитель) Активность: 0.04↘0 Статус: Участник
|
Создано: 19 апреля 2006 13:33 · Личное сообщение · #3
d1v0x пишет:
можно проверить свой внутренний айпи?
А как это можно сделать :-[
| Сообщение посчитали полезным: |
Ранг: 62.8 (постоянный) Активность: 0.04↘0 Статус: Участник
|
Создано: 19 апреля 2006 13:39 · Личное сообщение · #4
Вот, а у меня нет сетевухи, но есть внешний кабельный модем (вроде модем называется, на упаковке написано).
Перечисление устройств тебе нужно, по всей видимости, но этой функции у меня в справочнике нет. Ключевое слово "Device", больше ничего сказать не могу к сожалению.
| Сообщение посчитали полезным: |
Ранг: 209.5 (наставник), 42thx Активность: 0.1↘0 Статус: Участник WinCE ARM M@sTeR
|
Создано: 19 апреля 2006 13:58 · Личное сообщение · #5
Да тут говорят WMI юзать надо, пытаюсь разобраться вот...
----- Get busy living or get busy dying © | Сообщение посчитали полезным: |
Ранг: 79.4 (постоянный) Активность: 0.09↘0 Статус: Участник
|
Создано: 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.24↘0 Статус: Участник
|
Создано: 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.1↘0 Статус: Участник WinCE ARM M@sTeR
|
Создано: 19 апреля 2006 15:25 · Личное сообщение · #8
гм, странно конечно но и через WMI и с примером от ValdiS выдает "3" как при включенном кабеле, так и при выключенном.
----- Get busy living or get busy dying © | Сообщение посчитали полезным: |
Ранг: 516.1 (!), 39thx Активность: 0.28↘0 Статус: Участник
|
Создано: 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.05↘0 Статус: Участник
|
Создано: 19 апреля 2006 17:31 · Личное сообщение · #11
Av0id пишет:
найти первый комп в сети и пингануть?
А может просто найти любой комп в сети(кажись есть такие функции) и пингануть те, которые есть в сети.Ну и если есть ответ, то значит шнур подключен. Но метод плох если нет ни одного компа в сети, а кабель все равно подключен(это если сеть небольшая).
| Сообщение посчитали полезным: |
Ранг: 260.3 (наставник), 2thx Активность: 0.12↘0 Статус: Участник PPC-PROTECT author
|
Создано: 19 апреля 2006 17:54 · Личное сообщение · #12
да вон уже вариант готовый Python дал)) именно то что просили
----- Пиво, сиськи, транс | Сообщение посчитали полезным: |
Ранг: 44.7 (посетитель) Активность: 0.04↘0 Статус: Участник
|
Создано: 20 апреля 2006 11:21 · Личное сообщение · #13
d1v0x пишет:
примерно так (исходник на ВБ ):
Спасибо, понятно..........
2 Python - тоже спасибо........
| Сообщение посчитали полезным: |