Proxy Switcher на MFC скачать, исходник

Рубрика: MFC, Дата: 9 September, 2015, Автор:

Прокси свичер, программка для смены прокси. Полностью меняет прокси на компе, прописывает в реестре. (Ссылка на скачивание программки в самом низу)

Proxy Switcher

Можно устанавливать как один прокси, так можно и добавить список в файле и перебирать.

Добавляем один прокси

Запускаем программу, добавляем прокси в поле и жмем кнопку “Установка” и прокси у нас установится.

Добавляем несколько прокси

Запускаем программу, выбераем переключатель список прокси, жмем кнопку “добавить файл”, выбираем файл с прокси. и затем можно кнопками << >> перебирать прокси из файл, выбираем тот который нада и жмем “Установить”. Все прокси установится.

Файл с прокси должен быть вида:

Proxy Switcher file

Удалить прокси

Просто нажать кнопку “Удалить”  или закрыть программу крестиком.

Код

test_proxyDlg.h »

// test_proxyDlg.h : файл заголовка
//

#pragma once
#include <vector>


// диалоговое окно Ctest_proxyDlg
class Ctest_proxyDlg : public CDialogEx
{
// Создание
public:
	Ctest_proxyDlg(CWnd* pParent = NULL);	// стандартный конструктор

// Данные диалогового окна
	enum { IDD = IDD_TEST_PROXY_DIALOG };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);	// поддержка DDX/DDV


// Реализация
protected:
	HICON m_hIcon;

	// Созданные функции схемы сообщений
	virtual BOOL OnInitDialog();
	afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
	afx_msg void OnPaint();
	afx_msg HCURSOR OnQueryDragIcon();
	DECLARE_MESSAGE_MAP()
public:
	afx_msg void OnBnClickedRadio1();
	afx_msg void OnBnClickedRadio2();
private:
	bool m_bRadio;
public:
	afx_msg void OnBnClickedButtonset();
	afx_msg void OnBnClickedButtondell();
	CString m_cEditOne;
	afx_msg void OnBnClickedButtonaddfile();
private:
	CString m_cEditPath;
	std::vector<CString> m_v;
	CString m_cEditProxy;
public:
	afx_msg void OnBnClickedButtonleft();
	afx_msg void OnBnClickedButtonriht();
private:
	int m_index;
	CString m_cProxy;
	virtual void OnCancel();
public:
	afx_msg void OnNMClickSyslink1(NMHDR *pNMHDR, LRESULT *pResult);
};

test_proxyDlg.cpp »

// test_proxyDlg.cpp : файл реализации
//

#include "stdafx.h"
#include "test_proxy.h"
#include "test_proxyDlg.h"
#include "afxdialogex.h"

#include "wininet.h"
#pragma comment(lib,"wininet.lib")
#include <vector>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif


// Диалоговое окно CAboutDlg используется для описания сведений о приложении

class CAboutDlg : public CDialogEx
{
public:
	CAboutDlg();

// Данные диалогового окна
	enum { IDD = IDD_ABOUTBOX };

	protected:
	virtual void DoDataExchange(CDataExchange* pDX);    // поддержка DDX/DDV

// Реализация
protected:
	DECLARE_MESSAGE_MAP()
};

CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
{
}

void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
}

BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()


// диалоговое окно Ctest_proxyDlg




Ctest_proxyDlg::Ctest_proxyDlg(CWnd* pParent /*=NULL*/)
	: CDialogEx(Ctest_proxyDlg::IDD, pParent)
	, m_bRadio(false)
	, m_cEditOne(_T(""))
	, m_cEditPath(_T(""))
	, m_cEditProxy(_T(""))
	, m_index(0)
	, m_cProxy(_T(""))
{
	m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}

void Ctest_proxyDlg::DoDataExchange(CDataExchange* pDX)
{
	CDialogEx::DoDataExchange(pDX);
	DDX_Text(pDX, IDC_EDITONE, m_cEditOne);
	DDX_Text(pDX, IDC_EDITPATH, m_cEditPath);
	DDX_Text(pDX, IDC_EDITPROXY, m_cEditProxy);
}

