🏠 ホーム 🔧 自作ツール 🗃️ アーカイブ 📓 日常のブログ 🍜 飯のブログ 📚 勉強のブログ 🗂️ その他のブログ
👃 WWave's Code - NoseScape

てんともち / WWave Public

Application.hsp 6,267 Bytes
//ビルド設定エリア
#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