Вопрос
Прошу вас помогите, мне нужна прога (исходник) на С/С++/VisualC++ , которая сидела бы в оперативке и отслеживала, есть ли соединение с интернетом или его нет, и в зависимости от этого что либо делала.
Ответ
Программа периодически проверяет наличие модемных соединений и делает чего-то соответствующее… (С/C++)
#define WIN32_LEAD_AND_MEAN
#include <windows.h>
#include <ras.h>
#pragma comment(lib, "Rasapi32.lib")
ATOM MyRegisterClass(HINSTANCE hInstance);
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam,
LPARAM lParam); void CheckConn(void);
/////////////////////////////////////////////////////////
HWND g_hWnd;
// Сколько раз в минуту проверять наличие соединения
#define CHECK_FREQ 10 TCHAR
szWndName[] = "InetFixer"; TCHAR szWndClass[] =
"WNDFIXER";
int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{ MSG msg; MyRegisterClass(hInstance);
g_hWnd = CreateWindow(szWndClass, szWndName,
WS_OVERLAPPEDWINDOW, CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);
SetTimer( g_hWnd, 2, 1000, NULL );
while(GetMessage( &msg,
NULL, 0, 0 )) { TranslateMessage(&msg);
DispatchMessage(&msg); } return msg.wParam;
} ATOM MyRegisterClass(HINSTANCE hInstance)
{ WNDCLASSEX wcex;
wcex.cbSize = sizeof(WNDCLASSEX);
wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = (WNDPROC)WndProc; wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0; wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, NULL);
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
wcex.hIconSm = LoadIcon(hInstance, NULL);
return RegisterClassEx(&wcex); } /* * CheckConn
* Проверка наличия соединения и выполнение соответствующих * действий
*/ void CheckConn(void) { //вместо одной структуры можно использовать также указатель //на массив и тогда будет возможность оперировать с несколькими модемами //:-ну я Вам в этом случае просто завидую
RASCONN rasConn; DWORD nConn; DWORD dwSize;
rasConn.dwSize = sizeof(RASCONN);
RasEnumConnections( &rasConn, &dwSize, &nConn );
if (nConn) { //…Есть соединение // можно, например взять и отрубить его // воспользовавшись следующим кодом:
// RasHangUp(rasConn.hrasconn);
} } LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_TIMER: CheckConn();
break; case WM_DESTROY:
PostQuitMessage(0); break; default:
return DefWindowProc(hWnd, message, wParam, lParam); } return 0; }
Из конференции Expert_FAQ
Copyright 2000-2004 Сообщество Чайников
Контактная информация