スポンサーサイト
投稿日時 : -------- --:--
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
-------- --:-- | スポンサー広告
[win32api.js] システム時計を設定するHTA
投稿日時 : 2008-09-10 18:40
 win32api.jsを使ったシステム時計を設定するサンプルコードです。ボタンを押してシステム時計を1分単位で進めたり戻したりできます。GUIはHTAです。
 
SetLocalTime()とGetLocalTime()のサンプルHTAのスクリーンショット
 
 直接Win32API関数を呼んでもいいんですが、JavascriptのDateオブジェクトを渡してシステム時計の設定ができた方が使いやすいと思われるので専用の関数を定義してみます。あとSYSTEMTIME構造体とJavascript Dateオブジェクトの相互変換関数も定義します。これらの関数は「htalib」というObjectのメソッドとして実装することにします。システムローカル時間の設定にはSetLocalTime、取得にはGetLocalTimeのWin32API関数を使います。これらのAPI関数はwin32api.jsで定義されています。
 サンプルコードを.htaで保存して実行して下さい。動作にはwin32api.js及びSFC miniが必要です。
 
SetLocalTimeとGetLocalTimeサンプル.hta
<html>
<head>
<title>(Set|Get)LocalTimeサンプル</title>
<script type="text/javascript" language="javascript" src="win32api.js"></script>
<script type="text/javascript" language="javascript">
window.resizeTo(300,100); //ウィンドウサイズ調整

//このObject(HTA Library)に関数を追加していく
var htalib = {}; 

//jsDateからSYSTEMTIME構造体へ変換
htalib.Date2SYSTEMTIME = function(jsDate){
    if(!(jsDate instanceof Date)) return NULL;
    var systemtime = new SYSTEMTIME(); 
    systemtime.wYear = jsDate.getFullYear();
    systemtime.wMonth = jsDate.getMonth() + 1;
    systemtime.wDayOfWeek = jsDate.getDay();
    systemtime.wDay = jsDate.getDate();
    systemtime.wHour = jsDate.getHours();
    systemtime.wMinute = jsDate.getMinutes();
    systemtime.wSecond = jsDate.getSeconds();
    systemtime.wMilliseconds = jsDate.getMilliseconds();
    return systemtime;
}

//SYSTEMTIME構造体からjsDateへ変換
htalib.SYSTEMTIME2Date = function(systemtime){
    try{
        var jsDate = new Date();
        jsDate.setFullYear(systemtime.wYear);
        jsDate.setMonth(systemtime.wMonth - 1);
        jsDate.setDate(systemtime.wDay);
        jsDate.setHours(systemtime.wHour);
        jsDate.setMinutes(systemtime.wMinute);
        jsDate.setSeconds(systemtime.wSecond);
        jsDate.setMilliseconds(systemtime.wMilliseconds);
        return jsDate;
    }catch(e){
        return NULL;
    }
}

//Win32APIでシステムローカル時間設定
htalib.SetLocalTime = function(jsDate){
    if(!(jsDate instanceof Date)) return NULL;
    
    //jsDateからSYSTEMTIME構造体へ変換
    var systemtime = htalib.Date2SYSTEMTIME(jsDate);
    
    //変換成功ならAPI関数に構造体ポインタを渡す
    if(systemtime == NULL) return NULL;
    return SetLocalTime(systemtime); //API呼び出し
}

//Win32APIでシステムローカル時間取得
htalib.GetLocalTime = function(){
    var systemtime = new SYSTEMTIME();
    GetLocalTime(systemtime); //API呼び出し
    
    //SYSTEMTIME構造体からjsDateへ変換して返す
    var jsDate = htalib.SYSTEMTIME2Date(systemtime);
    return jsDate;
}


//設定
function set(mode){
    //現在時刻を基準に1分進める/戻す
    var setvalue = (mode ? 1 : -1) * 1000 * 60;
    var jsDate = new Date(new Date().getTime() + setvalue);
    
    //Dateを渡してシステムローカル時間を設定してもらう
    htalib.SetLocalTime(jsDate);
}

//取得
function get(){
    //Win32APIで取得したシステムローカル時間をDateオブジェクトで受け取る
    var jsDate = htalib.GetLocalTime();
    
    //現在日時を表示
    alert(jsDate.toLocaleDateString() + ' ' + jsDate.toLocaleTimeString());
}
</script>
</head>
<body>
<input type="button" value="1分進める" onclick="set(1)">
<input type="button" value="1分戻す" onclick="set(0)">
<input type="button" value="現在日時" onclick="get()">
</body>
</html>
スポンサーサイト
2008-09-10 18:40 | win32api.js | Comment(0) | Trackback(0)
Comment
コメントを書く
#

管理者にだけ表示
Trackback
Trackbak URL:http://itmst.blog71.fc2.com/tb.php/141-836b6ec1
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。