Шаг 163 - Программный вход и выход из сети

Microsoft, Microsoft - сколько мною времени потрачено на выяснение этой простой веши, как же программно зайти в сеть. То есть вызвать инициализацию для входа в сеть. Реализована она в Windows отвратно, читайте "Шаг 55 - Вход в сеть". При входе или выходе из сети выгружаются приложения. Но есть возможность это обойти. Сразу смотрим код.

#include "stdafx.h"
#include "windows.h"
#include "iostream.h"

typedef  BOOL (WINAPI LOGON)(LPSTR,HWND);
typedef  BOOL (WINAPI LOGOOFF)(LPSTR,HWND);

void main()
{
	HINSTANCE hModule=NULL;
	hModule=::LoadLibrary("mpr.dll");
	if (hModule!=NULL)
	{
		cout << "ok load" << endl;
		LOGON* logon=NULL;
		logon=(LOGON*)::GetProcAddress((HMODULE)hModule,"WNetLogonA");
		if (logon!=NULL)
		{
			cout << "OK Load" << endl;
			BOOL result;
			result=(*logon)(NULL,NULL);
			if (result==0)
			{
				cout << "Ok function" << endl;
				char c;
				cin >> c;
				LOGOOFF* logoof=NULL;
				logoof=(LOGOOFF*)::GetProcAddress((HMODULE)hModule,"WNetLogoffA");
				if (logoof!=NULL)
				{
					cout << "Ok Function" << endl;
					result=(*logoof)(NULL,NULL);
					if (result==0)
					{
						cout << "Ok Exit Net" << endl;
					}
				}
			} else cout << GetLastError() << endl;

		}	
		::FreeLibrary(hModule); 
	}
	else cout << "error load Dll" << endl;
}

Здесь использованы две функции, такие как WnetLogonA и WnetLogoffA. В заголовочных файлах они не описаны и по этому придется вызывать их напрямую. Об этом читайте "Шаг 41 - Служба доступа к файлам и принтерам Microsoft". Итак, что мы имеем. Выйдите из сети. Запустите программу и Вы увидите то, что наверно не видели не когда. Вход в сесть при работающих приложениях.

Достаточно ввести пароль и Вы войдете в сеть. После ввода в окно буквы и нажатия Enter Вы выйдите из сети.

Пароль нужно будет вводить только один раз. При всех остальных запусках и остановках работы с сетью пароль будет уже не нужен.


Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 20.11.2001