на тему рефераты Информационно-образоательный портал
Рефераты, курсовые, дипломы, научные работы,
на тему рефераты
на тему рефераты
МЕНЮ|
на тему рефераты
поиск
Системное программирование в операционных системах
p align="left">wcl. hInstance=hInstance; // дескриптор экземпляра окна // дескриптор пиктограммы

wcl. hIcon=LoadIcon (NULL, IDI_APPLICATION);

wcl. hCursor=LoadCursor (NULL, IDC_ARROW); // дескриптор курсора

wcl. hbrBackground= (HBRUSH) GetStockObject (WHITE_BRUSH);); // цвет фона

wcl. lpszMenuName=NULL; // имя ресурса с главным меню программы // ресурс меню, связанный с окном

wcl. lpszClassName="Pass"; // имя класса окна

if (! RegisterClass (&wcl))

return 0;

hWnd=CreateWindow (wcl. lpszClassName,"window",WS_OVERLAPPEDWINDOW,CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, CW_USEDEFAULT, NULL, NULL, hInstance, NULL);

ShowWindow (hWnd,SW_HIDE);

UpdateWindow (hWnd);

while (GetMessage (&lpMsg, NULL, 0,0))

{

TranslateMessage (&lpMsg);

DispatchMessage (&lpMsg);

}

return lpMsg. wParam;

}

LRESULT CALLBACK WindowProc (HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam) // дескриптор окна

{

static HINSTANCE hInstance;

switch (message)

{

case WM_CREATE:

{

hInstance = ( (LPCREATESTRUCT) lParam) - >hInstance;

DialogBox (hInstance, IDD_DIAL,hWnd, MyDlgProc);

break;

}

case WM_DESTROY:

{

PostQuitMessage (0);

break;

}

default:

return DefWindowProc (hWnd, message, wParam, lParam);

}

return 0;

}

INT CALLBACK MyDlgProc (HWND hDlg,UINT uMsg,WPARAM wParam,LPARAM lParam)

{

static SHEDULEDATA sd [30] ;

static int count,nextexe,delayexe;

static char name [300] ;

char * n;

static BOOL frst, fileopen = FALSE,filewasopened=FALSE;

BOOL cp;

char tip [] ="запуск по расписанию\0";

UINT uId=111;

static NOTIFYICONDATA nfd;

int i;

static STARTUPINFO si;

static HANDLE hMenu,hTimer,hFile;

static PROCESS_INFORMATION pi;

switch (uMsg)

{

case WM_INITDIALOG:

si. cb=sizeof (STARTUPINFO);

GetStartupInfo (&si);

nfd. cbSize=sizeof (NOTIFYICONDATA);

nfd. hWnd=hDlg;

nfd. uID=uId;

nfd. uFlags=NIF_MESSAGE

case WM_CLOSE:

{

if (filewasopened)

CloseHandle (hFile);

Shell_NotifyIcon (NIM_DELETE,&nfd);

DestroyMenu (hMenu);

SendMessage (GetParent (hDlg),WM_DESTROY,0,0);

EndDialog (hDlg, 0);

return (TRUE);

}

case WM_SIZE:

{

if (wParam==SIZE_MINIMIZED)

{

ShowWindow (hDlg,SW_HIDE);

Shell_NotifyIcon (NIM_ADD,&nfd);

}

return TRUE;

}

case WM_TIMER:

{

cp=CreateProcess (sd [nextexe]. fname,NULL,NULL,FALSE,CREATE_DEFAULT_ERROR_MODE,NULL,NULL,NULL,&si,&pi);

KillTimer (hDlg,TM);

if (! cp)

MB_ICONERROR) ==IDNO)

SendMessage (hDlg,WM_COMMAND, IDC_STOP,0);

else

SendMessage (hDlg,WM_COMMAND, IDC_START,0);

else

{

nextexe=FindNext (sd,count);

if (nextexe<0)

{

SendMessage (hDlg,WM_COMMAND, IDC_STOP,0);

return TRUE;

}

delayexe=sd [nextexe]. delay;

sd [nextexe]. delay=-1;

SubtDelay (sd,count,delayexe);

if (! SetTimer (hDlg,TM,1000*delayexe,NULL))

frst=TRUE;

if (MessageBox (hDlg,"В системе нет свободных таймеров. ",0,MB_RETRYCANCEL

}

return TRUE;

}

case WM_SHELLNOTIFY:

{

POINT pn;

if (wParam==uId)

{

if (lParam==WM_RBUTTONDOWN)

{

GetCursorPos (&pn);

SetForegroundWindow (hDlg);

TrackPopupMenu (hMenu,TPM_RIGHTALIGN,pn. x,pn. y,0,hDlg,NULL);

PostMessage (hDlg,WM_NULL,0,0);

}

else if (lParam==WM_LBUTTONDOWN)

SendMessage (hDlg,WM_COMMAND, IDC_RESTORE,0);

}

return TRUE;

}

case WM_COMMAND:

switch (LOWORD (wParam))

{

case IDC_EXIT:

{

if (filewasopened)

CloseHandle (hFile);

Shell_NotifyIcon (NIM_DELETE,&nfd);

DestroyMenu (hMenu);

SendMessage (GetParent (hDlg),WM_DESTROY,0,0);

EndDialog (hDlg,0);

return TRUE;

}

case IDC_OPEN:

{

n=FileOpen (hDlg);

if (n! =0)

{

lstrcpy (name,n);

fileopen=TRUE;

SetDlgItemText (hDlg, IDC_TEXT,name);

}

return TRUE;

}

case IDC_START:

{

if (frst)

{

if (! fileopen)

{

i=GetDlgItemText (hDlg, IDC_TEXT,name,120);

if (i==0)

{

MessageBox (hDlg,"введите имя файла с расписанием","ожидается ввод",MB_OK);

return TRUE;

}

}

if ( (hFile=CreateFile (name,GENERIC_READ,0,NULL,OPEN_EXISTING,FILE_ATTRIBUTE_NORMAL,NULL)) ==INVALID_HANDLE_VALUE)

MessageBox (0,"Не удается открыть файл с расписанием","error",MB_APPLMODAL|MB_OK|MB_ICONSTOP);

filewasopened=FALSE;

return TRUE;

}

filewasopened=TRUE;

count=ReadShedule (hFile,sd);

if (count <=0)

MessageBox (hDlg,"Файл не соответствует формату",NULL,MB_OK

CloseHandle (hFile);

MakeItStandart (sd,count);

filewasopened=frst=FALSE;

}

nextexe=FindNext (sd,count);

if (nextexe<0)

{

SendMessage (hDlg,WM_COMMAND, IDC_STOP,0);

return TRUE;

}

delayexe=sd [nextexe]. delay;

sd [nextexe]. delay=-1;

SubtDelay (sd,count,delayexe);

SendMessage (hDlg,WM_SIZE,SIZE_MINIMIZED,0);

if (! SetTimer (hDlg,TM,1000*delayexe,NULL))

MB_ICONERROR) ==IDRETRY)

SendMessage (hDlg,WM_COMMAND, IDC_START,0);

else

SendMessage (hDlg,WM_COMMAND, IDC_STOP,0);

return TRUE;

}

case IDC_STOP:

{

if (! frst)

KillTimer (hDlg,TM);

count =0;

nextexe=-1;

frst=TRUE;

MessageBox (hDlg,"в расписании больше нет задач","Завершение",MB_OK

return TRUE;

}

case IDC_RESTORE:

{

Shell_NotifyIcon (NIM_DELETE,&nfd);

ShowWindow (hDlg,SW_RESTORE);

SetForegroundWindow (hDlg);

return TRUE;

}

}

return TRUE;

}

return FALSE;

}

char * FileOpen (HWND hWnd)

OFN_FILEMUSTEXIST;

if (GetOpenFileName (&filename) ! = NULL)

return (filename. lpstrFile);

else

return 0;

int ReadShedule (HANDLE hFile,SHEDULEDATA sd [30])

{

char str [200] ="";

char symb;

char buff [2] ="";

int w;

BOOL IsComm;

int numb;

int i;

int j;

for (i=0; i<30; i++)

{

j=-1;

w=0;

while (1)

{

ReadFile (hFile,&symb,1,&numb,NULL);

if (numb==0)

return i+1;

if (symb=='\\')

symb='/';

if ( (j==-1) && (symb! ='"'))

return - 1;

else

if (j==-1)

{

IsComm=TRUE;

j++;

continue;

}

else

if (IsComm)

if (symb=='"')

{

IsComm=FALSE;

sd [i]. fname [j] =0;

j=0;

continue;

}

else

{

sd [i]. fname [j] =symb;

j++;

continue;

}

else

if ( (symb==0xd) || (symb==' ') || (symb==': '))

continue;

if ( (symb! =0xa))

{

if (j>5)

return - 1;

sd [i]. tname [j] =symb;

j++;

continue;

}

else

break;

}

}

return i+1;

}

void cstrcpy (char *a,char *b, int from, int count)

{

int i;

int j=0;

for (i=from; i<from+count; i++)

{

b [j] =a [i] ;

j++;

}

}

void MakeItStandart (SHEDULEDATA sd [30], int count)

{

int i;

SYSTEMTIME st;

char buffer [2] ;

int uis;

int uil;

int ui;

GetLocalTime (&st);

for (i=0; i<count; i++)

{

cstrcpy (sd [i]. tname,buffer,0,2);

sd [i]. h=atoi (buffer);

cstrcpy (sd [i]. tname,buffer,2,2);

sd [i]. m=atoi (buffer);

cstrcpy (sd [i]. tname,buffer,4,2);

sd [i]. s=atoi (buffer);

uil=sd [i]. h*3600+sd [i]. m*60+sd [i]. s;

uis=st. wHour*3600+st. wMinute*60+st. wSecond;

ui=uil-uis;

if (ui<0)

sd [i]. delay=ui+24*3600;

else

sd [i]. delay=ui;

}

}

int FindNext (SHEDULEDATA sd [30], int count)

{

int i,min=0xFFFFFFF;

int minnumber=-1;

for (i=0; i<count; i++)

{

if (sd [i]. delay<0)

continue;

else

if (sd [i]. delay<min)

{

min=sd [i]. delay;

minnumber=i;

}

}

return minnumber;

}

void SubtDelay (SHEDULEDATA sd [30], int count, int delay)

{

int i;

for (i=0; i<count; i++)

if (sd [i]. delay>=0)

sd [i]. delay-=delay;

}

Страницы: 1, 2, 3



© 2003-2013
Рефераты бесплатно, курсовые, рефераты биология, большая бибилиотека рефератов, дипломы, научные работы, рефераты право, рефераты, рефераты скачать, рефераты литература, курсовые работы, реферат, доклады, рефераты медицина, рефераты на тему, сочинения, реферат бесплатно, рефераты авиация, рефераты психология, рефераты математика, рефераты кулинария, рефераты логистика, рефераты анатомия, рефераты маркетинг, рефераты релиния, рефераты социология, рефераты менеджемент.