1. Келецкий Я. Энциклопедия языка Си/ Пер. с англ. - М.: Мир, 1992. - 687с.
2. Керниган Б., Ричи Д., Фьюер А. Язык программирования Си. Задачи по языку С / Пер. с англ. - М.: Финансы и статистика, 1985. - 279с.
Приложение А
---------------------- [на лист 2
Рисунок А.1. Алгоритм программы
------------------------ [с листа1
Рисунок А.1. Лист №2
Приложение Б
Текст программы
#include <windows. h>
#include "resource. h"
#include <io. h>
#define WM_SHELLNOTIFY WM_USER+5
#define IDC_RESTORE 1000
#define TM 1001
typedef struct _SHEDULEDATA {
char fname [120] ;
char tname [6] ;
int h;
int m;
int s;
int priority;
int delay;
} SHEDULEDATA;
char * FileOpen (HWND hWnd);
int FindNext (SHEDULEDATA sd [30], int count);
void cstrcpy (char *a,char *b, int from, int count);
void MakeItStandart (SHEDULEDATA sd [30], int count);
void SubtDelay (SHEDULEDATA sd [30], int count, int delay);
int ReadShedule (HANDLE hFile,SHEDULEDATA sd [30]);
LRESULT CALLBACK WindowProc (HWND hWnd,UINT message,WPARAM wParam,LPARAM lParam); // дескриптор окна
INT CALLBACK MyDlgProc (HWND hDlg, // обращается к dialog box
UINT uMsg, // сообщение
WPARAM wParam, // первый параметр сообщения
LPARAM lParam // второй параметр сообщения);
int APIENTRY WinMain (HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{
WNDCLASS wcl;
HWND hWnd;
MSG lpMsg;
// заполнение структуры с параметрами окна программы
wcl. style=CS_HREDRAW|CS_VREDRAW; // стиль окна
wcl. lpfnWndProc=WindowProc; // ф-ция обработки событий окна // оконная процедура
wcl. cbClsExtra=0; // дополнительные байты класса
wcl. cbWndExtra=0; // дополнительные байты окна
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|NIF_TIP|NIF_ICON;
nfd. uCallbackMessage=WM_SHELLNOTIFY;
lstrcpy (nfd. szTip,tip);
nfd. hIcon=LoadIcon (NULL, IDI_WINLOGO);
hMenu = CreatePopupMenu ();
AppendMenu (hMenu,MF_ENABLED|MF_STRING, IDC_RESTORE,"восстановить");
AppendMenu (hMenu,MF_ENABLED|MF_SEPARATOR,0,0);
AppendMenu (hMenu,MF_ENABLED|MF_STRING, IDC_EXIT,"закрыть");
frst=TRUE;
SetDlgItemText (hDlg, IDC_TEXT,"");
return (TRUE);
}
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)
{
if (MessageBox (hDlg,"Приложение не удалось запустить. Продолжить работу?",sd [nextexe]. fname,MB_YESNO|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| MB_ICONERROR) ==IDRETRY)
SendMessage (hDlg,WM_COMMAND, IDC_START,0);
else
SendMessage (hDlg,WM_COMMAND, IDC_STOP,0);
}
}
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|MB_ICONERROR);
return TRUE;
}
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))
{
frst=TRUE;
if (MessageBox (hDlg,"В системе нет свободных таймеров. ",0,MB_RETRYCANCEL| 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|MB_ICONINFORMATION);
}
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)
{
OPENFILENAME filename;
char name [512] = "";
ZeroMemory (&filename, sizeof (filename));
filename. lStructSize = sizeof (filename);
filename. hwndOwner = hWnd;
filename. lpstrFile = name;
filename. lpstrFile [0] = '\0';
filename. nMaxFile = sizeof (name);
filename. lpstrFilter = "Text files\0*. txt\0";
filename. nFilterIndex = 1;
filename. lpstrFileTitle = "Выберите имя файла для сравнения... ";
filename. nMaxFileTitle = 0;
filename. lpstrInitialDir = NULL;
filename. Flags = OFN_PATHMUSTEXIST | 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;
}
... из списка исключений в список одноименных файлов или удаляет файл из списка исключений 2. Программная реализация алгоритма При создании программы необходимо запустить среду программирования Microsoft Visual C++ 6.0. Для использования MFC AppWizard необходимо выполнить следующие действия: в главном меню выбирается пункт File и подпункт New. В появившемся диалоговом окне нужно ...
... приложениями и DOS – приложениями). Цель работы: получение навыков запуска и настройки режима выполнения программ (Windows – приложениями и DOS – приложений) в операционных системах Windows NT/95, изменения различных параметров операционной системы, работая с файлами и документами в приложениях Windows. Работа в текстовом редакторе Microsoft Word. Наберите в окне WinWord текст вашей краткой ...
... элементов, глобальное пространство имен, а также лавинообразную первоначальную загрузку сети. Таким образом ОСРВ SPOX имеет необходимые механизмы для создания отказоустойчивой распределенной операционной системы реального времени, концепция построения которой описана в главе 2. 4.3 Аппаратно-зависимые компоненты ОСРВ Модули маршрутизации, реконфигурации, голосования реализованы как аппаратно- ...
... . В качестве дополнительных услуг часто представляются возможности записи макрокоманд, создания собственных входных и выходных форм, а также обмена информацией с базами данных. Системы управления базами данных (СУБД) – информационно-поисковые системы, позволяющие обрабатывать (вводить, осуществлять поиск, сортировать и пр.) большие массивы информации. Примером простейшей базы данных является ...
0 комментариев