次にメニュー。SimpleCapでやりたいのはメニューに起動中のアプリケーション一覧を出して、ユーザに選択させること。前回までのコードをベースにやってみた。NSCollectionView は確認の為だけに使ったので今回は削除してある。
こんな感じ。
いい感じだ。思ったよりも簡単にできた。
ソース:AppList-2.zip
2008年7月29日火曜日
起動中のアプリ調査 (5) メニュー表示
2008年7月28日月曜日
起動中のアプリ調査 (4) アイコン表示(サイズ)
以前紹介したように NSWorkspace#iconForFile で取得できるアイコン画像はサイズが数種類用意されている。
Finderの例。
NSImage 0x180a60 Size={32, 32} Reps=(
NSIconRefBitmapImageRep 0x182530 Size={128, 128} ColorSpace=NSCalibratedRGBColorSpace BPS=8 BPP=32 Pixels=128x128 Alpha=YES Planar=NO Format=0,
NSIconRefBitmapImageRep 0x182590 Size={256, 256} ColorSpace=NSCalibratedRGBColorSpace BPS=8 BPP=32 Pixels=256x256 Alpha=YES Planar=NO Format=0,
NSIconRefBitmapImageRep 0x1827e0 Size={512, 512} ColorSpace=NSCalibratedRGBColorSpace BPS=8 BPP=32 Pixels=512x512 Alpha=YES Planar=NO Format=0,
NSIconRefBitmapImageRep 0x182820 Size={32, 32} ColorSpace=NSCalibratedRGBColorSpace BPS=8 BPP=32 Pixels=32x32 Alpha=YES Planar=NO Format=0,
NSIconRefBitmapImageRep 0x182860 Size={16, 16} ColorSpace=NSCalibratedRGBColorSpace BPS=8 BPP=32 Pixels=16x16 Alpha=YES Planar=NO Format=0
]
前回 NSCollectionImageView で表示されていたサイズは 32x32だった。これを 16x16に変えてみる。アイコン画像生成時に単純に NSImage#setSize でサイズを指定してみた。
icon = [ws iconForFile:[app objectForKey:@"NSApplicationPath"]];
[icon setSize:NSMakeSize(16, 16)];
いい感じだ。

調子にのって 512x512

