HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2022
0803
あいそとーぷシャットダウン時にエラーが出てしまう2解決


あいそとーぷ

リンク

2022/8/3(Wed) 23:49:20|NO.96900

充電が減っているのを感知するアプリを作っているのですがシャットダウン時に

0x000000000040687B の命令が 0x0000000000000342 のメモリを参照しました。 メモリがreadになることはできませんでした。 (後略)
と出てシャットダウンが止まってしまいます。
onerrorをつけているのになぜエラーが出てしまうのでしょうか?
またどうすれば出なくなりますか?

コードはこちらです。
(ACLineStatusを使ってないのはわざとです)

#include "kernel32.as" #include "shell32.as" #include "user32.as" title "zyu-den" RegisterWindowMessage "TaskbarCreated" onexit *error onerror *error oncmd gosub *OnTaskbarCreated, stat // "TaskbarCreated" oncmd gosub *OnDestroy, 0x0002 // WM_DESTROY oncmd gosub *OnTrayIcon, 0x0401 // WM_TRAYICON gosub *AddTaskbarIcon title "zyu-den" bgscr 0,450,80,2,ginfo(20)/2-225,ginfo(21)/2-25 pos 0,0 font "",50 mes "充電されていません" objsize 450,30 pos 0,50 button "OK",*btn dim SYSTEM_POWER_STATUS, 3 *btn gsel 0,-1 flug = 0 *looping GetSystemPowerStatus varptr(SYSTEM_POWER_STATUS) if peek(SYSTEM_POWER_STATUS.0,2) < log :flug = 1 if flug= 1 :gsel 0,2 log = peek(SYSTEM_POWER_STATUS.0,2) await 10 goto *looping *AddTaskbarIcon // 自身のアイコン取得 sdim FileName, 260 GetModuleFileName hModule, varptr(FileName), 260 ExtractIconEx varptr(FileName), 0, 0, varptr(hIconSmall), 1 hIcon = hIconSmall(0) // 自身のウィンドウタイトル取得 GetWindowTextLength hwnd sdim WindowTitle, stat + 1 GetWindowText hwnd, varptr(WindowTitle), stat + 1 // NOTIFYICONDATA 構造体 dim IconData,22 IconData(0) = 88 IconData(1) = hwnd IconData(2) = 1 IconData(3) = 0x0007 // NIF_MESSAGE | NIF_ICON | NIF_TIP IconData(4) = 0x0401 // WM_TRAYICON IconData(5) = hIcon poke IconData, 4 * 6, WindowTitle Shell_NotifyIcon 0x00000000, varptr(IconData) //タスクバーにアイコン表示 return *DeleteTaskbarIcon//タスクトレイのイコン削除 // NOTIFYICONDATA 構造体 dim IconData,22 IconData(0) = 88 IconData(1) = hwnd IconData(2) = 1 IconData(3) = 0x0002 // NIF_ICON Shell_NotifyIcon 0x00000002, varptr(IconData) return *OnTaskbarCreated// タスクトレイにアイコン表示 gosub *AddTaskbarIcon return *OnDestroy// タスクバーのアイコン削除 gosub *DeleteTaskbarIcon return *OnTrayIcon//アイコンが押されたとき if (wparam == 1) { switch (lparam) case 0x0201 ::swbreak// WM_LBUTTONDOWN case 0x0203 :goto *exit:swbreak// WM_LBUTTONDBLCLK case 0x0204 :dialog "残り"+log+"%":swbreak// WM_RBUTTONDOWN swend} return *error end *exit gosub *OnDestroy end



この記事に返信する


沢渡

リンク

2022/8/4(Thu) 11:58:44|NO.96902

以下のように
・onexitとonerrorの飛び先を*errorではなく*exitにする。
・*exitでは最初にoncmd 0とし、oncmdでの割り込みが起きないようにする。
・終了前にDestroyIconでアイコンハンドルを破棄する。
と修正したら、当方ではエラーは起きなくなりました。
(推測ですが、どうもプログラムが終了処理が済んだ後になってWM_DESTROYの割り込みが発生し、
 それで動作がおかしくなっていた様子?)

