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 する、意外に面倒な処理になっちまったなぁ。
後は多重起動防止させて、えっとそれから…
あぁアイコンを作る時間も無かった、つか十二時過ぎた、とりあえずバックアップ。
今日は日経平均株価は上がってくれるだろうか…
木金で今月の稼ぎが吹っ飛んでもーたんだが…