おお、奇麗に出てている。サイズに合わせて適切な元画像を使用してくれているようだ。なおサンプルでは NSImageView によって縮小されて表示されているの見た目 512x512より小さいのであしからず(ややこしいが)。
2008年7月27日日曜日
起動中のアプリ調査 (3) アイコン表示
起動中のアプリケーションのアイコンを NSCollectionView を使い一覧表示してみる。
NSCollectionView の使い方は過去のブログを参照の事。
こんな感じ。
アイコン画像を用意するコードだけ紹介するとこんな感じ。
NSImage* icon;
_icons = [[NSMutableArray alloc] init];
NSWorkspace* ws = [NSWorkspace sharedWorkspace];
for (NSDictionary* app in [ws launchedApplications]) {
icon = [ws iconForFile:[app objectForKey:@"NSApplicationPath"]];
[_icons addObject:[NSDictionary dictionaryWithObject:icon forKey:@"image"]];
}
上記で用意した _icons へ NSCollectionViewをバインドすれば簡単に表示できる(バインドのパスは長いが。。)。
ソースコード:AppList-1.zip
2008年7月26日土曜日
起動中のアプリ調査 (2) アイコン
アイコン画像は同じく NSWorkspace のメソッドで取得ができる。
NSImage* icon = [[NSWorkspace sharedWorkspace] iconForFile:@"/System/Library/CoreServices/Finder.app"];
上記を実行すると iconの内容は次のようになった。
2008-07-02 21:11:48.169 AppList[1091:10b] (
NSImage 0x1815d0 Size={32, 32} Reps=(
NSIconRefBitmapImageRep 0x181930 Size={128, 128} ColorSpace=NSCalibratedRGBColorSpace BPS=8 BPP=32 Pixels=128x128 Alpha=YES Planar=NO Format=0,
NSIconRefBitmapImageRep 0x181aa0 Size={256, 256} ColorSpace=NSCalibratedRGBColorSpace BPS=8 BPP=32 Pixels=256x256 Alpha=YES Planar=NO Format=0,
NSIconRefBitmapImageRep 0x181ae0 Size={512, 512} ColorSpace=NSCalibratedRGBColorSpace BPS=8 BPP=32 Pixels=512x512 Alpha=YES Planar=NO Format=0,
NSIconRefBitmapImageRep 0x181b20 Size={32, 32} ColorSpace=NSCalibratedRGBColorSpace BPS=8 BPP=32 Pixels=32x32 Alpha=YES Planar=NO Format=0,
NSIconRefBitmapImageRep 0x181b60 Size={16, 16} ColorSpace=NSCalibratedRGBColorSpace BPS=8 BPP=32 Pixels=16x16 Alpha=YES Planar=NO Format=0
)
)
複数の画像が用意されているのがわかる。
2008年7月25日金曜日
起動中のアプリ調査 (1)
起動中のアプリケーション情報を元にしたキャプチャを考えている。具体的な内容はこれからおいおい明らかにするとして、まずは現在実行中のアプリケーション情報はどのようなものが取れるかを検証していく。
Cocoaには NSWorkspace が用意されていて #launchedApplications メソッドで実行中のアプリケーション情報を取得することができる。
試しに簡単なコードを書いてみた。
NSWorkspace* ws = [NSWorkspace sharedWorkspace];
NSLog(@"%@", [ws launchedApplications]);
結果は次の通り。
2008-07-02 20:46:42.048 AppList[757:10b] (
{
NSApplicationBundleIdentifier = "com.apple.finder";
NSApplicationName = Finder;
NSApplicationPath = "/System/Library/CoreServices/Finder.app";
NSApplicationProcessIdentifier = 156;
NSApplicationProcessSerialNumberHigh = 0;
NSApplicationProcessSerialNumberLow = 49164;
},
{
NSApplicationBundleIdentifier = "com.apple.Safari";
NSApplicationName = Safari;
NSApplicationPath = "/Applications/Safari.app";
NSApplicationProcessIdentifier = 284;
NSApplicationProcessSerialNumberHigh = 0;
NSApplicationProcessSerialNumberLow = 102425;
},
{
NSApplicationBundleIdentifier = "com.apple.mail";
NSApplicationName = Mail;
NSApplicationPath = "/Applications/Mail.app";
NSApplicationProcessIdentifier = 285;
NSApplicationProcessSerialNumberHigh = 0;
NSApplicationProcessSerialNumberLow = 106522;
},
{
NSApplicationBundleIdentifier = "etd.happy.catsan.programming";
NSApplicationName = EasyToDo;
NSApplicationPath = "/Applications/\U30c4\U30fc\U30eb/EasyToDo.app";
NSApplicationProcessIdentifier = 292;
NSApplicationProcessSerialNumberHigh = 0;
NSApplicationProcessSerialNumberLow = 110619;
},
{
NSApplicationBundleIdentifier = "com.apple.Preview";
NSApplicationName = "\U30d7\U30ec\U30d3\U30e5\U30fc";
NSApplicationPath = "/Applications/Preview.app";
NSApplicationProcessIdentifier = 343;
NSApplicationProcessSerialNumberHigh = 0;
NSApplicationProcessSerialNumberLow = 127007;
},
{
NSApplicationBundleIdentifier = "com.apple.iTunes";
NSApplicationName = iTunes;
NSApplicationPath = "/Applications/iTunes.app";
NSApplicationProcessIdentifier = 470;
NSApplicationProcessSerialNumberHigh = 0;
NSApplicationProcessSerialNumberLow = 196656;
},
{
NSApplicationBundleIdentifier = "com.apple.Xcode";
NSApplicationName = Xcode;
NSApplicationPath = "/Developer/Applications/Xcode.app";
NSApplicationProcessIdentifier = 692;
NSApplicationProcessSerialNumberHigh = 0;
NSApplicationProcessSerialNumberLow = 381021;
},
{
NSApplicationBundleIdentifier = "com.yourcompany.AppList";
NSApplicationName = AppList;
NSApplicationPath = "/Users/hashi/development/study/AppList/build/Debug/AppList.app";
NSApplicationProcessIdentifier = 757;
NSApplicationProcessSerialNumberHigh = 0;
NSApplicationProcessSerialNumberLow = 389215;
}
)
*
バンドルIdentifier や名前、プログラムパス、プロセスIDなどが取れる。
登録:
投稿 (Atom)