BEGIN_MESSAGE_MAP(Ctest_proxyDlg, CDialogEx)
	ON_WM_SYSCOMMAND()
	ON_WM_PAINT()
	ON_WM_QUERYDRAGICON()
	ON_BN_CLICKED(IDC_RADIO1, &Ctest_proxyDlg::OnBnClickedRadio1)
	ON_BN_CLICKED(IDC_RADIO2, &Ctest_proxyDlg::OnBnClickedRadio2)
	ON_BN_CLICKED(IDC_BUTTONSET, &Ctest_proxyDlg::OnBnClickedButtonset)
	ON_BN_CLICKED(IDC_BUTTONDELL, &Ctest_proxyDlg::OnBnClickedButtondell)
	ON_BN_CLICKED(IDC_BUTTONADDFILE, &Ctest_proxyDlg::OnBnClickedButtonaddfile)
	ON_BN_CLICKED(IDC_BUTTONLEFT, &Ctest_proxyDlg::OnBnClickedButtonleft)
	ON_BN_CLICKED(IDC_BUTTONRIHT, &Ctest_proxyDlg::OnBnClickedButtonriht)
	ON_NOTIFY(NM_CLICK, IDC_SYSLINK1, &Ctest_proxyDlg::OnNMClickSyslink1)
END_MESSAGE_MAP()


// обработчики сообщений Ctest_proxyDlg

BOOL Ctest_proxyDlg::OnInitDialog()
{
	CDialogEx::OnInitDialog();

	// Добавление пункта "О программе..." в системное меню.

	// IDM_ABOUTBOX должен быть в пределах системной команды.
	ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
	ASSERT(IDM_ABOUTBOX < 0xF000);

	CMenu* pSysMenu = GetSystemMenu(FALSE);
	if (pSysMenu != NULL)
	{
		BOOL bNameValid;
		CString strAboutMenu;
		bNameValid = strAboutMenu.LoadString(IDS_ABOUTBOX);
		ASSERT(bNameValid);
		if (!strAboutMenu.IsEmpty())
		{
			pSysMenu->AppendMenu(MF_SEPARATOR);
			pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
		}
	}

	// Задает значок для этого диалогового окна. Среда делает это автоматически,
	//  если главное окно приложения не является диалоговым
	SetIcon(m_hIcon, TRUE);			// Крупный значок
	SetIcon(m_hIcon, FALSE);		// Мелкий значок

	// TODO: добавьте дополнительную инициализацию
//	GetDlgItem(IDC_RADIO1)->get
	//инициализация радиокнопок
	if(!m_bRadio)
	{
		CheckDlgButton(IDC_RADIO1,1);//выставаляем радиокнопку
		GetDlgItem(IDC_BUTTONSET)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTONDELL)->EnableWindow(TRUE);
		GetDlgItem(IDC_EDITONE)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTONADDFILE)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTONLEFT)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTONRIHT)->EnableWindow(FALSE);
	}
	else
	{
		CheckDlgButton(IDC_RADIO2,1);//выставляем радиокнопку
		GetDlgItem(IDC_BUTTONSET)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTONDELL)->EnableWindow(TRUE);
		GetDlgItem(IDC_EDITONE)->EnableWindow(FALSE);
		GetDlgItem(IDC_BUTTONADDFILE)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTONLEFT)->EnableWindow(TRUE);
		GetDlgItem(IDC_BUTTONRIHT)->EnableWindow(TRUE);
	}

	return TRUE;  // возврат значения TRUE, если фокус не передан элементу управления
}

void Ctest_proxyDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
	if ((nID & 0xFFF0) == IDM_ABOUTBOX)
	{
		CAboutDlg dlgAbout;
		dlgAbout.DoModal();
	}
	else
	{
		CDialogEx::OnSysCommand(nID, lParam);
	}
}

// При добавлении кнопки свертывания в диалоговое окно нужно воспользоваться приведенным ниже кодом,
//  чтобы нарисовать значок. Для приложений MFC, использующих модель документов или представлений,
//  это автоматически выполняется рабочей областью.

void Ctest_proxyDlg::OnPaint()
{
	if (IsIconic())
	{
		CPaintDC dc(this); // контекст устройства для рисования

		SendMessage(WM_ICONERASEBKGND, reinterpret_cast<WPARAM>(dc.GetSafeHdc()), 0);

		// Выравнивание значка по центру клиентского прямоугольника
		int cxIcon = GetSystemMetrics(SM_CXICON);
		int cyIcon = GetSystemMetrics(SM_CYICON);
		CRect rect;
		GetClientRect(&rect);
		int x = (rect.Width() - cxIcon + 1) / 2;
		int y = (rect.Height() - cyIcon + 1) / 2;

		// Нарисуйте значок
		dc.DrawIcon(x, y, m_hIcon);
	}
	else
	{
		CDialogEx::OnPaint();
	}
}

// Система вызывает эту функцию для получения отображения курсора при перемещении
//  свернутого окна.
HCURSOR Ctest_proxyDlg::OnQueryDragIcon()
{
	return static_cast<HCURSOR>(m_hIcon);
}



void Ctest_proxyDlg::OnBnClickedRadio1()
{
	// TODO: добавьте свой код обработчика уведомлений
	m_bRadio=false;
	GetDlgItem(IDC_BUTTONSET)->EnableWindow(TRUE);
	GetDlgItem(IDC_BUTTONDELL)->EnableWindow(TRUE);
	GetDlgItem(IDC_EDITONE)->EnableWindow(TRUE);
	GetDlgItem(IDC_BUTTONADDFILE)->EnableWindow(FALSE);
	GetDlgItem(IDC_BUTTONLEFT)->EnableWindow(FALSE);
	GetDlgItem(IDC_BUTTONRIHT)->EnableWindow(FALSE);
}


void Ctest_proxyDlg::OnBnClickedRadio2()
{
	// TODO: добавьте свой код обработчика уведомлений
	m_bRadio=true;
	GetDlgItem(IDC_BUTTONSET)->EnableWindow(TRUE);
	GetDlgItem(IDC_BUTTONDELL)->EnableWindow(TRUE);
	GetDlgItem(IDC_EDITONE)->EnableWindow(FALSE);
	GetDlgItem(IDC_BUTTONADDFILE)->EnableWindow(TRUE);
	GetDlgItem(IDC_BUTTONLEFT)->EnableWindow(TRUE);
	GetDlgItem(IDC_BUTTONRIHT)->EnableWindow(TRUE);
}


void Ctest_proxyDlg::OnBnClickedButtonset()
{
	// TODO: добавьте свой код обработчика уведомлений
	UpdateData(TRUE);//получаем данные
	CString url;
	if(!m_bRadio)
	{
		m_cEditOne.Trim();
		if(m_cEditOne.GetLength()==0){AfxMessageBox(L"Введите прокси");return;}
		url=L"http://"+m_cEditOne;
		m_cEditProxy=m_cEditOne;
	}
	else
	{
		m_cProxy.Trim();
		if(m_cProxy.GetLength()==0){AfxMessageBox(L"прокси пустой");return;}
		url=L"http://"+m_cProxy;
	}
//	AfxMessageBox(url);

	CRegKey key;
	if(key.Open(HKEY_CURRENT_USER, L"Software\Microsoft\Windows\CurrentVersion\Internet Settings")!=ERROR_SUCCESS)
	{AfxMessageBox(L"don't open reg key");return;}
	if(key.SetDWORDValue(L"MigrateProxy",1)!=ERROR_SUCCESS){AfxMessageBox(L"don't open MigrateProxy");return;}
	if(key.SetDWORDValue(L"ProxyEnable",1)!=ERROR_SUCCESS){AfxMessageBox(L"don't open ProxyEnable");return;}
	if(key.SetDWORDValue(L"ProxyHttp1.1",0)!=ERROR_SUCCESS){AfxMessageBox(L"don't open ProxyHttp1.1");return;}
	if(key.SetStringValue(L"ProxyServer",url)!=ERROR_SUCCESS){AfxMessageBox(L"don't open ProxyServer");return;}
	if(key.SetStringValue(L"ProxyOverride",L"<local>")!=ERROR_SUCCESS){AfxMessageBox(L"don't open ProxyOverride");return;}      
	key.Close();
	InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0);
	InternetSetOption(NULL, INTERNET_OPTION_REFRESH , NULL, 0);
	UpdateData(FALSE);
	AfxMessageBox(L"Установлен "+url);
}


