えー、フツーでしょ、My.Computerクラスとか、え? 使えないの? インスタンス取るの? メンドクセー!!! が第一声w
新しい作業用PC、画面大きいし、テンキーあるし、メモリあるし、今のところ不満――あるんだな、これが。
NumLockキーのインジケーターが存在しないw
つまり、NumLockキーON/OFFが目視できないんだわ、いや、あるの当たり前だと思ってたんだけどさ、なかったんだわ、このPC。
なので、タスクトレイにインジケータつけておけばよくね?という発想に至る。
まぁ、あれだ、VBだと、さくっと一行で解決するんだわ。
https://msdn.microsoft.com/ja-jp/library/microsoft.visualbasic.devices.keyboard(v=vs.110).aspx
My.Computer.Keyboardにずばり、NumLock のBooleanいるしね。さくっと書いて終わり。
んじゃ面白くないから、勉強かねてC#でやろうとしたらさ、そしたらさ、My.Computer がない。My空間そのものがない。
まじかーorz
しょうがないから、Microsoft.VisualBasic.Devices 参照追加して、自分で書くorz
んでもって、作ったのがこちら。長いよw
/// <summary>
/// タスクトレイ専用アイコン制御するフォームクラス
/// </summary>
internal class MainForm : Form
{
//動的変更するのでコンテナ化しとく
private IContainer components = null;
//アイコンも固定で持つ
private NotifyIcon icon;
//終わるよメニューは固定でもつ
private ContextMenuStrip menu;
private ToolStripMenuItem menuItem;
//VBer必須のMy.Computerクラス
private Computer myComputer;
//タイマー
private Timer timer;
public MainForm()
{
//一回だけ処理
ShowInTaskbar = false;
initialize();
}
private void Close_Click(object sender, EventArgs e)
{
// 終わるよイベント
timer.Stop();
timer.Dispose();
Application.Exit();
}
private void initialize()
{
//初期化処理
myComputer = new Computer();
components = new System.ComponentModel.Container();
icon = new NotifyIcon(components);
//メニュー構成
setMenu();
//通知アイコン設定
setNotifyIcon();
//タイマー初期化
timer = new Timer();
timer.Interval = 1000;
timer.Tick += new EventHandler(intervalCheck);
timer.Start();
}
private void intervalCheck(object sender, EventArgs e)
{
// タイマーイベント
timer.Stop();
setNotifyIcon();
Refresh();
timer.Start();
}
private void setMenu()
{
//メニュー作成
menu = new ContextMenuStrip();
menuItem = new ToolStripMenuItem();
// 簡単な単語の場合、リソース提供のテキストにしておくと、
// あとでGlobal化するとき困らないw
menuItem.Text = Properties.Resources.M0001;
//イベントハンドラ登録
menuItem.Click += new EventHandler(Close_Click);
menu.Items.Add(menuItem);
}
private void setNotifyIcon()
{
//VBerなら当たり前のことをC#でもさせてみるw
//まさか、自分でクラスインスタンスとらないと
//My.Computer使えないとかびっくりしたよ
if (myComputer.Keyboard.NumLock)
{
icon.Icon = Properties.Resources.On;
icon.Text = "NumLock ON";
}
else
{
icon.Icon = Properties.Resources.Off;
icon.Text = "NumLock OFF";
}
icon.ContextMenuStrip = menu;
icon.Visible = true;
}
}
/// <summary>
/// NumLockすぐにわかるよインジケータ
/// </summary>
internal class MainWindow
{
private static void Main()
{
MainForm rm = new MainForm();
Application.Run();
}
}
実行結果がこちら

あとはスタートアップに突っ込んでしばらく使っていろいろとチューニングしてくw




