实例介绍
【实例简介】
【实例截图】
【核心代码】
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
RasConnectionWatcher watcher;
Thread oThread;
private volatile bool _shouldStop;
int[] isPPPOE;
private void Form1_Load(object sender, EventArgs e)
{
//declarations
RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\RAS AutoDial\\Default\\", true);
watcher = new RasConnectionWatcher();
Form1.CheckForIllegalCrossThreadCalls = false;
//load config file
PersistentSettings.Instance.Load("win8redialer.config");
chkAutoStart.Checked = bool.Parse(PersistentSettings.Instance.GetValue("AutoStart", "false"));
chkAutoDial.Checked = bool.Parse(PersistentSettings.Instance.GetValue("AutoDial", "false"));
chkNoBytes.Checked = bool.Parse(PersistentSettings.Instance.GetValue("NoBytes", "false"));
chkHosted.Checked = bool.Parse(PersistentSettings.Instance.GetValue("RestartHostedNetwork", "false"));
txtUserName.Text = PersistentSettings.Instance.GetValue("Username","" );
txtPassword.Text = PersistentSettings.Instance.GetValue("Password", "");
// get list of connections
try
{
RasPhoneBook pbk = new RasPhoneBook();
pbk.Open(RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User));
isPPPOE = new int[pbk.Entries.Count];
int i=0;
foreach (RasEntry entry in pbk.Entries)
{
if (entry.DialMode == DotRas.RasDialMode.None)
isPPPOE[i] = 1;
else
isPPPOE[i] = 0;
i ;
listBox1.Items.Add(entry.Name);
}
}
catch (Exception er)
{
appendLog(er.Message);
}
//detect default connection
try
{
for (int i = 0; i < listBox1.Items.Count; i )
{
if (rkApp != null)
{
if (listBox1.Items[i].ToString() == rkApp.GetValue("DefaultInternet").ToString())
{
listBox1.SelectedIndex = i;
break;
}
}
else
{
appendLog("Unable to detect Default connection.");
break;
}
}
}
catch (Exception ex)
{
appendLog(ex.Message);
}
//Auto dial
if (chkAutoDial.Checked == true)
{
button1_Click(sender, e);
}
}
public void checkUpdate()
{
VersionHelper versionHelper = new VersionHelper();
if (versionHelper.CheckForNewVersion())
{
if (MessageBox.Show("New Version of Windows 8 Redialer is Available. Download?", "Update", MessageBoxButtons.YesNo) == DialogResult.Yes)
versionHelper.DownloadNewVersion();
}
}
public void appendLog(string str)
{
if (txtStatus.Text =="")
txtStatus.AppendText("[" DateTime.Now.ToString() "]:" str);
else
txtStatus.AppendText(Environment.NewLine "[" DateTime.Now.ToString() "]:" str);
using (StreamWriter sw = File.AppendText("log.txt"))
{
sw.WriteLine("[" DateTime.Now.ToString() "]:" str);
}
}
public void button1_Click(object sender, EventArgs e)
{
if (listBox1.SelectedIndex == -1)
{
appendLog("Select a connection...");
}
else
{
try
{
appendLog("Win8 Redialer Started...");
button1.Enabled = false;
button2.Enabled = true;
Begin();
RasConnection r = RasConnection.GetActiveConnectionByName(listBox1.Items[listBox1.SelectedIndex].ToString(), RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User));
if (r == null)
{
_shouldStop = false;
oThread = new Thread(new ThreadStart(connect));
oThread.Start();
}
}
catch (Exception er)
{
appendLog(er.Message);
}
}
}
public void Begin()
{
try
{
if (chkNoBytes.Checked)
timer2.Enabled = true;
watcher.Connected = new EventHandler<RasConnectionEventArgs>(this.watcher_Connected);
watcher.Disconnected = new EventHandler<RasConnectionEventArgs>(this.watcher_Disconnected);
watcher.EnableRaisingEvents = true;
}
catch (Exception er)
{
appendLog(er.Message);
}
}
public void Stop()
{
try
{
watcher.EnableRaisingEvents = false;
timer2.Enabled = false;
RequestStop();
}
catch (Exception er)
{
appendLog(er.Message);
}
}
private void watcher_Connected(object sender, RasConnectionEventArgs e)
{
// A connection has successfully connected.
}
public void connect()
{
retry:
try
{
if (!_shouldStop)
{
using (RasDialer dialer = new RasDialer())
{
appendLog("Connecting...");
dialer.EntryName = listBox1.Items[listBox1.SelectedIndex].ToString();
dialer.PhoneBookPath = RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User);
if (isPPPOE[listBox1.SelectedIndex] == 1)
dialer.Credentials = new System.Net.NetworkCredential(txtUserName.Text, txtPassword.Text);
dialer.Dial();
appendLog("Connected...");
if (chkHosted.Checked)
RunCmdFile();
}
}
}
catch (Exception er)
{
appendLog(er.Message);
appendLog("Trying in 10 secs...");
Thread.Sleep(1000 * 10);
goto retry;
}
}
public void RequestStop()
{
_shouldStop = true;
}
private void RunCmdFile()
{
//run command file to reinstall app.
var p = new Process();
p.StartInfo = new ProcessStartInfo("cmd.exe", "/c hosted.cmd");
p.StartInfo.CreateNoWindow = true;
p.Start();
//p.WaitForExit();
}
private void watcher_Disconnected(object sender, RasConnectionEventArgs e)
{
appendLog("Disconnected...");
_shouldStop = false;
oThread = new Thread(new ThreadStart(connect));
oThread.Start();
}
private void listBox1_SelectedIndexChanged(object sender, EventArgs e)
{
try
{
if (listBox1.SelectedIndex != -1)
{
RasConnection r = RasConnection.GetActiveConnectionByName(listBox1.Items[listBox1.SelectedIndex].ToString(), RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User));
if (r == null)
appendLog("Current Status:Disconnected");
else
appendLog("Current Status:" r.GetConnectionStatus().ConnectionState);
if (button1.Enabled == false)
button1.Enabled = true;
}
}
catch (Exception er)
{
appendLog(er.Message);
}
}
private void button2_Click(object sender, EventArgs e)
{
appendLog("Win8 Redialer Stopped...");
button1.Enabled = true;
button2.Enabled = false;
Stop();
}
private void Form1_Resize(object sender, EventArgs e)
{
if (FormWindowState.Minimized == this.WindowState)
{
notifyIcon1.Visible = true;
notifyIcon1.ShowBalloonTip(500);
this.Hide();
}
else if (FormWindowState.Normal == this.WindowState)
{
notifyIcon1.Visible = false;
}
}
private void notifyIcon1_MouseDoubleClick(object sender, MouseEventArgs e)
{
this.Show();
this.WindowState = FormWindowState.Normal;
}
private void timer2_Tick(object sender, EventArgs e)
{
if (chkNoBytes.Checked == true)
{
RasConnection r = RasConnection.GetActiveConnectionByName(listBox1.Items[listBox1.SelectedIndex].ToString(), RasPhoneBook.GetPhoneBookPath(RasPhoneBookType.User));
if (r != null)
{
using (TcpClient tcp = new TcpClient())
{
IAsyncResult ar = tcp.BeginConnect("google.com", 80, null, null);
System.Threading.WaitHandle wh = ar.AsyncWaitHandle;
try
{
if (!ar.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(5), false))
{
tcp.Close();
appendLog("No Bytes. Disconnecting...");
r.HangUp();
}
//tcp.EndConnect(ar);
}
finally
{
wh.Close();
}
}
}
}
}
private void aboutToolStripMenuItem_Click(object sender, EventArgs e)
{
}
private void button3_Click(object sender, EventArgs e)
{
//MessageBox.Show("Created By: Ankit Sharma" Environment.NewLine "Download available at: http://www.ankitsharma.info" Environment.NewLine "For your suggestions & bug reports email at ankit@ankitsharma.info", "About Win8 Redialer", MessageBoxButtons.OK);
About about = new About();
about.ShowDialog();
}
private void txtStatus_TextChanged(object sender, EventArgs e)
{
//File.WriteAllText("log.txt", txtStatus.Text);
}
private void chkAutoStart_CheckedChanged(object sender, EventArgs e)
{
RegistryKey rkApp = Registry.CurrentUser.OpenSubKey("SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", true);
if (chkAutoStart.Checked == true)
rkApp.SetValue("Win8 Redialer", Application.ExecutablePath.ToString());
else
rkApp.DeleteValue("Win8 Redialer", false);
PersistentSettings.Instance.SetValue("AutoStart", chkAutoStart.Checked.ToString());
PersistentSettings.Instance.Save();
}
private void chkAutoDial_CheckedChanged(object sender, EventArgs e)
{
PersistentSettings.Instance.SetValue("AutoDial", chkAutoDial.Checked.ToString());
PersistentSettings.Instance.Save();
}
private void chkNoBytes_CheckedChanged(object sender, EventArgs e)
{
PersistentSettings.Instance.SetValue("NoBytes", chkNoBytes.Checked.ToString());
PersistentSettings.Instance.Save();
}
private void button5_Click(object sender, EventArgs e)
{
PersistentSettings.Instance.SetValue("Username", txtUserName.Text);
PersistentSettings.Instance.SetValue("Password", txtPassword.Text);
PersistentSettings.Instance.Save();
MessageBox.Show("Saved!");
}
private void timer1_Tick(object sender, EventArgs e)
{
checkUpdate();
timer1.Enabled = false;
}
private void chkHosted_CheckedChanged(object sender, EventArgs e)
{
PersistentSettings.Instance.SetValue("RestartHostedNetwork", chkHosted.Checked.ToString());
PersistentSettings.Instance.Save();
}
private void Form1_FormClosing(object sender, FormClosingEventArgs e)
{
var result = MessageBox.Show("Are you sure you want to exit the application?", "Exit Win8 Redialer?",
MessageBoxButtons.YesNo,
MessageBoxIcon.Question);
e.Cancel = (result == DialogResult.No);
}
}
好例子网口号:伸出你的我的手 — 分享!
小贴士
感谢您为本站写下的评论,您的评论对其它用户来说具有重要的参考价值,所以请认真填写。
- 类似“顶”、“沙发”之类没有营养的文字,对勤劳贡献的楼主来说是令人沮丧的反馈信息。
- 相信您也不想看到一排文字/表情墙,所以请不要反馈意义不大的重复字符,也请尽量不要纯表情的回复。
- 提问之前请再仔细看一遍楼主的说明,或许是您遗漏了。
- 请勿到处挖坑绊人、招贴广告。既占空间让人厌烦,又没人会搭理,于人于己都无利。
关于好例子网
本站旨在为广大IT学习爱好者提供一个非营利性互相学习交流分享平台。本站所有资源都可以被免费获取学习研究。本站资源来自网友分享,对搜索内容的合法性不具有预见性、识别性、控制性,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,平台无法对用户传输的作品、信息、内容的权属或合法性、安全性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论平台是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二与二十三条之规定,若资源存在侵权或相关问题请联系本站客服人员,点此联系我们。关于更多版权及免责申明参见 版权及免责申明


网友评论
我要评论