![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
bercut |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 15.8.2002 Где: Волжский Репутация: нет Всего: нет |
В папке, где установлен у тебя C++Builder5 есть пример отслеживания процессов и их уничтожения. Вот эта папочка с примером, надеюсь разберешься:
\Examples\Apps\Procview\ |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: нет Всего: 207 |
Модератор: Не надо превращать тему во флейм. Здесь обсуждается тема "Как определить подключён ли комп. к интернету?", для обсуждения других тем делайте другие топики. Ещё один офтоп и тема будет закрыта.
-------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
bercut |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 15.8.2002 Где: Волжский Репутация: нет Всего: нет |
Модератор: Удалено как не относящееся к теме обсуждения.
|
|||
|
||||
Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Флейм начался с пятого сообщения! Снятие задач не относится к вопросу: подключен ли комп к инету.
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
bercut |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 15.8.2002 Где: Волжский Репутация: нет Всего: нет |
Модератор: Удалено как не относящееся к теме обсуждения.
|
|||
|
||||
Baa |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 2639 Регистрация: 12.4.2002 Где: Москва Репутация: 8 Всего: 12 |
Если у человека есть 10 вопросов, то пусть он создает 10 тем.
-------------------- "Duty is everything; the greatest of joys, the deepest of sorrows" Aribeth de Tylmarande |
|||
|
||||
Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: нет Всего: 25 |
Модератор: Удалено как не относящееся к теме обсуждения.
PS. Обсудить форум и действия модераторов можно здесь: http://www.forum.vingrad.ru/cgi-bin....SF;f=27 -------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: нет Всего: 25 |
Модератор: Удалено как не относящееся к теме обсуждения.
-------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
neutrino |
|
|||
![]() Gothic soul ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 3041 Регистрация: 25.3.2002 Где: Верхняя Галилея, Кармиэль Репутация: 1 Всего: 62 |
Модератор: Удалено как не относящееся к теме обсуждения.
-------------------- The truth comes from within ... Покойся с миром, Vit |
|||
|
||||
Vit |
|
|||
![]() Vitaly Nevzorov ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 10964 Регистрация: 25.3.2002 Где: Chicago Репутация: нет Всего: 207 |
По существу вопроса - для Билдера должна быть библиотека RasAPI- там есть функции для определения коннекта к интернету, но они работают только для модемного соединения. Во всех остальных случаях есть только 1 надёжный способ - попытаться загрузить web страничку с www.yahoo.com или www.microsoft.com или что-то типа этого. Почему так? Да просто потому что если мой комп стоит в локалке и подсоединён к прокси и к локальным Web серверам то операционная система искренне считает что она в интернете, даже если реального коннекта с остальным миром нет. Ping внешнего сервера как я выяснил не очень хорошо подходит, так как многие сервера и firewall запрещают протокол Ping - попробуйте например пропинговать:
Ping www.microsoft.com - и получите timeout на все запросы. Следовательно лучше всего просто попытаться скачать страничку (на Билнере это легко можно сделать используя NMHTTP компонент). Однако и в данном случае возможны проблемы: например я могу поставить Firewall и прокси таким образом что доступ будет только, например, к домену Yahoo.com или например только к доменам находящимся на территории Гвинеи - как в этом случае считать есть интернет или нет? - очевидно что есть, но только толку от этого скорее всего буден немного. Следовательно мой ответ будет такой: 1) Если модемное соединение используйте модуль RasAPI 2) Если соединение неизвестно - пытайтесь скачать заведомо известо существующий сервер - лучше всего свой собственный - тут вы можете даже проверить корректность ответа - вы точно знаете что именно вы должны получить по запросу. 3) Не обольщатся и понимать что 100% корректного решения проблемы нет, так как само понятие интернет растяжимое, и наличие доступа к некоторым серверам еще не означает наличия выхода на все сервера. Следовательно проблему доступа надо решать не для доступа к "интернету", а "есть ли доступ к конкретному, нужному вам серверу". Чуть не забыл - проксисервер, Gateway и DNS сервер могут быть перенастроены очень даже хитро - возможно настроить так что Ping будет проходить на любой IP (просто firewall будет его ретранслировать на один и тот же адрес) и в ответ на запрос любой страницы Proxi будет выдавать одну и ту же страницу или какую-то свою страницу - причём без всяких ошибок! Поэтому наряду со скачиванием страницы с известного стабильного сервера желательна проверка контента - действительно ли он содержит ожидаемую страницу. Поэтому желательно пользоваться скачиванием со своего сервера - тогда вы точно знаете что надо ожидать в ответ. -------------------- With the best wishes, Vit I have done so much with so little for so long that I am now qualified to do anything with nothing Самый большой Delphi FAQ на русском языке здесь: www.drkb.ru |
|||
|
||||
bercut |
|
|||
Новичок Профиль Группа: Участник Сообщений: 35 Регистрация: 15.8.2002 Где: Волжский Репутация: нет Всего: нет |
Вот исходный код Ping'a
// // PingI.c -- Simple ping program using the proprietary // Microsoft ICMP API // #include <windows.h> #include <winsock.h> #include <stdio.h> #include <string.h> typedef struct tagIPINFO { u_char Ttl; // Time To Live u_char Tos; // Type Of Service u_char IPFlags; // IP flags u_char OptSize; // Size of options data u_char FAR *Options; // Options data buffer }IPINFO, *PIPINFO; typedef struct tagICMPECHO { u_long Source; // Source address u_long Status; // IP status u_long RTTime; // Round trip time in milliseconds u_short DataSize; // Reply data size u_short Reserved; // Unknown void FAR *pData; // Reply data buffer IPINFO ipInfo; // Reply options }ICMPECHO, *PICMPECHO; // ICMP.DLL Export Function Pointers HANDLE (WINAPI *pIcmpCreateFile)(VOID); BOOL (WINAPI *pIcmpCloseHandle)(HANDLE); DWORD (WINAPI *pIcmpSendEcho) (HANDLE,DWORD,LPVOID,WORD,PIPINFO,LPVOID,DWORD,DWORD); // // void main(int argc, char **argv) { WSADATA wsaData; // WSADATA ICMPECHO icmpEcho; // ICMP Echo reply buffer HANDLE hndlIcmp; // LoadLibrary() handle to ICMP.DLL HANDLE hndlFile; // Handle for IcmpCreateFile() LPHOSTENT pHost; // Pointer to host entry structure struct in_addr iaDest; // Internet address structure DWORD *dwAddress; // IP Address IPINFO ipInfo; // IP Options structure int nRet; // General use return code DWORD dwRet; // DWORD return code int x; // Check arguments if (argc != 2) { fprintf(stderr,"\nSyntax: pingi HostNameOrIPAddress\n"); return; } // Dynamically load the ICMP.DLL hndlIcmp = LoadLibrary("ICMP.DLL"); if (hndlIcmp == NULL) { fprintf(stderr,"\nCould not load ICMP.DLL\n"); return; } // Retrieve ICMP function pointers pIcmpCreateFile = (HANDLE (WINAPI *)(void)) GetProcAddress(hndlIcmp,"IcmpCreateFile"); pIcmpCloseHandle = (BOOL (WINAPI *)(HANDLE)) GetProcAddress(hndlIcmp,"IcmpCloseHandle"); pIcmpSendEcho = (DWORD (WINAPI *) (HANDLE,DWORD,LPVOID,WORD,PIPINFO,LPVOID,DWORD,DWORD)) GetProcAddress(hndlIcmp,"IcmpSendEcho"); // Check all the function pointers if (pIcmpCreateFile == NULL || pIcmpCloseHandle == NULL || pIcmpSendEcho == NULL) { fprintf(stderr,"\nError getting ICMP proc address\n"); FreeLibrary(hndlIcmp); return; } // Init WinSock nRet = WSAStartup(0x0101, &wsaData ); if (nRet) { fprintf(stderr,"\nWSAStartup() error: %d\n", nRet); WSACleanup(); FreeLibrary(hndlIcmp); return; } // Check WinSock version if (0x0101 != wsaData.wVersion) { fprintf(stderr,"\nWinSock version 1.1 not supported\n"); WSACleanup(); FreeLibrary(hndlIcmp); return; } // Lookup destination // Use inet_addr() to determine if we're dealing with a name // or an address iaDest.s_addr = inet_addr(argv[1]); if (iaDest.s_addr == INADDR_NONE) pHost = gethostbyname(argv[1]); else pHost = gethostbyaddr((const char *)&iaDest, sizeof(struct in_addr), AF_INET); if (pHost == NULL) { fprintf(stderr, "\n%s not found\n", argv[1]); WSACleanup(); FreeLibrary(hndlIcmp); return; } // Tell the user what we're doing printf("\nPinging %s [%s]", pHost->h_name, inet_ntoa((*(LPIN_ADDR)pHost->h_addr_list[0]))); // Copy the IP address dwAddress = (DWORD *)(*pHost->h_addr_list); // Get an ICMP echo request handle hndlFile = pIcmpCreateFile(); for (x = 0; x < 4; x++) { // Set some reasonable default values ipInfo.Ttl = 255; ipInfo.Tos = 0; ipInfo.IPFlags = 0; ipInfo.OptSize = 0; ipInfo.Options = NULL; //icmpEcho.ipInfo.Ttl = 256; // Reqest an ICMP echo dwRet = pIcmpSendEcho( hndlFile, // Handle from IcmpCreateFile() *dwAddress, // Destination IP address NULL, // Pointer to buffer to send 0, // Size of buffer in bytes &ipInfo, // Request options &icmpEcho, // Reply buffer sizeof(struct tagICMPECHO), 5000); // Time to wait in milliseconds // Print the results iaDest.s_addr = icmpEcho.Source; printf("\nReply from %s Time=%ldms TTL=%d", inet_ntoa(iaDest), icmpEcho.RTTime, icmpEcho.ipInfo.Ttl); if (icmpEcho.Status) { printf("\nError: icmpEcho.Status=%ld", icmpEcho.Status); break; } } printf("\n"); // Close the echo request file handle pIcmpCloseHandle(hndlFile); FreeLibrary(hndlIcmp); WSACleanup(); } |
|||
|
||||
Klin |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1938 Регистрация: 7.10.2002 Где: Краснодар Репутация: нет Всего: 25 |
Спасибо, bercut.
Тема-закрыта! -------------------- Я человек - попробуйте обвинить меня за это. |
|||
|
||||
NebelDT |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 54 Регистрация: 29.9.2008 Где: RU Репутация: -1 Всего: -10 |
Пропинговать - это хорошая идея, можно еше и проверить наличие загруженных служб или exe))...
|
|||
|
||||
xvr |
|
|||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
NebelDT а ты не хочешь 3е образование получить? Врача - реаниматора ![]() ![]() |
|||
|
||||
Alca |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3993 Регистрация: 14.6.2006 Репутация: 7 Всего: 50 |
Как определить тип подключения к сети при помощи InternetGetConnectedState
Автор: Paul Marshal Компилятор: Visual Basic API функция InternetGetConnectedState содержится в wininet.dll (IE4 / IE5) и показывает состояние подключения к сети локальной системы. Она довольно проста в использовании и возвращает TRUE, если присутствует соединение с интернетом, иначе FALSE. Так же функция содержит параметр dwFlags. После вызова функции, dwFlags содержит состояние текущего соединения. Добавьте следующий код в секцию объявлений модуля BAS:
Добавьте на форму кнопку (Command1), шесть текстовых полей (Text1 - Text6). Установите в Text6 свойство Multiline в True и добавьте следующий код:
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |