Свои напоминания в Windows Mobile
От: gepard1980  
Дата: 30.03.10 05:59
Оценка:
Второй день бьюсь над задачей. Хочу реализовать напоминания в своей софтине. Поскольку WM_TIMER не катит, поскольку в ждущем режиме он не работает, то пришлось юзать функции CeRunAppAtTime и CeSetUserNotificationEx. Калькулятор стартует, если его указать, а свой экземпляр софтины — нет. Читал ветки:

http://rsdn.ru/forum/pda/2984567.aspx
Автор: Кодт
Дата: 11.06.08

http://rsdn.ru/forum/pda/2660135.aspx
Автор: Кодт
Дата: 17.09.07


Проект на MFC, написан в VS20008. Вот код из WinApp:
/////////////////////////////////////////////////////////////////////////////////////////

#include "stdafx.h"
#include "Leanot.h"
#include "LeanotDlg.h"
#include <notify.h>
#include <pm.h>

#ifdef _DEBUG
#define new DEBUG_NEW
#endif

#define STR_RUNNING_MUTEX  _T("1a2b3c4d5cSmartDevicesMutex")

BEGIN_MESSAGE_MAP(CLeanotApp, CWinApp)
END_MESSAGE_MAP()

CLeanotApp::CLeanotApp() : CWinApp()
{
    
}

CLeanotApp theApp;

BOOL CLeanotApp::InitInstance()
{        
    SetRuningTime();

    if(IsRunning()) 
        return FALSE;

        SHInitExtraControls();

    SetRegistryKey(_T("Local AppWizard-Generated Applications"));

    CLeanotDlg dlg;
    m_pMainWnd = &dlg;
    INT_PTR nResponse = dlg.DoModal();
    if (nResponse == IDOK)
    {
    }    

    return FALSE;
}

BOOL CLeanotApp::IsRunning()
{
    m_hMutex = CreateMutex( NULL, FALSE, STR_RUNNING_MUTEX );

    if( ERROR_ALREADY_EXISTS == GetLastError() )
    {        
        return TRUE;
    }

    return FALSE;
}

void CLeanotApp::SetRuningTime()
{
    PlaySound(_T("\\Windows\\notify.wav"),  NULL, SND_ASYNC | SND_FILENAME);

    TCHAR szBuffer[MAX_PATH*2]={0};
    ::GetModuleFileName(NULL, szBuffer, MAX_PATH*2 );

    SYSTEMTIME time = {0};
    GetLocalTime(&time);
    CTime newtime(time);
    CTimeSpan ts( 20 );
    newtime += ts;
    newtime.GetAsSystemTime(time);

    UserNotificationTrigger nt = {0};    
    nt.dwSize = sizeof(UserNotificationTrigger);
    nt.dwType          = CNT_TIME;
    nt.lpszApplication = szBuffer;
    nt.lpszArguments   = NULL;
    nt.stStartTime     = time;
    nt.stEndTime       = time;

    HANDLE hNotify = ::CeSetUserNotificationEx(0, &nt, NULL);
    ::CloseHandle(hNotify);    
}

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

Может кто поделиться работающим примером или подскажет дельное предложение?
добавлена разметка — Кодт
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.