GetSystemPowerStatusを使いたいのですが・・・

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
Mario2
記事: 205
登録日時: 2005年5月31日(火) 13:31
お住まい: 大阪市
連絡する:

GetSystemPowerStatusを使いたいのですが・・・

#1 投稿記事 by Mario2 »

ここのページを参考に
電源の状態を取得できるGetSystemPowerStatusと言うのを使いたいのですが、「アクセス違反」がでてしまい、上手く出来ません。

コード: 全て選択

Declare Function GetSystemPowerStatus Lib "kernel32.dll" _
(ByRef lpSystemPowerStatus As SYSTEM_POWER_STATUS) As Long

Type SYSTEM_POWER_STATUS
ACLineStatus As Byte	'ACパワーの状態を示す定数の組み合わせ
BatteryFlag As Byte 'バッテリチャージの状態を表す定数の組み合わせ
BatteryLifePercent As Byte 'バッテリの残り容量のパーセント(0~100)
	'255のとき不明
Reserved1 As Byte '常に0
BatteryLifeTime As Long 'バッテリーの残り秒数(&Hffffffffのとき不明)
BatteryFullLifeTime As Long 'フルチャージ時の残り秒数(同上)
End Type

Dim PowerStatus As *SYSTEM_POWER_STATUS
Dim pPowerStatus As SYSTEM_POWER_STATUS
IF GetSystemPowerStatus(pPowerStatus)=0 Then End
MessageBox(hMainWnd,pPowerStatus.ACLineStatus,0,0)
MessageBox(hMainWnd,pPowerStatus.BatteryFlag,0,0)
MessageBox(hMainWnd,pPowerStatus.BatteryLifePercent,0,0)
MessageBox(hMainWnd,pPowerStatus.Reserved1,0,0)
としているのですが、(多分)If GetSystem~の部分でアクセス違反が出ています。
(ソース行が多いせいなのか、別の行をエラーとして表示されていました)

自分なりにがんばってみたのですが、取得できませんでした。
どうすれば良いのか、よろしくお願いします。
tak
記事: 162
登録日時: 2005年5月31日(火) 07:49

Re: GetSystemPowerStatusを使いたいのですが・・・

#2 投稿記事 by tak »

> ここのページを参考に
> 電源の状態を取得できるGetSystemPowerStatusと言うのを使いたいのですが、「アクセス違反」がでてしまい、上手く出来ません。

> (多分)If GetSystem~の部分でアクセス違反が出ています。
> (ソース行が多いせいなのか、別の行をエラーとして表示されていました)

いえ、今回エラーが起きた箇所は If文ではないと思います。
ぱっと見ただけなので確実ではないのですが、原因はMessageBox()で値を表示するときに、第2引数において Str$() で数値を文字列化していないため、アクセス違反が起きてしまうのではないでしょうか。

こんな場合に #strict を有効活用したいものです。
Mario2
記事: 205
登録日時: 2005年5月31日(火) 13:31
お住まい: 大阪市
連絡する:

Re: GetSystemPowerStatusを使いたいのですが・・・

#3 投稿記事 by Mario2 »

> いえ、今回エラーが起きた箇所は If文ではないと思います。
> ぱっと見ただけなので確実ではないのですが、原因はMessageBox()で値を表示するときに、第2引数において Str$() で数値を文字列化していないため、アクセス違反が起きてしまうのではないでしょうか。
確かに、メッセージボックスにStr$()を追加するとアクセス違反が起きなくなりました。
ありがとうございます。
返信する