InternetCheckConnection BOOL InternetCheckConnection( IN LPCSTR lpszUrl, IN DWORD dwFlags, IN DWORD dwReserved ); Allows an application to check if a connection to the Internet can be established. Returns TRUE if a connection is made successfully, or FALSE otherwise. UseGetLastError to retrieve the error code. ERROR_NOT_CONNECTED is returned by GetLastError if a connection cannot be made or if the sockets database is unconditionally offline. lpszUrl Address of a string containing the Uniform Resource Locator (URL) to use to check the connection. This value can be set to NULL. dwFlags Unsigned long integer value containing the flag values. FLAG_ICC_FORCE_CONNECTION is the only flag that is currently available. If this flag is set, it forces a connection. A sockets connection is attempted in the following order: If lpszUrl is non-NULL, the host value is extracted from it and used to ping that specific host. If lpszUrl is NULL and there is an entry in WinInet's internal server database for the nearest sever, the host value is extracted from the entry and used to ping that server. dwReserved Reserved, must be zero.
С этим все ясно. Но при реализации - не получается, может кто сможет пару строчек (можно с invoke или классикой), у меня, по крайней мере, никак.
Может, поможет (просто ссылка на MSDN) http://msdn.microsoft.com/library/en-us/wininet/wininet/internetcheckc onnection.asp
а ты попробуй ее поюзать, вырубив свой фаервол. ps: сорри за оффтоп, но у меня почему-то MAPILogon возвращает в ЕАХе не нуль, а 2. кто знает?
Есть еще GetConnectionState() Вродь правильно написал, короче в ВинИнет.ДЛЛ оно или як-то похожее название дллКи и !00% пашет везде (Кроме Доса и Никсов)Если тебе связь с интернетом проверить то не парся с InternetCheckConnection()
Если я правильно вас понял вам надо проверять соединение с инетом? вот рабочий код... Код (Text): ; for FASM 1.53 ; ; (c) 2004, NaL :: [HI-TECH] ; ; format PE GUI 4.0 on '%fasminc%/null.stub' entry _start stack 10000h include '%fasminc%/win32a.inc' include '%fasminc%/macro/fasm32.mac' ; ; ###################################################################### ### ; section '.code' code readable executable ; ; ###################################################################### ### ; _start: align 4 xor ebx,ebx ; Создаем мютекс @call [CreateMutex],ebx,ebx,mutex_name mov [h_mutex],eax ; Если мютекс уже создан, то выходим call [GetLastError] or eax,eax jnz exit.2 ; Скрываем по Ctrl+Alt+Del @call [GetModuleHandle],kernel32_dll or eax,eax jz @F @call [GetProcAddress],eax,krnl_func or eax,eax jz @F @call eax,ebx,1 @@: ; Получим указатель на коммандную строку call [GetCommandLine] mov edi,eax mov ecx,MAX_PATH mov al,byte [edi] cmp al,22h jne @F inc edi repne scasb @@: mov al,20h repne scasb cmp byte [edi],bl jz exit.1 mov esi,edi mov edi,bat_path @@: lods byte [esi] cmp al,22h je @B stos byte [edi] or al,al jnz @B @@: ; Проверяем, имеется или удаленное соединение @call [IsNetworkAlive],n_a_state or eax,eax jnz @F ; Если соединения нет, ждем 1000 мс и повторяем проверку @call [Sleep],1000 jmp @B @@: ; Выполняем скрипт (файл) @call [WinExec],bat_path,ebx exit: .1: @call [ReleaseMutex],[h_mutex] .2: @call [ExitProcess],ebx ; ; ###################################################################### ### ; section '.idata' import data readable writeable ; ; ###################################################################### ### ; library kernel32,'KERNEL32.DLL',\ sensapi,'SENSAPI.DLL' include '%fasminc%/apia/kernel32.inc' include '%fasminc%/apia/sensapi.inc' ; ; ###################################################################### ### ; section '.data' data readable writeable ; ; ###################################################################### ### ; mutex_name db 'RUNTLS_ALREADY_RUN_48957',0 kernel32_dll db 'kernel32.dll',0 krnl_func db 'RegisterServiceProcess',0 n_a_state dd 2 h_mutex dd ? bat_path rb 1000h ;
varnie MAPILogon возвращает в ЕАХе не нуль, а 2 2 == MAPI_E_FAILURE - One or more unspecified errors occurred during logon. No session handle was returned.
Исходник не компилится. Я с Fasm' ом не сильно, но что за файл include '%fasminc%/macro/fasm32.mac' у меня в дистрибе его нет (Fasm 1.57). И заодно, этот исходник работает со всеми соединениями? (диалап, vpn, adsl...) Спасибо.
Эти файлы - свои наработки, см.аттач. Я проверял на диалапе, локальной сетке, и xDSL модеме через циску... _1618399228__runtls.rar
ОК! Все работает. БОЛЬШОЕ Спасибо. С функцией IsNetworkAlive еще не сталкивался, попробую покопать дальше.
Для надежности дописал проверку на IsDestinationReachable, и 100% проверка на Inet еnable! А то VPN other Ethernet не хотел видеть. Еще раз спасибо.