2009/12/22

MacBookProそろそろ

このエントリーをはてなブックマークに追加
うわさがきてますね。
ちまちましたアップグレードと値段の変動はあるものの、気づいてみれば、C2DとGeForce9400の構成は息が長いです。
そろそろごろっと来るのかな。来てほしい、是非。

それはそうとBootCampのWindows7サポートまだかなー。
公式ページにある「年末までに」という表現が、じつにわかりにくいわけで、「年内に」や「年を越すまでに」とはニュアンスが違ってますね。翻訳の問題? もう年末と言ってもいいのになあ。
人柱さんたちの声を聞く限りでは、動作は問題なさそうなようですが、正式サポートするってアナウンスを信じて、じっと大人しくしているのでした。

参考URL
公式「Boot Camp および Windows 7 に関して」http://support.apple.com/kb/HT3920?viewlocale=ja_JP
アップル、間もなく「MacBook Pro」最新モデルを発表! Intel Core i5&i7を搭載か...
MacBook Proに載る? Mobile Core i5/i7が来年1月3日に出荷開始?


追記 20100114
実はこっそりアップデートされていたのかと思っていたけれど、そうではなかったのですね。
アップル「Boot Camp」、2009年中の「Windows 7」正式サポートは実現せず

追記 20100120
アップル、Boot Camp上のWindows7に正式対応へ

2009/12/19

C#ファイルサイズをエクスプローラ調に表示させるAPI

このエントリーをはてなブックマークに追加
見切り発車に自作しなくてよかった…。
ファイルサイズをきれいに整形してくれるAPI関数です。


// using System.IO;
// using System.Runtime.InteropServices;

[DllImport("shlwapi.dll", CharSet = CharSet.Auto)]
public static extern long StrFormatByteSize(long fileSize, [MarshalAs(UnmanagedType.LPTStr)] StringBuilder buffer, int bufferSize);

private string GetFileSizeString(long fileSize) {
StringBuilder builder= new StringBuilder(32);
StrFormatByteSize(fileSize, builder, 32);
return builder.ToString();
}

private void button1_Click(object sender, EventArgs e) {
string path= Application.StartupPath;
DirectoryInfo dir = new DirectoryInfo(path);
foreach (FileInfo file in dir.GetFiles()) {
string fileSize = GetFileSizeString(file.Length);
Console.WriteLine(file.Name + "=" + fileSize);
}
}

上記は、実行ファイルのディレクトリにあるファイルのサイズを調べるコード。
実行すると↓のようになります。

WindowsApplication1.exe=20.0 KB
WindowsApplication1.pdb=19.5 KB
WindowsApplication1.vshost.exe=5.50 KB

TB、GB、MB、KBで整形した文字列を返してくれるのでめちゃ便利。

2009/12/15

C# IllustratorCS 選択中のオブジェクトを取得する

このエントリーをはてなブックマークに追加
今日日IllustratorCSで自動化しようとする人は希少でしょうが備忘録です。
IllustratorCSをC#から使っていて、選択中のオブジェクトを取得するだけのコードを書こうとして、はまった。

選択中のオブジェクトを取得するために、ActiveDocumentのSelectionプロパティから拾ってきます。
Selectionで取得できるのがobjectの配列になっていて、GetTypeで型を見るとSystem.__ComObjectが返ってくるのです。System.__ComObjectはprivateなクラスらしいので、キャストすることもできません。

Comオブジェクトの型が特定できればよいので、Microsoft.VisualBasic.Information.TypeNameを使うことで解決できました。Microsoft.VisualBasicを参照に追加すれば使うことができます。


// Microsoft.VisualBasicを参照に追加しておく

// _docはActiveDocument
object[] items = (object[])_doc.Selection;
if(items != null){ // 空のときはnull
foreach (object item in items) {
Console.WriteLine(Microsoft.VisualBasic.Information.TypeName(item));
}
}
// ------------console-----------
// PathItem

JavaScriptでIllustratorを操作するときは、PathItemというクラスがあるらしく、PathItemのtypenameプロパティを見て、テキストオブジェクトだったりパスオブジェクトだったりを判別できるようです。PathItemsはあるけれど、なぜPathItemクラスがないのか解りません。ちなみにPathItemsもobjectを返しますが、本題と同じやり方でクラスを判別できます。