void Ctest_proxyDlg::OnBnClickedButtondell()
{
	// TODO: добавьте свой код обработчика уведомлений
	CRegKey key;
	if(key.Open(HKEY_CURRENT_USER, L"Software\Microsoft\Windows\CurrentVersion\Internet Settings")!=ERROR_SUCCESS)
	{AfxMessageBox(L"don't open reg key");return;}
	if(key.SetDWORDValue(L"ProxyEnable",0)!=ERROR_SUCCESS){AfxMessageBox(L"don't open ProxyEnable");return;}
	if(key.SetDWORDValue(L"ProxyHttp1.1",1)!=ERROR_SUCCESS){AfxMessageBox(L"don't open ProxyHttp1.1");return;}
	key.Close();
	InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0);
	InternetSetOption(NULL, INTERNET_OPTION_REFRESH , NULL, 0);

	AfxMessageBox(L"Удалено");
}


void Ctest_proxyDlg::OnBnClickedButtonaddfile()
{
	// TODO: добавьте свой код обработчика уведомлений
	CFileDialog fileDialog(TRUE,NULL,L"*.txt");	//объект класса выбора файла
	int result = fileDialog.DoModal();	//запустить диалоговое окно
	if (result==IDOK)	//если файл выбран
	{
		m_cEditPath=fileDialog.GetPathName();
		//читаем файл
		CStdioFile file;
		if(!file.Open(m_cEditPath,CFile::modeRead))
		{AfxMessageBox(L"don't open file proxy.txt");return;}
		CString temp;
		if(m_v.size()!=0)m_v.clear();//удаляем вектор
		while(file.ReadString(temp))m_v.push_back(temp);
		file.Close();
		TRACE("m_v.size()=%dn",m_v.size());
		if(m_v.size()==0){AfxMessageBox(L"not proxy");return;}
		m_cProxy=m_v[0];
		m_cEditProxy.Format(L"#1 (%s)",m_v[0]);
		m_index=0;

		UpdateData(FALSE);//обновляем данные
	//	AfxMessageBox(fileDialog.GetPathName()); // показать полный путь
	}
}


void Ctest_proxyDlg::OnBnClickedButtonleft()
{
	// TODO: добавьте свой код обработчика уведомлений
	m_index--;
	if(m_index<0) m_index=m_v.size()-1;
	m_cProxy=m_v[m_index];
	m_cEditProxy.Format(L"#%d (%s)",(m_index+1),m_v[m_index]);
	UpdateData(FALSE);
}


void Ctest_proxyDlg::OnBnClickedButtonriht()
{
	// TODO: добавьте свой код обработчика уведомлений
	m_index++;
	if(m_index>m_v.size()-1) m_index=0;
	m_cProxy=m_v[m_index];
	m_cEditProxy.Format(L"#%d (%s)",(m_index+1),m_v[m_index]);
	UpdateData(FALSE);
}


void Ctest_proxyDlg::OnCancel()
{
	// TODO: добавьте специализированный код или вызов базового класса
	CRegKey key;
	if(key.Open(HKEY_CURRENT_USER, L"Software\Microsoft\Windows\CurrentVersion\Internet Settings")!=ERROR_SUCCESS)
	{AfxMessageBox(L"don't open reg key");return;}
	if(key.SetDWORDValue(L"ProxyEnable",0)!=ERROR_SUCCESS){AfxMessageBox(L"don't open ProxyEnable");return;}
	if(key.SetDWORDValue(L"ProxyHttp1.1",1)!=ERROR_SUCCESS){AfxMessageBox(L"don't open ProxyHttp1.1");return;}
	key.Close();
	InternetSetOption(NULL, INTERNET_OPTION_SETTINGS_CHANGED, NULL, 0);
	InternetSetOption(NULL, INTERNET_OPTION_REFRESH , NULL, 0);

	CDialogEx::OnCancel();
}


void Ctest_proxyDlg::OnNMClickSyslink1(NMHDR *pNMHDR, LRESULT *pResult)
{
	// TODO: добавьте свой код обработчика уведомлений
	CAboutDlg Dlg;
	Dlg.DoModal();
	*pResult = 0;
}

Скачать программку 

Proxy Switcher

Скрин:

Proxy Switcher scrin

rss