100. CPU の種類を取得
● Gestalt( gestaltNativeCPUtype ... ) を使う
CPU の種類は Gestalt( ) に gestaltNativeCPUtype を指定することで取得できます。
SAMPLE : CPUの種類を取得
SInt32 iCpuType; // CPUの種類
Gestalt( gestaltNativeCPUtype, &iCpuType ); // CPUの種類を取得
CPU の種類コードは以下のようになっています。一般に新しい CPU 程大きな値になります。
CPUの種類コード ( PowerPC G3以降のみ )
gestaltCPU750 ( PowerPC G3 ) gestaltCPUG4 ( PowerPC G4 ) gestaltCPUG47450 ( PowerPC G4 7450 ) gestaltCPU970 ( PowerPC G5 )
検索用キーワード:CPU の種別、PowerPC の種類
101. CPU のクロックを取得
● Gestalt( gestaltProcClkSpeedMHz ... ) を使う
CPU のクロックを取得するには、Gestalt( ) に gestaltProcSpeedMHz を指定することで取得できます。
単位は MHz です。
SAMPLE : CPUのクロックを取得
unsigned long clock;
Gestalt( gestaltProcClkSpeedMHz, &clock );
102. CPU が Velocity Engine を搭載しているかを取得する
● Gestalt( gestaltPowerPCProcessorFeatures ... ) を使う
CPU が Velocity Engine を 搭 載 し て い る か を 取 得 す る に は 、 Gestalt( ) に gestaltPowerPCHasVectorInstructions を指定することで取得できます。
SAMPLE : CPUがVelocity Engineを搭載しているかを取得
BOOL bHasVE = NO;
unsigned long lCpu;
Gestalt( gestaltPowerPCProcessorFeatures, &lCpu );
bHasVE = 0 < ( lCpu & ( 1 << gestaltPowerPCHasVectorInstructions ) );
- 121 -103. バッテリの状態を取得する
● IOPSCopyPowerSourceInfo( ) を使う
バッテリの情報を取得するには、IOPSCopyPowerSourcesInfo( ) を使います。これで、全バッテリの情報 を含んだ辞書を取得できます。バッテリ名をキーにしてバッテリ情報を取得できます。バッテリ情報自身も辞 書になっています。
(SAMPLE) 全バッテリの情報を取得するメソッド : NSWorkspaceをカテゴリで拡張
@implementation NSWorkspace (CEWorkspacePower) : 略
- (NSDictionary *) allBatteriesInfo {
NSDictionary* batInfoList = (NSDictionary*) IOPSCopyPowerSourcesInfo();
[ batInfoList autorelease ];
return( batInfoList );
}
(SAMPLE) 全バッテリの情報を取得する
NSDictionary* dicBat = [ [ NSWorkspace sharedWorkspace ] allBatteriesInfo ];
バッテリ情報の中身は以下のようになっています。
バッテリ情報の中身 CFDictionary
"Name" バッテリの名前 ( NSString )
"Time to Empty" バッテリの残り時間 ( 分, NSNumber, int ) AC接続時 → 0
計算中 → -1 ( バッテリ駆動になった直後 )
"Max Capacity" フル充電のときの値 ( NSNumber, int )
"Current Capacity" Max Capacityに対する現在の充電量 ( NSNumber, int )
"Time to Full Charge" フル充電までの時間 (分) ( NSNumber ) バッテリ駆動中の時 → -1
充電が完了している時 → -1
"Power Source State" 電源の状態 ( NSString ) AC接続時 → "AC Power"
バッテリ駆動中 → "Battery Power"
"Is Present" バッテリが刺さっているか ( NSNumber, BOOL )
"Is Charging" 充電中か ( NSNumber, BOOL ) 充電中 → YES 充電完了 → NO バッテリ駆動中 → NO
検索用キーワード:バッテリ残量、バッテリ充電、バッテリ駆動、AC 電源、フル充電までの時間
バッテリ関係の API を使うには、以下のヘッダをインクルードしておく必要があります。
(SAMPLE) バッテリ関係のヘッダインクルード
#include "IOKit/ps/IOPowerSources.h"
- 123 -104. AC が接続されているか取得する
● IOPSCopyPowerSourceInfo ( ) > Power Source State を使う
AC が接続中かを取得するには、IOPSCopyPowerSourcesInfo( ) を使います。これで得られる全バッテリ の情報から、1 つのバッテリの情報を取得して、その中の " Power Source State " の値を取り出します。 "
Battery Power " が返ってきたら AC 接続中です。
(SAMPLE) AC接続中かを取得するメソッド : NSWorkspaceをカテゴリで拡張
@implementation NSWorkspace (CEWorkspacePower) : 略
- (BOOL) isAcConnected { // >>:AC接続中(=YES)、バッテリ駆動中(=NO)
NSDictionary* batList = [ self allBatteriesInfo ]; // 全バッテリの辞書を取得 if ( [ batList count ] < 1 ) return( YES ); // バッテリがなければAC駆動
// インデックス0のバッテリ情報を取得
NSString* batName = [ [ batList allKeys ] objectAtIndex : 0 ]; // バッテリ名取得 NSDictionary* batInfo = [ batList objectForKey : batName ]; // 情報取得
// "Power Source State"を調べる BOOL bAcIsConnected = YES;
if ( [ [ batInfo objectForKey : @"Power Source State" ]
isEqualToString : @"Battery Power" ] ) // バッテリ駆動中 bAcIsConnected = NO;
return( bAcIsConnected );
}
(SAMPLE) AC接続中かを取得する
BOOL bIsAcConnected = [ [ NSWorkspace sharedWorkspace ] isAcConnected ];
105. バッテリの残り時間を取得する
● IOPSCopyPowerSourceInfo ( ) > Time to Empty を使う
バッテリの残り時間を取得するには、IOPSCopyPowerSourcesInfo( ) を使います。これで得られる全バッ テリの情報から、各バッテリの情報を取得して、その中の " Time to Empty " の値を取り出します。 これで残 り時間が分で取得できるので、全てのバッテリの中で最長のものがパッテリの残り時間になります。-1 が返っ てきたときは残り時間計算中です。
(SAMPLE) バッテリの残り時間を取得するメソッド : NSWorkspaceをカテゴリで拡張
@implementation NSWorkspace (CEWorkspacePower) : 略
- (int) batteryTimeToEmpty {
if ( [ self isAcConnected ] ) return( -100 ); // AC接続中
int iTime = -1; // バッテリの残り時間
NSDictionary* batList = [ self allBatteriesInfo ]; // 全バッテリの辞書を取得 NSEnumerator* enumBat = [ [ batList allKeys ] objectEnumerator ];
NSString* nameBat; // 各バッテリ名
while( nameBat = [ enumBat nextObject ] ) { // 全バッテリの最長時間を求める NSDictionary* batInfo = [ batList objectForKey : nameBat ]; // バッテリ情報 int iTime1 = [ [ batInfo objectForKey : @"Time to Empty" ] intValue ];
if ( iTime < iTime1 ) iTime = iTime1; // 最大値を取得 }
if ( iTime == -1 ) iTime = -200; // -1のままのだったら計算中 return( iTime );
}
(SAMPLE) バッテリの残り時間を取得する ( 単位 : 分 )
int iTimeToEmpty = [ [ NSWorkspace sharedWorkspace ] batteryTimeToEmpty ];
- 125 -106. バッテリが充電中かを取得する
● IOPSCopyPowerSourceInfo ( ) > Is Charging を使う
バッテリが充電中かを取得するには、IOPSCopyPowerSourcesInfo( ) を使います。これで得られる全バッ テリの情報から、各バッテリの情報を取得して、その中の " Is Charging " の値を取り出します。全てのバッテ リを調べて 1 つでも充電中なら充電中とします。
(SAMPLE) バッテリが充電中かを取得するメソッド : NSWorkspaceをカテゴリで拡張
@implementation NSWorkspace (CEWorkspacePower) : 略
- (BOOL) isBatteryCharging {
NSDictionary* batList = [ self allBatteriesInfo ]; // 全バッテリの辞書を取得 if ( [ batList count ] < 1 ) return( NO ); // バッテリがない時
NSEnumerator* enumBat = [ [ batList allKeys ] objectEnumerator ];
NSString* nameBat; // 各バッテリ名
while( nameBat = [ enumBat nextObject ] ) { // 全バッテリチェック NSDictionary* batInfo = [ batList objectForKey : nameBat ];
BOOL bCharging = [ [ batInfo objectForKey : @"Is Charging" ] boolValue ];
if ( bCharging ) return( YES ); // チャージ中のものが1つでもあればチャージ中 }
return( NO );
}
(SAMPLE) バッテリが充電中かを取得する
BOOL bIsCharging = [ [ NSWorkspace sharedWorkspace ] isBatteryCharging ];
107. バッテリの充電完了までの時間を取得する
● IOPSCopyPowerSourceInfo ( ) > Time to Full Charge を使う
バッテリが充電中かを取得するには、IOPSCopyPowerSourcesInfo( ) を使います。これで得られる全バッ テリの情報から、各バッテリの情報を取得して、その中の " Time to Full Charge " の値を取り出します。全て のバッテリを調べて、最も長いものを充電完了までの時間とします。
(SAMPLE) バッテリの充電完了までの時間を取得するメソッド : NSWorkspaceをカテゴリで拡張
@implementation NSWorkspace (CEWorkspacePower) : 略
- (int) batteryTimeToFullCharge {
NSDictionary* batList = [ self allBatteriesInfo ]; // 全バッテリの辞書を取得 if ( [ batList count ] < 1 ) return( -300 ); // バッテリがない
int iTime = -100; // バッテリの充電完了時間
NSEnumerator* enumBat = [ [ batList allKeys ] objectEnumerator ];
NSString* nameBat; // 各バッテリ名
while( nameBat = [ enumBat nextObject ] ) { // 全バッテリチェック NSDictionary* batInfo = [ batList objectForKey : nameBat ];
BOOL bCharge = [ [ batInfo objectForKey : @"Is Charging" ] boolValue ];
if ( bCharge == YES ) { // 充電中なら値を更新
int iTime1 = [ [ batInfo objectForKey : @"Time to Full Charge" ] intValue ];
if ( iTime < iTime1 ) iTime = iTime1; // 最大値を取得 }
}
if ( iTime == -100 ) return( -100 ); // 変化なしなら全て充電完了済み if ( iTime == -1 ) return( -200 ); // -1になっていたら計算中 return( iTime );
}
- 127 -108. 省電力機能によるスリープを禁止する
● UpdateSystemActivity( OverallAct ) を使う
Mac OS X 10.0.0〜
動画再生ソフトなどで動画再生中にユーザが操作をしないような状況などで、OS の省電力機能によって自動 スリープをさせたくない場合には、30 秒間隔で、UpdateSystemActivity( OverallAct ) を繰り返し呼びます。
(SAMPLE) 省電力機能によるスリープを禁止する
UpdateSystemActivity( OverallAct ); // 30秒間隔で呼ぶ
検索用キーワード:スリープ禁止、スリープを妨げる