SQLの窓 イラストAC フリー素材

2015年01月12日

C# バッチビルドキットで、VB の My 名前空間を使ってクリップボードを使ったり、キーボードの SHIFT キーが押されているかを知る

以下のキットを使うと、コマンドプロンプトで手軽に C# のビルドができます。(%windir%\Microsoft.NET\Framework\v4.0.30319 に環境があります)



処理自体の元々は VB.net ですが、単純な実行部分は Code Translation for .NET (C#<->VB.NET) で変換して、後は適当にエラー処理するだけでした。

参考ドキュメント

方法 : My 名前空間を使用する (C# プログラミング ガイド) 

これを利用するには、Microsoft.VisualBasic.dll の参照が必要ですが、『PATH=C:\Windows\Microsoft.NET\Framework\v4.0.30319;』というパスと、コマンドラインとしては『csc.exe /r:Microsoft.VisualBasic.dll cf.cs』で可能です。(64ビット環境では、Framework64というフォルダがあると思います)

※後、注意事項としてクリップボードのアクセス時には [STAThread] が必要です。
( このクラスを使用するには、Main メソッドが STAThreadAttribute 属性でマークされている必要があります。 )
using System;
using Microsoft.VisualBasic.Devices;
using System.Collections.Specialized;

class MyModule {

	[STAThread]
	static void Main() {
		string[] argv;
		argv = System.Environment.GetCommandLineArgs();
		string ActType;
		if ((argv.Length == 1)) {
			ActType = "name";
		}
		else {
			ActType = argv[1];
		}

		// VB.net で言うところの、My.Computer
		// http://msdn.microsoft.com/ja-jp/library/ms173136.aspx
		Computer myComputer = new Computer();

		// SHIFT キーを押しているがどうか
		if (myComputer.Keyboard.ShiftKeyDown) {
			if ((ActType == "name")) {
				// フルパスで表示
				ActType = "path";
			}
			else {
				// ファイル名だけで表示
				ActType = "name";
			}
		}

		StringCollection FileList;
		string delimStr = "\\";
		char[] delimiter = delimStr.ToCharArray();
		string[] aData;

		// エクスプローラから取得したファイル
		// 一覧形式のデータがあった場合
		if (myComputer.Clipboard.ContainsFileDropList()) {
			FileList = myComputer.Clipboard.GetFileDropList();
			foreach (string FilePath in FileList) {
				if ((ActType == "path")) {
					Console.WriteLine(FilePath);
				}
				else {
					aData = FilePath.Split(delimiter);
					Console.WriteLine(aData[(aData.Length - 1)]);
				}
			}
		}

		// 通常のテキストデータがあった場合
		if (myComputer.Clipboard.ContainsText()) {
			Console.WriteLine(myComputer.Clipboard.GetText());
		}


	}
}


関連する記事


▼ 元となった VB.net のコード
Imports System.Collections.Specialized

Module MyModule

' ********************************************
' クリップボードにあるファイル情報を標準出力へ
' ( エクスプローラの「コピー」で取得した内容 )
' 引数による処理タイプの決定
' name : ファイル名のみ
' path : フルパス
' ********************************************
Sub Main()

	' 文字列の配列
	Dim argv As String()

	' コマンドラインの取得
	argv = System.Environment.GetCommandLineArgs()
	Dim ActType As String

	' 引数が無い場合は、名前のみ
	If argv.Length = 1 Then
		ActType = "name"
	Else
		' name または path
		ActType = argv(1)
	End If

	' SHIFT キーを感知できた場合は処理を反転する
	' 要するに引数無しで SHIFT キーを押していたらフルパス
	If My.Computer.Keyboard.ShiftKeyDown Then
		If ActType = "name" Then
			ActType = "path"
		else
			ActType = "name"
		End If
	End If

	Dim FileList As StringCollection
	Dim FilePath As String
	Dim ClipString As String = ""

	' フルパスから名前だけを取り出す為のデリミタ
	Dim delimStr As String = "\"
	Dim delimiter As Char() = delimStr.ToCharArray()

	Dim aData As String()

	' クリップボードにファイルのデータがあった場合
	If My.Computer.Clipboard.ContainsFileDropList() Then
		'データを取得する
		FileList = My.Computer.Clipboard.GetFileDropList()
		'取得したファイル名を列挙する
		For Each FilePath In FileList
			If ActType = "path" Then
				Console.WriteLine( FilePath )
			Else
				aData = FilePath.Split(delimiter)
				Console.WriteLine( aData(aData.Length - 1) )
			End If
		Next
	End If


End Sub

End Module



タグ:C#
【C#の最新記事】
posted by at 2015-01-12 00:29 | Comment(0) | C# | このブログの読者になる | 更新情報をチェックする
SQLの窓全体の検索
Custom Search
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

※ブログオーナーが承認したコメントのみ表示されます。


Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX