Войти

Показать полную графическую версию : [решено] Как использовать функции API


charon
30-06-2021, 15:03
С++ только учу.
на https://docs.microsoft.com/en-us/windows/win32/api/
есть исходные коды функций, на этом и все.
Кому не трудно подскажите как их использовать в С++? Те, что в листингах - собираются с ошибками, или вообще не хотят.
У меня
OS Windows 7x64
IDE Code::Block
компилятор GNU GCC (gcc-11.1.0-64 ссылка) (http://www.equation.com/servlet/equation.cmd?fa=fortran)
Как пример, нужен листинг использования функции OpenSCManager.
OpenSCManagerA (https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-openscmanagera)
SC_HANDLE OpenSCManagerA(
LPCSTR lpMachineName,
LPCSTR lpDatabaseName,
DWORD dwDesiredAccess
);
или
OpenServiceW (winsvc.h) (https://docs.microsoft.com/en-us/windows/win32/api/winsvc/nf-winsvc-openservicew)
SC_HANDLE OpenServiceW(
SC_HANDLE hSCManager,
LPCWSTR lpServiceName,
DWORD dwDesiredAccess
);

В принципе любой простенький! подойдет, лишь бы собрался без ошибок в GCC!.
Hello World не надо! :-)

P.S. может у кого уже готовый завалялся. На FASM тоже пойдет, но лучше С++. Книжка с листингами, тоже хорошо. Повторю - лишь бы собирались без ошибок.

iglezz
03-07-2021, 17:55
charon,
менеджер сервисов с исходниками: https://git.nssm.cc/nssm/nssm

charon
04-07-2021, 12:39
iglezz, фреймворков полно, но разбираться в них все равно что в ассемблерных исходниках.
Все, как оказалось, намного проще.
В MSDN смотрим код функции и пишем свою для передачи параметров.

В данном случае это будет выглядеть так:

#include <windows.h>
#include <stdio.h>

int main()
{
SC_HANDLE schSCManager; //инициализация

schSCManager=OpenSCManagerA(
NULL,
NULL,
SC_MANAGER_ALL_ACCESS);

if (NULL == schSCManager)
{
printf("OpenSCManager failed (%ld)\n", GetLastError());
//закрываем дескриптор
CloseServiceHandle(schSCManager);
return 0;
}
//закрываем дескриптор
CloseServiceHandle(schSCManager);
}

P.S. И книжку нашел с исходниками Побегайло. "Системное программирование в windows"
Если кому надо залью на облако.




© OSzone.net 2001-2012