#include "kernel32.as" #include "shell32.as" #include "user32.as" title "zyu-den" RegisterWindowMessage "TaskbarCreated" onexit *exit onerror *exit oncmd gosub *OnTaskbarCreated, stat // "TaskbarCreated" oncmd gosub *OnDestroy, 0x0002 // WM_DESTROY oncmd gosub *OnTrayIcon, 0x0401 // WM_TRAYICON gosub *AddTaskbarIcon title "zyu-den" bgscr 0,450,80,2,ginfo(20)/2-225,ginfo(21)/2-25 pos 0,0 font "",50 mes "充電されていません" objsize 450,30 pos 0,50 button "OK",*btn dim SYSTEM_POWER_STATUS, 3 *btn gsel 0,-1 flug = 0 *looping GetSystemPowerStatus varptr(SYSTEM_POWER_STATUS) if peek(SYSTEM_POWER_STATUS.0,2) < log :flug = 1 if flug= 1 :gsel 0,2 log = peek(SYSTEM_POWER_STATUS.0,2) await 10 goto *looping *AddTaskbarIcon // 自身のアイコン取得 sdim FileName, 260 GetModuleFileName hModule, varptr(FileName), 260 ExtractIconEx varptr(FileName), 0, 0, varptr(hIconSmall), 1 hIcon = hIconSmall(0) // 自身のウィンドウタイトル取得 GetWindowTextLength hwnd sdim WindowTitle, stat + 1 GetWindowText hwnd, varptr(WindowTitle), stat + 1 // NOTIFYICONDATA 構造体 dim IconData,22 IconData(0) = 88 IconData(1) = hwnd IconData(2) = 1 IconData(3) = 0x0007 // NIF_MESSAGE | NIF_ICON | NIF_TIP IconData(4) = 0x0401 // WM_TRAYICON IconData(5) = hIcon poke IconData, 4 * 6, WindowTitle Shell_NotifyIcon 0x00000000, varptr(IconData) //タスクバーにアイコン表示 return *DeleteTaskbarIcon//タスクトレイのイコン削除 // NOTIFYICONDATA 構造体 dim IconData,22 IconData(0) = 88 IconData(1) = hwnd IconData(2) = 1 IconData(3) = 0x0002 // NIF_ICON Shell_NotifyIcon 0x00000002, varptr(IconData) return *OnTaskbarCreated// タスクトレイにアイコン表示 gosub *AddTaskbarIcon return *OnDestroy// タスクバーのアイコン削除 gosub *DeleteTaskbarIcon return *OnTrayIcon//アイコンが押されたとき if (wparam == 1) { switch (lparam) case 0x0201 ::swbreak// WM_LBUTTONDOWN case 0x0203 :goto *exit:swbreak// WM_LBUTTONDBLCLK case 0x0204 :dialog "残り"+log+"%":swbreak// WM_RBUTTONDOWN swend} return *error end *exit oncmd 0 gosub *OnDestroy DestroyIcon hIcon end



あいそとーぷ

リンク

2022/8/4(Thu) 15:44:46|NO.96903

エラーが出なくなりました!
解答してくれてありがとうございます!



記事削除

記事NO.パスワード
(質問が解決したスレッドは他の利用者に活用してもらうため、削除しないようお願いします)

NO.96900への返信

マスコット

好きなマスコットを選んでください。

名前

e-mail
HOME
  1. 初めて利用する方は、HSP3掲示板の使い方をお読みください。
  2. 不要部分の多い長いスクリプトの投稿は ご遠慮ください。
  3. 書き込みは自動改行されません。適度に改行を入れてください。
  4. スクリプトは小文字の<pre>〜</pre>で囲むと見やすく表示できます。

削除用パスワード

解決したら質問者本人がここをチェックしてください。

エラー発生時、再送信すると二重送信になることがあります。
回答が得られたら、お礼書き込み時に[解決]チェックしてください。
SPAM防止のためURLから始まる文章は投稿できません。
SPAM防止のため英文字のみの本文を投稿することはできません。

ONION software Copyright 1997-2021(c) All rights reserved.