//ビルド設定エリア
#packopt version "Build.ini" //詳細
#packopt icon "app.ico" //アイコン
#packopt hide 1
#define ctype HIWORD(%1) (%1 >> 16 & $FFFF)
//===================================================================================
//ライブラリのロード
#include "hspvol.as" //音量調整用
#include "hsp3utf.as" //UTF-8化
#include "hspinet.as" //ネット通信
//定数
AppName = "WakeWave"
AppNameInternal = "WWave"
AppVer = "1.1 Stable"
AppVerInt = "1.1"
#module
#uselib "kernel32.dll"
#func CloseHandle "CloseHandle" int
#cfunc CreateMutex "CreateMutexA" int, int, sptr
#cfunc GetLastError "GetLastError"
#define ERROR_ALREADY_EXISTS 183
#define MUTEX_NAME AppNameInternal@
#defcfunc AlreadyAppRunning
if (hMutex == 0) {
hMutex = CreateMutex(0, 0, MUTEX_NAME)
if (GetLastError() == ERROR_ALREADY_EXISTS) {
alreadyRunning = 1
} else {
alreadyRunning = 0
}
}
return alreadyRunning
#deffunc CleanupAppRunChecker onexit
if (hMutex != 0) {
CloseHandle hMutex
hMutex = 0
}
return
#global
if (AlreadyAppRunning()) { dialog "すでに起動されているようです。\nタスクトレイを確認ください。" : end }
tmp=sysinfo(0)
split tmp,"ver",tmp
if 1.0*tmp(1)<6.0{
dialog "このソフトウェアはWindows Vista以前で動作できません"
}
exist "hspvol.dll"
if strsize=-1{
dialog "hspvol.dll が存在しないか、破損しています"
}
//エラーハンドリング
onerror *onerror_handle
//終了時の処理の予約
onexit gosub *exit
//システム設定のロード
#include "SettingLoader.hsp"
//////////////////////////////////////////////////////////////////
//アプリエリア
//タスクトレイ依存関係
#include "kernel32.as"
#include "shell32.as"
#include "user32.as"
//DPI対策
#uselib "kernel32" //Kernel32.dllを利用する
#uselib "user32.dll" //user32.dllを利用する
#func SetProcessDpiAwarenessContext "SetProcessDpiAwarenessContext" int //DPI関数(上位)の定義
#func SetProcessDPIAware "SetProcessDPIAware" //DPI関数(下位)の定義
//モード別DPI対応
switch Var_DPIMode
case 1 : SetProcessDpiAware : swbreak
case 2 : SetProcessDpiAwarenessContext -4 : swbreak
default : swbreak
swend
title "表示"
sdim FileName, 65535
GetModuleFileName hModule, varptr(FileName), 65535
ExtractIconEx varptr(FileName), 0, 0, varptr(hIconSmall), 1
hIcon = hIconSmall(0)
GetWindowTextLength hwnd
sdim WindowTitle, stat + 1
GetWindowText hwnd, varptr(WindowTitle), stat + 1
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) // NIM_ADD
#module
#defcfunc TrueScale int p1
return 1.0*Var_ViewScale@*p1
#deffunc SetTitle str p1
if p1=""{
title AppName@+" v"+AppVer@
}else{
title AppName@+" v"+AppVer@+" | "+p1
}
return 0
#global
//GUI設定
NowMode=0
sdim out
screen 0,TrueScale(300),TrueScale(160),8 //画面サイズを設定
width ,,ginfo(20)-TrueScale(300)-10,ginfo(21)-TrueScale(160)-100 //デスクトップの中心に表示
SetTitle ""
font "MS ゴシック",TrueScale(20):objmode 2
color 192,192,192:boxf:color 0,0,0 //色の初期化
pos TrueScale( 0),TrueScale( 0):objsize TrueScale(300),TrueScale(120):mesbox out,,,0
pos TrueScale( 0),TrueScale(120):objsize TrueScale(260),TrueScale( 40):button gosub "有効にする",*modeNext
pos TrueScale(260),TrueScale(120):objsize TrueScale( 40),TrueScale( 40):button gosub "?",*about
setVolumeStab
//全面表示設定
if Var_isForceTop {
gsel 0,2
}else{
gsel 0,1
}
c=0
f=0
NowMode=0
target=MaxVol
oncmd gosub *OnTrayIcon, 0x0401
gosub *init_internet
gosub *checkupdate
/////////////////////////////////////////////////////
*main
out ="現在音量: "+GetMasterVolumeVista()+"\n"
switch NowMode
case 1
t ="作動中"
dt="「x」でタスクトレイに収納\n(停止状態で押すと終了)"
swbreak
default
t ="停止中"
dt="xを押して終了"
swbreak
swend
Settitle t
out+="起動状態: "+t
out+="\n\n"+dt
objprm 0,out
if NowMode!=0{gosub *VolChange}
c++
await 500
goto *main
*about
tmp =""+AppName+" "+AppVer+"\n"
tmp+="(c) 2026 てんともち.\n\n"
tmp+=""+AppName+" は、眠気防止のために音量を調整するソフトウェアです。\n"
tmp+="有効化された時点の音量を中心に、±10に音量を調整することで、\n抑揚をつけて眠気を減らします。\n\n"
tmp+="このソフトウェアは、Apache 2.0 の下で利用可能です。"
dialog tmp
return
/////////////////////////////////////////////////////
#deffunc setVolumeStab
NormalVol=GetMasterVolumeVista()
MaxVol=1.0*GetMasterVolumeVista()+10
if MaxVol>1.0*100{ MaxVol=100 }
MinVol=1.0*(MaxVol-20)
if MinVol<1.0*10{ MinVol=1.0*(MaxVol/2+1) }
return 0
*modeNext
c=0
NowMode++
if NowMode=2{NowMode=0}
switch NowMode
case 0
SetMasterVolumeVista(NormalVol)
objprm 1,"有効にする"
swbreak
case 1
setVolumeStab
objprm 1,"無効にする"
swbreak
swend
return
*VolChange
switch NowMode
case 1
if c<=int(MinVol){
target=int(MinVol)
swbreak
}else:if c>int(MinVol) and c<=int(MaxVol){
target=c
}else:if c>int(MaxVol)+10{
target--
if target<int(MinVol){
target=int(MinVol)
c=0
}
}
swbreak
swend
SetMasterVolumeVista(target)
return
/////////////////////////////////////////////////////
#include "Internetmanager.hsp"
*onerror_handle
tmp ="重大な問題が発生しました。\n"+AppName+"を終了します。\n\n"
tmp+="バージョン:"+AppVer+"\n"
tmp+="エラーコード: "
tmp+="0x"+strf("%04d",wparam)
tmp+="\n\n上記のデバッグ情報と状況を報告してくださると、修正の助けになります!"
dialog tmp,1
end
*OnTrayIcon
if (wparam == 1) {
switch (lparam)
case 0x0201 // WM_LBUTTONDOWN
ShowWindow hwnd,4
swbreak
swend
}
return
*exit
if NowMode=1{
gsel 0,-1
return
}
//アイコン削除
dim IconData,22
IconData(0) = 88
IconData(1) = hwnd
IconData(2) = 1
IconData(3) = 0x0002 // NIF_ICON
Shell_NotifyIcon 0x00000002, varptr(IconData) // NIM_DELETE
gsel 0,-1
SetMasterVolumeVista(NormalVol)
end