현재 프로세서 목록을 구해보면 쉽게 알수 있을것 같은데 그게 잘 안되나봐요
아래 샘플을 참조하세요
첫번째는 프로세서 목록을 구해오는 것이구요
두번째는 Windows Service에서 특정 Service가 실행되어있는지 상태를 확인하는 샘플입니다.
#include
void __fastcall TForm1::Button1Click(TObject *Sender)
{
Memo1->Lines->Clear();
HWND hsnapshot = NULL;
PROCESSENTRY32 processinfo;
processinfo.dwSize = sizeof(processinfo);
hsnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hsnapshot == NULL)return;
bool status = Process32First(hsnapshot, &processinfo);
while(status)
{
Memo1->Lines->Add(processinfo.szExeFile);
status = Process32Next(hsnapshot, &processinfo);
}
CloseHandle(hsnapshot);
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button2Click(TObject *Sender)
{
static SERVICE_STATUS g_sStatus;
String sServiceName="MySQL";
SC_HANDLE schService = NULL;
SC_HANDLE schSCManager = NULL;
TCHAR szError[MAX_PATH] = {0, };
BOOL bRet = FALSE;
schSCManager = ::OpenSCManager(NULL,NULL,SC_MANAGER_ALL_ACCESS );
if ( NULL != schSCManager )
{
schService = ::OpenService(schSCManager,sServiceName.c_str(),SERVICE_ALL_ACCESS);
if (NULL != schService)
{
//서비스 상태
//#define SERVICE_STOPPED 0x00000001
//#define SERVICE_START_PENDING 0x00000002
//#define SERVICE_STOP_PENDING 0x00000003
//#define SERVICE_RUNNING 0x00000004
//#define SERVICE_CONTINUE_PENDING 0x00000005
//#define SERVICE_PAUSE_PENDING 0x00000006
//#define SERVICE_PAUSED 0x00000007
//서비스 제어
//#define SERVICE_CONTROL_STOP 0x00000001
//#define SERVICE_CONTROL_PAUSE 0x00000002
//#define SERVICE_CONTROL_CONTINUE 0x00000003
//#define SERVICE_CONTROL_INTERROGATE 0x00000004
//#define SERVICE_CONTROL_SHUTDOWN 0x00000005
//#define SERVICE_CONTROL_PARAMCHANGE 0x00000006
//#define SERVICE_CONTROL_NETBINDADD 0x00000007
//#define SERVICE_CONTROL_NETBINDREMOVE 0x00000008
//#define SERVICE_CONTROL_NETBINDENABLE 0x00000009
//#define SERVICE_CONTROL_NETBINDDISABLE 0x0000000A
//#define SERVICE_CONTROL_DEVICEEVENT 0x0000000B
//#define SERVICE_CONTROL_HARDWAREPROFILECHANGE 0x0000000C
//#define SERVICE_CONTROL_POWEREVENT 0x0000000D
//#define SERVICE_CONTROL_SESSIONCHANGE 0x0000000E
::QueryServiceStatus( schService, &g_sStatus);
if( g_sStatus.dwCurrentState == SERVICE_RUNNING )
{
ShowMessage(sServiceName+" Running ");
//ControlService(schService,SERVICE_CONTROL_STOP, &g_sStatus); //Service를 멈춤
}
else if (g_sStatus.dwCurrentState ==SERVICE_STOPPED)
{
ShowMessage(sServiceName+" Stoped ");
}
else if (g_sStatus.dwCurrentState ==SERVICE_PAUSED)
{
ShowMessage(sServiceName+" Paused ");
// ControlService(schSCManager,SERVICE_CONTROL_CONTINUE,&g_sStatus);
// ShowMessage(sServiceName+" Resume ");
}
::CloseServiceHandle(schService);
}
else
{
ShowMessage(sServiceName+" OpenService failed \n");
}
::CloseServiceHandle(schSCManager);
}
}
//---------------------------------------------------------------------------
그럼...
빌더 초보 님이 쓰신 글 :
: 입문한지 얼마안되는 알짜 초보 입니다.. ^^
:
: 다름이 아니고 제가 프로그램을 돌리기 전에 firebird란 프로그램이 먼저 동작이 되어있어야 하거든요
:
: 그러다 보니 가끔씩 이 부분 때문에 에러가 나는 경우가 있더군요
:
: 혹시 이 부분을 체크 할수 있는 방법이 있을까요..ㅜㅜ
|