まぁ、あんまり綺麗なソースではないですが。
興味ない人も、作らない人も「こんなことをやっているんだ」と見てみると、Offisnail さんや、KOTETUさんが、大変な思いをして作られていることがなんとなくわかるかと思います。
すでに登録があったら読みにいくところ
読みにいってレジストリがあれば、読み込むようにします。
private void Form1_Load(object sender, EventArgs e)
{
RegistryKey rkey;
rkey = Registry.CurrentUser.OpenSubKey
(@"Software\Microsoft\Today\Keys\112");
if (rkey != null )
{
txtUrlL.Text = rkey.GetValue("Open").ToString();
txtTitleL.Text = rkey.GetValue("Default").ToString();
rkey.Close();
}
:
}
最後に保存するところ
初期状態では結構キーが出来てないことがあるので注意です。
private void menuSet_Click(object sender, EventArgs e)
{
RegistryKey rkey;
Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Today\Keys");
if( txtUrlL.Text != "")
{
rkey = Registry.CurrentUser.CreateSubKey(@"Software\Microsoft\Today\Keys\112");
rkey.SetValue("Open",txtUrlL.Text );
rkey.SetValue("Default",txtTitleL.Text );
rkey.Close();
}
:
Application.Exit();
}
参照ボタンを押してファイルを開くダイアログからファイルを選択
2つの参照ボタンから1つのメソッドを呼んでいるのでどちらのボタンから押されたのかチェックして処理します。
private void btnRef_Click(object sender, EventArgs e)
{
if (openFileDialog1.ShowDialog() == DialogResult.OK)
{
if (((Button)sender).Name == "btnRefL")
{
txtUrlL.Text = openFileDialog1.FileName;
txtTitleL.Text = Path.GetFileNameWithoutExtension(openFileDialog1.FileName);
}
else
{
txtUrlR.Text = openFileDialog1.FileName;
txtTitleR.Text = Path.GetFileNameWithoutExtension(openFileDialog1.FileName);
}
}
}
機能設定
ただ単にテキストボックスに書き込むだけの共通処理関数
private void setFunction(string appname, string path)
{
if (bleft)
{
txtUrlL.Text = path;
txtTitleL.Text = appname;
}
else
{
txtUrlR.Text = path;
txtTitleR.Text = appname;
}
}
リンクを作成
WMのリンクはただテキストファイルを作るだけ。特に連絡先、予定表、仕事はすべてPoutlook.exeの引数違い名だけなので、その3つのショートカットを作る専用になっています。
private void makelnk(string name)
{
if (!File.Exists(@"\Windows\" + name + ".lnk"))
{
StreamWriter sr = new StreamWriter(@"\Windows\" + name + ".lnk");
sr.Write(@"64#""\Windows\poutlook.exe"" " + name);
sr.Close();
}
}
機能メニュー処理
オプションの必要のない、メールなどはそのままテキストボックスに書き込む処理を、予定表、連絡先、仕事でははじめにリンクを作成してから登録します。
private void menuMail_Click(object sender, EventArgs e)
{
setFunction(sender, "メール", "tmail.exe");
}
private void menuCalendar_Click(object sender, EventArgs e)
{
makelnk("calendar");
setFunction(sender, "予定表", @"\Windows\calendar.lnk");
}
テキストボックスのフォーカス移動処理
テキストボックスにフォーカスが移動すると、カーソルキーでは脱出できません。(Tabキーなら可能ですが)そのため、上下のカーソルキーが押された次のコントロールにフォーカスを移します。
private void txtTitleL_KeyDown(object sender, KeyEventArgs e)
{
if ((e.KeyCode == System.Windows.Forms.Keys.Down))
{
btnFuncR.Focus();
}
if ((e.KeyCode == System.Windows.Forms.Keys.Up))
{
txtUrlL.Focus();
}
}
機能キーの処理
機能設定ボタンはコンテキストメニューを表示し、その中の各メニューから選んで...とかなり階層が深くなります。そのためどのボタンから呼ばれたのかわからなくなってしまうので、ボタンを押した時点で右用か左用かチェックしておきました。
Boolean bleft = false;
private void btnFunc_Click(object sender, EventArgs e)
{
if (((Button)sender).Name == "btnFuncL")
bleft = true;
else
bleft = false;
contextMenu1.Show( (Button)sender, new Point(20, 0));
}