Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.56/9: Рейтинг темы: голосов - 9, средняя оценка - 4.56
1 / 1 / 0
Регистрация: 07.03.2011
Сообщений: 24

Код службы, которая издает звуковой сигнал в начале каждого часа. Исправить ошибки при компиляции

13.05.2012, 18:23. Показов 1808. Ответов 1
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
// serv.cpp: определяет точку входа для консольного приложения.
//

#include "stdafx.h"

Нашел исходник на http://dmtsoft.ru/bn/144/as/oneaticleshablon/, как исправить ошибки:
Ошибка 1 error C2664: atoi: невозможно преобразовать параметр 1 из "LPTSTR" в "const char *"
2 IntelliSense: аргумент типа "LPTSTR" несовместим с параметром типа "const char *"

#include <windows.h>
#include <iostream>
#include <string.h>
#include <time.h>
#include <process.h>

SERVICE_STATUS Service1Status;
SERVICE_STATUS_HANDLE Service1StatusHandle;
using namespace std;

int modtime=3600; // звуковой сигнал каждый час
HANDLE thread;
BOOL manual=FALSE;

void ding(void *)
{
time_t timeval;
while (Service1Status.dwCurrentState!=SERVICE_ STOPPED)
{
if (Service1Status.dwCurrentState!=SERVICE_ PAUSED)
{
time(&timeval);
if (!(timeval%modtime)|| manual)
PlaySound( L"DING", GetModuleHandle( NULL), SND_RESOURCE|SND_SYNC|SND_NOSTOP);
manual=FALSE;
}
Sleep(500);
}
}

VOID __stdcall CtrlHandler (DWORD Opcode)
{
DWORD status;
switch(Opcode)
{
case SERVICE_CONTROL_PAUSE:
// если пауза
Service1Status.dwCurrentState = SERVICE_PAUSED;
break;
case SERVICE_CONTROL_CONTINUE:
// если продолжение работы
Service1Status.dwCurrentState = SERVICE_RUNNING;
// блокировать звуковой сигнал
manual=TRUE;
break;
case SERVICE_CONTROL_STOP:
//остановка службы
Service1Status.dwWin32ExitCode = 0;
Service1Status.dwCurrentState = SERVICE_STOPPED;
Service1Status.dwCheckPoint = 0;
Service1Status.dwWaitHint = 0;
if (!SetServiceStatus (Service1StatusHandle,&Service1Status))
{
status = GetLastError();
}
return;
case SERVICE_CONTROL_INTERROGATE:
//Запрашивает текущее состояние службы
break;
default:
// обработка неизвестного кода
// ничего не делать
;
}
// текущее состояние
if (!SetServiceStatus (Service1StatusHandle, &Service1Status))
{
status = GetLastError();
}
return;
}

void __stdcall Service1Start (DWORD argc, LPTSTR *argv)
{
DWORD status;
DWORD specificError;
if (argc>1) modtime=atoi(argv[1]);
if (!modtime) modtime=1;
Service1Status.dwServiceType = SERVICE_WIN32; // тип службы
Service1Status.dwCurrentState = SERVICE_START_PENDING; // состояние службы
//набор флагов, который показывает, какие команды управления обрабатываются службой
Service1Status.dwControlsAccepted = SERVICE_ACCEPT_STOP | SERVICE_ACCEPT_PAUSE_CONTINUE;
Service1Status.dwWin32ExitCode = 0;
Service1Status.dwServiceSpecificExitCode = 0;
Service1Status.dwCheckPoint = 0;
Service1Status.dwWaitHint = 0;
Service1StatusHandle = RegisterServiceCtrlHandler(TEXT("Service l"), CtrlHandler);
//регистрация функции-обработчика команд службы
if (Service1StatusHandle == (SERVICE_STATUS_HANDLE)0)
{
// ошибка!
return;
}
// Код инициализации переходит сюда
status=NO_ERROR;
// Условие ошибочности
if (status != NO_ERROR)
{
Service1Status.dwCurrentState = SERVICE_STOPPED;
Service1Status.dwCheckPoint = 0;
Service1Status.dwWaitHint =0;
Service1Status.dwWin32ExitCode = status;
Service1Status.dwServiceSpecificExitCode = specificError;
SetServiceStatus (Service1StatusHandle, &Service1Status);
return;
} // Инициализация завершена - доложить о готовности.
Service1Status.dwCurrentState = SERVICE_RUNNING;
Service1Status.dwCheckPoint = 0;
Service1Status.dwWaitHint = 0;
if (!SetServiceStatus (Service1StatusHandle, &Service1Status))
{
status = GetLastError();
// ошибка!
}
// Здесь служба выполняет свою работу.
thread=(HANDLE)_beginthread(ding,0,NULL) ;
return;
}

