えー、フツーでしょ、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