Clipoli で読み込む ini ファイルはどこに置くか。
exe と同じ位置では昔の古い考え方バリバリなアプリになってしまう。
やはり環境変数 %APPDATA% に置くべきだろう。
echo %APPDATA%
と cmd.exe で打てばそれが何なのか解らない人も理解できるだろう。
Opera や Firefox の設定もココにありますね。
ということで書いてみる。
C# では Environment を使わないと環境変数展開は無理みたい、まぁ ini 側はイケるだろう。
SeeMe の設定で sasakima というディレクトリを作るので同じ所に置くように。
string appdata = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "sasakima");
if (!Directory.Exists(appdata))
{
Directory.CreateDirectory(appdata);
}
appdata = Path.Combine(appdata, "clipoli");
if (!Directory.Exists(appdata))
{
Directory.CreateDirectory(appdata);
}
appdata = Path.Combine(appdata, "default.ini");
if (!File.Exists(appdata))
{
string s = "[Launcher]\r\ndefault.ini を開く=notepad %APPDATA%\\sasakima\\clipoli\\default.in";
var sw = new StreamWriter(appdata);
sw.Write(s);
sw.Close();
}
var app = new TrayIcon(appdata);
Application.Run();
んでコンストラクタ引数に default.ini 位置を渡してコレを読み込むと。
こんな感じでいいかな、やってみる。
Process.Start じゃ環境変数の %APPDATA% を展開してくれない…
引数を半角スペースではなく別オーバーロード引数で渡さないと駄目みたい…
Linux に慣れすぎたのでコマンドラインと GUI の区別が付かなくなってしまった。
だって Linux はどちらも同じだもん、Windows では別物なんだよね。
えっと、%APPDATA% は自前で展開するしかないみたいなので Format するか。
コマンドを引数と分離するには、とりあえずファイル名に使えない | でも利用してみよう。

string appdata = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData), "sasakima");
if (!Directory.Exists(appdata))
{
Directory.CreateDirectory(appdata);
}
appdata = Path.Combine(appdata, "clipoli");
if (!Directory.Exists(appdata))
{
Directory.CreateDirectory(appdata);
}
appdata = Path.Combine(appdata, "default.ini");
if (!File.Exists(appdata))
{
string s = "[Launcher]\r\ndefault.ini を開く=notepad|{0}";
s = string.Format(s, appdata);
var sw = new StreamWriter(appdata);
sw.Write(s);
sw.Close();
}
var app = new TrayIcon(appdata);
Application.Run();
これで
private void on_launcher(object sender, EventArgs e)
{
try
{
string s = (sender as ToolStripMenuItem).Name;// MessageBox.Show(s);
int lPos = s.IndexOf('|');
if (lPos == -1)
{
System.Diagnostics.Process.Start(s);
}
else
{
string name = s.Substring(0, lPos);
string args = s.Substring(lPos + 1, s.Length - lPos - 1);
System.Diagnostics.Process.Start(name, args);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
と分離して Process.Start する、意外に面倒な処理になっちまったなぁ。
後は多重起動防止させて、えっとそれから…
あぁアイコンを作る時間も無かった、つか十二時過ぎた、とりあえずバックアップ。
clipoli002.zip
今日は日経平均株価は上がってくれるだろうか…
木金で今月の稼ぎが吹っ飛んでもーたんだが…