C# (4) - 変換.tokyo | henkan.tokyo

指定アプリの起動

using System.Diagnostics ; // for Process

// アプリを起動する

Process.Start("C:\\Program Files\\Hidemaru\\hidemaru.exe") ;
--------------------------------------------------------------------------------
// コマンドライン引数を付けて、アプリを起動する

Process.Start("C:\\Program Files\\Hidemaru\\hidemaru.exe", "memo.txt") ;
--------------------------------------------------------------------------------
// ウィンドウを最小化して、コマンドライン引数を付けて、
// 作業フォルダ(WorkingDirectory)は アプリのあるパスに設定し、
// アプリを起動する


Process process = new Process() ;

process.StartInfo.FileName = "C:\\Program Files\\Hidemaru\\hidemaru.exe" ;
process.StartInfo.Arguments = "memo.txt" ;
process.StartInfo.WindowStyle = ProcessWindowStyle.Minimized ;
process.StartInfo.WorkingDirectory = "C:\\Program Files\\Hidemaru" ;
process.Start() ;

// Note: 作業フォルダ(WorkingDirectory)の設定を省略してしまうと、そのアプリを起動
// した側の作業フォルダが使われて(継承されて)しまうので、注意

アプリの多重起動を防ぐ

// 同じ実行ファイル名のプロセスは起動しない
// 注) パス違いでも「同名」実行ファイルは起動しない!


using System.Diagnostics ; // for Process

if (Process.GetProcessesByName(
Process.GetCurrentProcess().ProcessName).Length > 1)
{
MessageBox.Show("すでに起動しています!");
Application.Exit() ;
}
--------------------------------------------------------------------------------
// 同じ Mutex 名を持つプロセスは起動しない(その1)
// 注) パス違いでも「同一」実行ファイルは起動しない!


using System.Threading ; // for Mutex

private static Mutex mutex ;

mutex = new Mutex(false, 固有アプリ名) ; // Mutex 生成 ; false = 所有権なし
if (!mutex.WaitOne(0, false)) // Mutex 取得 ; false = 再取得なし
{
MessageBox.Show("すでに起動しています!") ;
Application.Exit() ;
}

// Note: Mutex は、共有リソースへの排他アクセス権を1つのスレッドにだけ与える
// 同期プリミティブである。

--------------------------------------------------------------------------------
// 同じ Mutex 名を持つプロセスは起動しない(その2)
// 注) パス違いなら「同一」実行ファイルでも起動する!


using System.Threading ; // for Mutex

private static Mutex mutex ;

string mutex_name =
"[C#] " + Environment.GetCommandLineArgs()[0] ; // path付 exe名
mutex = new Mutex(false, mutex_name.Replace("\\", "/")) ; // Mutex 生成
if (!mutex.WaitOne(0, false)) // Mutex 取得
{
MessageBox.Show(
"すでに起動しています!\n\n" + mutex_name.Substring(5) + " ",
this.Text,
MessageBoxButtons.OK,
MessageBoxIcon.Stop) ;
Application.Exit() ;
}

// Note: Mutex 名に '\' を含めてはダメ(例外が発生する)。

指定したアプリが実行中か確認

// 指定したアプリが実行中か「実行ファイル名で」確認する

using System.Diagnostics ; // for Process

string exe_name = "HPS" ; // 実行ファイル名 注:拡張子を含めない

if (Process.GetProcessesByName(exe_name).Length >= 1)
{
/* "HPS.exe" が実行中の場合の処理 */
}

// Note: GetProcessesByName() は、初回に限り 実行環境によっては、処理時間が非常に
// かかることがある(3秒 以上)。

複数のキーボードを別処理するには

あるPCに複数のキーボードがつないである状態で、どのキーボードでキーを押したのかを判別する方法

RawInput API
サンプル
http://www.codeproject.com/KB/system/rawinput.aspx

C#をVB.NETに翻訳

C#コードを書けば、VB.NETに変換してくれます。

http://authors.aspalliance.com/aldotnet/examples/translate.aspx