定刻にアラートを出す常駐アプリ
//タスクバーに常駐するアプリです.
//;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