定刻にアラートを出す常駐アプリ

//タスクバーに常駐するアプリです.

//;2回分のアラート時刻を設定 と書いてあるところで時刻を設定すると,

//毎日その時刻にアラートを出します.

//常駐化は http://hspnext.com/hspkura/hspkura02.htm の「タスクトレイにアイコン格納する」を利用しています.

#module

#uselib "user32.dll"

#func GetForegroundWindow "GetForegroundWindow"

#func MoveWindow "MoveWindow" int,int,int,int,int

;***** タスクトレイの操作 (tasktray.hsp) *****

;***** 必要となるAPIや定数の定義 *****

#uselib "kernel32.dll"

#func GetModuleFileName "GetModuleFileNameA" int,var,int

#uselib "shell32.DLL"

#func ExtractIconEx "ExtractIconExA" var,int,var,var,int

#func Shell_NotifyIcon "Shell_NotifyIcon" int,var

#define NIM_ADD $00000000

#define NIM_DELETE $00000002

#define NIM_MODIFY $00000001

#define NIF_ICON $00000002

#define NIF_MESSAGE $00000001

#define NIF_TIP $00000004

//////////////////////////////////////////////////////////////////////////////////////

;***** タスクトレイにアイコン格納する関数 *****

#defcfunc tasktray str prm1

; prm1 : tooltext (str) : 文字列 or 文字列型変数 (ツールチップ文字列)

tooltext = prm1 : if strlen(tooltext)==0 : tooltext=""

; 自分自身のファイル名を取得

sdim lpFileName,260

GetModuleFileName hModule,lpFileName,260

SelfName=lpFileName

icobig=0

ExtractIconEx SelfName,0,icobig,icosmall,1

hIcon=icosmall

; NOTIFYICONDATA 構造体

dim IcoData,22

IcoData(0) = 88

IcoData(1) = hwnd

IcoData(2) = 1

IcoData(3) = NIF_MESSAGE|NIF_ICON|NIF_TIP

IcoData(4) = $00001400 ;NOTIFY_TRAYICON

IcoData(5) = hIcon

poke IcoData, 24, tooltext

; タスクトレイにアイコンを追加

Shell_NotifyIcon NIM_ADD,IcoData

return hIcon

//////////////////////////////////////////////////////////////////////////////////////

;***** タスクトレイアイコンを削除 *****

#deffunc taskicoclr

; NOTIFYICONDATA 構造体

dim IcoData,22

IcoData(0) = 88

IcoData(1) = hwnd

IcoData(2) = 1

IcoData(3) = NIF_ICON

Shell_NotifyIcon NIM_DELETE,IcoData

return 0

;***** タスクトレイアイコンの変更 *****

#deffunc taskchengeico int prm1

; prm1 : nhIcon (int) : 変更するスモールアイコンハンドル

nhIcon = prm1 : if nhIcon==0 : return -1

; NOTIFYICONDATA 構造体

dim IcoData,22

IcoData(0) = 88

IcoData(1) = hwnd

IcoData(2) = 1

IcoData(3) = NIF_ICON

IcoData(5) = nhIcon

; タスクトレイアイコンを変更

Shell_NotifyIcon NIM_MODIFY,IcoData

return 0

//////////////////////////////////////////////////////////////////////////////////////

;***** タスクトレイのチップヘルプを変更 *****

#deffunc tasktooltip str prm1

; prm1 : tooltext (str) : 文字列 or 文字列型変数 (ツールチップ文字列)

tooltext = prm1 : if strlen(tooltext) ==0 : tooltext=""

; NOTIFYICONDATA 構造体

dim IcoData,22

IcoData(0) = 88

IcoData(1) = hwnd

IcoData(2) = 1

IcoData(3) = NIF_TIP

poke IcoData, 24, tooltext

; タスクトレイのチップヘルプを変更

Shell_NotifyIcon NIM_MODIFY,IcoData

return 0


#global

//////////////////////////////////////////////////////////////////////////////////////

//ここから自分で書くプログラム開始☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆☆

#include "user32.as"

#include "hspext.as"

#define WM_GETTEXT 0x000D

#define WM_LBUTTONDOWN $00000201

#define NOTIFY_TRAYICON $00001400

onexit *owari

;***** イベントハンドラ *****

oncmd gosub *OnMotificmd, NOTIFY_TRAYICON

gosub *modecmd

alertFlag = 0;

alertMax = 2;1日に2回チェックする時刻がある

;アラートを出す時刻を設定するための配列

dim alertTimesH, alertMax;hour

dim alertTimesM, alertMax;minute

dim alertTimesS, alertMax;second

;2回分のアラート時刻を設定

;8時30分00秒

alertTimesH(0) = 8

alertTimesM(0) = 30

alertTimesS(0) = 0

;18時30分00秒

alertTimesH(1) = 18

alertTimesM(1) = 30

alertTimesS(1) = 0

mes "ESCキーで常駐タスクバーに戻ります"

mes ""

repeat alertMax

mes "" + alertTimesH(cnt) + "時" + alertTimesM(cnt) + "分"

loop

mes "にアラートを出します"

//メインループ

repeat


getkey esc, 27

if esc = 1 : gosub *modecmd;a押したらタスクバーに戻す


CheckTime

await 900

loop

/////////////////////////////////

#deffunc CheckTime

;現在時刻を取得

h = gettime(4)

m = gettime(5)

s = gettime(6)


;2回分の設定時刻をチェックして,もし現在時刻と一致していればアラートを出す

repeat alertMax

if(h = alertTimesH(cnt) && m = alertTimesM(cnt) && s = alertTimesS(cnt)){

AlertDialog cnt

}

loop


return

#deffunc AlertDialog int myN

alertStr = "" + alertTimesH(myN) + "時" + alertTimesM(myN) + "分になりました\n"

alertStr += "出勤/退勤のチェックをしましょう( ゚∀゚)o彡゜"


dialog alertStr

return

;***** タスクトレイに格納(左クリックで復帰)*****

*modecmd

gsel 0,-1

gosub *trayico

return

;***** NOTIFY_TRAYICONを処理する *****

*OnMotificmd

itemID=lparam

switch itemID

case WM_LBUTTONDOWN

gsel 0,2

gosub *icondel

swbreak

swend

return

;***** タスクトレイに入れる *****

*trayico

tooltext = "出勤/退勤時刻アラート"

hIcon=tasktray(tooltext)

return

;***** タスクトレイのアイコン削除 *****

*icondel

taskicoclr

return

;*****終了処理*****

*owari

end