« 前一篇:MAC下的某些键
后一篇:元素周期表 »

整点报时程序 @ 10/20/2012

技术类
在mac下使用整点报时程序,感觉不错,遂在windows下写了一个。
Microsoft Speech API 实现的,其实很简单,下载sapi的sdk里面有例子可以参考。
不过为了写成一个系统服务,费了不少周折,最后发现如果系统服务使用System帐号,即便打开“允许服务与桌面交互”,也是不能发出声音的,遂放弃,直接写成启动加载的程序了。

上代码:
#include <windows.h>
#include <tchar.h>
#include <time.h>
#include <atlbase.h>
#include <sapi.h> //sapi.h在SDK的include目录
#pragma comment(lib, "ole32.lib")
#pragma comment(lib, "sapi.lib") //sapi.lib在SDK的lib目录

VOID ReportClock(int nHour, INT nMinute);
VOID CheckTime(BOOL start = FALSE);

INT APIENTRY WinMain(HINSTANCE, HINSTANCE, LPSTR, INT) {
    // 启动报时
    CheckTime(TRUE);
    // 整点报时
    while (TRUE) {
        Sleep(1000);
        CheckTime();
    }
    return 0;
}

VOID ReportClock(INT nHour, INT nMinute) {
    // COM初始化
    if (FAILED(::CoInitialize(NULL))) {
        return;
    }
   
    WCHAR szReport[200];
    if (nMinute == 0) {
        ::wsprintfW(szReport, L"<VOICE REQUIRED='NAME=Microsoft Lili'/>现在时刻:%d 点整", nHour);
    } else if (nMinute < 10) {
        ::wsprintfW(szReport, L"<VOICE REQUIRED='NAME=Microsoft Lili'/>现在时刻:%d 点 0%d 分", nHour, nMinute);
    } else {
        ::wsprintfW(szReport, L"<VOICE REQUIRED='NAME=Microsoft Lili'/>现在时刻:%d 点 %d 分", nHour, nMinute);
    }

    CComPtr<ISpVoice> cpVoice;
    // 获取ISpVoice接口
    HRESULT hr = cpVoice.CoCreateInstance(CLSID_SpVoice);
    if (SUCCEEDED(hr)) {
        hr = cpVoice->Speak(szReport, SPF_DEFAULT, NULL);//SPF_IS_XML
        cpVoice.Release();
    }

    //释放资源
    ::CoUninitialize();
}

VOID CheckTime(BOOL start) {
    time_t tNow = ::time(NULL);
    struct tm *tmNow = ::localtime(&tNow);

    // 启动时,整点时,18点后/9点前每半小时
    if (start || (tmNow->tm_sec == 0 && (tmNow->tm_min == 0 || (tmNow->tm_min == 30 && (tmNow->tm_hour >= 18 || tmNow->tm_hour < 9))))) {
        ReportClock(tmNow->tm_hour, tmNow->tm_min);
    }
}
发布于 10/20/2012 19:07:02 | 评论:2
pc @ 10/20/2012 22:12:14
赞!

当时不小心把Mac正点报时打开了,还吓了一跳,不知道怎么关闭……
吴雨 @ 10/22/2012 13:34:26
写程序的时候经常忘记时间,有个报时的程序在那儿提醒着也挺好。
当然,玩游戏的时候也会不太注意时间。

看帖要回帖...

categories
archives
links
statistics
  • 网志数:1168
  • 评论数:2011