Re[2]: Компьютер с кукушкой
От: Alex_N_S  
Дата: 19.01.04 17:49
Оценка:
Извините, нет возможности опубликовать на каком либо сервере, поэтому кидаю как есть.

Эта программа выгружается по CTRL+ALT+F12 и делает ку-ку по CTRL+ALT+F11 (это если сроччно посмотреть хочется).
файл kuku.wav можно подставить любой свой.

пользуйтесь на здоровье — программа OpenSource

#include <windows.h>
#pragma comment(lib,"winmm.lib")

#define IDHOTKEY_CLOSE_KUKU 1
#define IDHOTKEY_DO_KUKU 2


LPSTR lpszClassName = "KuKu window class", lpszAppName = "KuKu";
HWND hWnd;
int last_hour;

int GetHour()
{
    SYSTEMTIME systime;
    GetLocalTime(&systime);
    return ((systime.wHour%=12) == 0) ? 12 : systime.wHour;
}

int DoKuku(int nTimes)
{
    
    for (int i = 0; i < nTimes; i++)
    {
        mciSendString("set cdaudio door open wait", NULL, 0, NULL);
        BOOL res = PlaySound("kuku.wav",NULL,SND_FILENAME|SND_SYNC);
        mciSendString("set cdaudio door closed wait", NULL, 0, NULL);
    }
    return 0;
}
LRESULT CALLBACK WindowProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
    int hour = 0;
    switch(message) {
    case WM_DESTROY:
         PostQuitMessage(0);
        break;
    case WM_HOTKEY:
        if ((int)wParam == IDHOTKEY_CLOSE_KUKU)
        {
            PostMessage(hWnd,WM_CLOSE,0,0);
        }
        if ((int)wParam == IDHOTKEY_DO_KUKU)
        {
            DoKuku(last_hour);
        }
        break;
    case WM_CLOSE:
            MessageBox(NULL,"KuKu quit OK",lpszAppName,MB_OK);
            UnregisterHotKey(hWnd,IDHOTKEY_CLOSE_KUKU);
            UnregisterHotKey(hWnd,IDHOTKEY_DO_KUKU);
            KillTimer(hWnd,0);
            return DefWindowProc(hWnd,message,wParam,lParam);
        break;
    case WM_TIMER:
            hour = GetHour();
            if (hour != last_hour)
            {
                last_hour = hour;
                DoKuku(hour);
            }
        break;
    default:
        return DefWindowProc(hWnd,message,wParam,lParam);
    }
    return 0;
}

int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nShowCmd)
{
    WNDCLASS wc;
    memset(&wc,0,sizeof(wc));
    wc.hInstance = hInstance;
    wc.lpszClassName = lpszClassName;
    wc.lpfnWndProc = (WNDPROC) WindowProc;

    if (!RegisterClass(&wc))
    {    MessageBox(NULL,"Window class can't be registred",lpszAppName,MB_OK|MB_ICONSTOP);
        return 1;    }
    hWnd = CreateWindow(lpszClassName,lpszAppName,0,0,0,0,0,NULL,NULL,hInstance,0);
    if (!hWnd)
    {    MessageBox(NULL,"Can't create window",lpszAppName,MB_OK|MB_ICONSTOP);
        UnregisterClass(lpszClassName,hInstance);
        return 1;    }
    
    RegisterHotKey(hWnd,IDHOTKEY_CLOSE_KUKU,MOD_CONTROL|MOD_ALT,VK_F12); // close program
    RegisterHotKey(hWnd,IDHOTKEY_DO_KUKU,MOD_CONTROL|MOD_ALT,VK_F11); // do kuku now
    SetTimer(hWnd,0,500,NULL);
    last_hour = GetHour();
    MSG msg;
    while (GetMessage(&msg,NULL,0,0))
    {
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }

    UnregisterClass(lpszClassName,hInstance);
    return 0;
}
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.