|
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
|
|
| 13.05.2012, 18:23 | |
|
Ответы с готовыми решениями:
1
Падение HDD, при подключении к компу издает издает короткий повторяющийся звуковой сигнал. Crontab - запуск скрипта в начале каждого часа Ошибки при компиляции - исправить ошибки в коде |
|
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
|
|
| 13.05.2012, 18:28 | |
|
Помогаю со студенческими работами здесь
2
Исправить ошибки при компиляции кода Ошибки при компиляции, помогите исправить Как исправить ошибки при компиляции проекта?
Нужна программа, которая издает сигнал каждые X минут в течении определенного времени суток Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
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 .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|