void main(int argc, char *argv[])
{
SERVICE_TABLE_ENTRY DispatchTable[] =
{
{
TEXT("Servicel"), //текстовый идентификатор службы
Service1Start //точка входа службы
},
{
NULL,NULL
}
};

if (argc>1 && !stricmp(argv[1],"delete"))
{
//соединяемся с менеджером системных служб
SC_HANDLE scm=OpenSCManager(NULL,NULL,SC_MANAGER_C REATE_SERVICE);
if (!scm)
{
cout<<"He могу открыть SCM\n";
exit(1);
}
//получаем хэндл службы
SC_HANDLE svc=OpenService(scm,L"service1",DELETE);
if (!svc)
{
cout<<"He могу открыть службу\n";
exit(2);
}
//удаляем службу
if (!DeleteService(svc))
{
cout<<"He могу удалить службу\n";
exit(3);
}
cout<<"Служба удалена\n";
CloseServiceHandle(svc);
CloseServiceHandle(scm);
exit(0);
}

//регистрация службы
if (argc>1 && !stricmp(argv[1], "setup"))
{
char pname[1024];
pname[0]='\"';
//получаем имя файла, которому принадлежит данный процесс
GetModuleFileName(NULL,(LPWSTR)pname+1,1 023);
strcat(pname,"\"");
//соединяемся с менеджером системных служб
//тип доступа: Создание новой системной
//службы с помошью CreateService
SC_HANDLE scm=OpenSCManager(NULL,NULL,SC_MANAGER_C REATE_SERVICE),svc;
if (!scm)
{
cout<<"Can't open SCM\n";
exit(1);
}
//создаем новую службу
if (!(svc=CreateService(scm, //handle SCM
L"Service1", //имя службы
L"Service1", //название службы
SERVICE_ALL_ACCESS, //доступ к объекту службы
SERVICE_WIN32_OWN_PROCESS,
//тип службы - Служба Win32, выполняющаяся в

//отдельном процессе
SERVICE_DEMAND_START,
//способ запуска службы: запускается, при вызове

//функции StartService
SERVICE_ERROR_NORMAL,
//реакция на ошибки при загрузке: Программа загрузки

//заносит запись в системный журнал и загрузка продолжается.

//Кроме того, на экран выводится сообщение, что службу не

//удалось запустить
(LPWSTR)pname, //исполняемый файл
NULL, //группа загрузки
NULL, //тег (NULL для служб Win32)
NULL, //зависимости
NULL,
//учетная запись службы (NULL соответствует учетной записи LocalSystem)
NULL
//пароль учетной записи
)))
{
cout<<"Ошибка регистрации!\n";
exit(2);
}
cout<<"Успешно зарегистрирована служба "<<pname<<"\n";
CloseServiceHandle(svc);
CloseServiceHandle(scm);
exit(0);
}
//цикл приема и обработки команд SCM
if (!StartServiceCtrlDispatcher( DispatchTable))
{
// error
}
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.05.2012, 18:23
Ответы с готовыми решениями:

Падение HDD, при подключении к компу издает издает короткий повторяющийся звуковой сигнал.
Всем доброго времени суток! Проблема вот в чем: внешний жесткий упал с небольшой высоты, при подключении к компу издает издает короткий...

Crontab - запуск скрипта в начале каждого часа
Здравствуйте. У менять есть проблема. Я сделал скрипт и мне нужно запускать его в начале каждого часа с помощью crontab. Вот содержимое...

Ошибки при компиляции - исправить ошибки в коде
Помогите исправить ошибки , не понимаю в чем может быть причина ... #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include...

1
 Аватар для Ternsip
670 / 198 / 29
Регистрация: 10.05.2012
Сообщений: 595
13.05.2012, 18:28
Часто встречался с такими ошибками перевода из LPTSTR, LPCSTR уже точно не помню, но был макрос _T()
и по-моему я юзал (LPCSTR)str (где str-char *) когда переводил обратно из char* в LPCSTR + там какой то модуль надо.
Попробуйте поискать, погуглить, я нашёл и вы сможете...
кстати из string в char* переводится так : str.c_str(); (но не в const * char), где str - string
и в юникод не лазайте
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
13.05.2012, 18:28
Помогаю со студенческими работами здесь

Исправить ошибки при компиляции кода
Ребята , был код с индексацией все работало отлично , переделал на указатели , не компилирует видает 2 ошибки (варнинга) как исправить не...

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

Как исправить ошибки при компиляции проекта?
Недавно набросал достаточно много классов, для проекта. Но ошибок компиляции получилось почему то ну очень много. И я не понимаю как их...

Как исправить ошибки которые появились при компиляции
проект лежит C:\Users\Тим\source\repos\App8 Ошибка Error retrieving parent for item: No resource found that matches the given...

Нужна программа, которая издает сигнал каждые X минут в течении определенного времени суток
Нужна программа, которая издает сигнал (желательно, чтобы можно было выбрать его из файла) каждые X минут в течении определенного времени...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru