]]>
[.NET] 他のコントロールに押下キーの情報を渡す
アクティブでないウィンドウやコントロールに対してキーボードのキーを押したかのように情報を送るには、対象コントロールなどにフォーカスを当てて「SendKeys.Send」メソッド(または SendKeys.SendWait メソッド)を使うことによって送ることができます。
例えば、以下の例ではフォームがアクティブになっている状態でキーを押したときにテキストボックスに押したキー情報を送ってテキストを入力することができます。
private void form1_KeyPress(object sender, KeyPressEventArgs e) { // アクティブなコントロールにキーを送るためフォーカスを当てる textBox1.Focus(); SendKeys.SendWait(e.KeyChar.ToString()); }
フォームでキーが押されたときに Focus メソッドでテキストボックスにフォーカスを当て、SendKeys で押されたキーを送っています。送ったあとフォーカスを戻すのがベストだとは思いますが、必要に応じて入れてください。
基本的なコードはこれで OK なのですが、SendKeys では一部のコードが特殊な用途に使用されるキーであるため、このままでは送ることができません。対象キー、用途については以下の MSDN の SendKeys を参照してください。
特殊キーを通常の入力キーとして送るには中括弧({})で囲む必要があります。これを踏まえるとコードは以下のようになります。
private void form1_KeyPress(object sender, KeyPressEventArgs e) { // アクティブなコントロールにキーを送るためフォーカスを当てる textBox1.Focus(); switch (e.KeyChar) { case '^': case '+': case '%': case '~': case '(': case ')': case '{': case '}': case '[': case ']': // 特殊記号は中かっこで囲って送る SendKeys.SendWait("{" + e.KeyChar + "}"); break; default: SendKeys.SendWait(e.KeyChar.ToString()); break; } }
これで一見完成のように見えるのですが、実は動かしてみると「^(カレット)」キーを押したときになぜか「&(アンパサンド)」で送られてしまいます。.NET Framework のバグかはわかりませんが、これでは完全とは言えないため別案を使います。
WSH (Windows Script Host) にも同様に SendKeys の仕組みがあり、こちらは正常にカレットが送るのでこれを使います。WSH を使うには以下の手順を行う必要がります。
- 参照設定の追加で、COM タブから「Windows Script Host Object Model」を追加する。
- 参照設定に追加された「IWshRuntimeLibrary」のプロパティを開き、「相互運用機能型の埋め込み」を False に設定する。
そのうえで以下のようにコードを修正します。#if の条件を入れていますが、WSH を使うか使わないかで分けているだけなので不要であれば消してください。
private void form1_KeyPress(object sender, KeyPressEventArgs e) { // アクティブなコントロールにキーを送るためフォーカスを当てる textBox1.Focus(); switch (e.KeyChar) { case '^': #if true // Interop.IWshRuntimeLibrary を使ってよい場合 (new IWshRuntimeLibrary.WshShellClass()).SendKeys("{^}"); break; #endif case '+': case '%': case '~': case '(': case ')': case '{': case '}': case '[': case ']': // 特殊記号は中かっこで囲って送る SendKeys.SendWait("{" + e.KeyChar + "}"); break; default: SendKeys.SendWait(e.KeyChar.ToString()); break; } }
[C#]Visual Studioにおけるステートメントのコードスニペット
実はいままで知らなかったんですが if 文や for 文を入力する際にコードスニペットを使って定型文を入力できたんですね。今までちまちま鍵かっこと書いていました。^^;
コードスニペットは Tab キーを押して入力できます。まず、if 文を例として、if 文を入力したい箇所にカーソルを置きます。
続いて「if」と入力します。インテリセンスが表示されるので途中で Tab キーを押して確定しても構いません。
下のように「if」の後ろにカーソルがある状態で Tab キーを押します。
下図のように必要なかっこが自動的に作られます。あとはオレンジ色になっている個所を修正していきます。
else 文が必要な場合は同様に else と入力した後に Tab キーを押せば鍵かっこが追加されます。これ以外の for や while, switch などにも使えるので試してみてください。
試していませんが、VB.NET とかもできるのではないかと思います。
]]>Windows Server バックアップのスケジュールを任意に設定する
Windows Server バックアップでバックアップスケジュールを作成する際、下図のように最大で取れるバックアップ間隔は最大1日までとなっています。頻繁にバックアップを取りたくない場合は1週間単位や1か月単位で指定したいところですが、残念ながらここではそういった設定はできません。
ここのバックアップ スケジュールは設定を行うと実はタスク スケジューラーに設定されています。ということはそこの設定を変えれば自由にスケジュールを変更できるということです。
場所は「Microsoft」-「Windows」-「Backup」に「Microsoft-Windows-WindowsBackup」が作成されますのでこれを直接変更してください。
週1で実行する場合はこんな感じで設定します。
余談ですが、このスケジュールは Windows Server バックアップでスケジュールを設定した場合に更新されますので、スケジュールの設定を変更、例えばバックアップ対象を変えただけでもタスク スケジューラーの設定が戻りますのでその場合は再設定してあげる必要があります。
]]>