gpt4 book ai didi

c++ - 如何在 C++ 中获取服务显示名称?

转载 作者:行者123 更新时间:2023-11-28 03:34:30 24 4
gpt4 key购买 nike

我正在尝试使用 C++ 获取正在运行的服务的显示名称。我尝试使用 GetServiceDisplayName 函数,但它似乎不起作用,不知道为什么。

TTServiceBegin( const char *svcName, PFNSERVICE pfnService, bool *svc, PFNTERMINATE pfnTerm,
int flags, int argc, char *argv[], DWORD dynamiteThreadWaitTime )
{
SC_HANDLE serviceStatusHandle;
DWORD dwSizeNeeded = 0 ;
TCHAR* szKeyName = NULL ;

serviceStatusHandle=OpenSCManager(NULL, SERVICES_ACTIVE_DATABASE ,SC_MANAGER_ALL_ACCESS);

GetServiceDisplayName(serviceStatusHandle,svcName, NULL, &dwSizeNeeded);
if(dwSizeNeeded)
{
szKeyName = new char[dwSizeNeeded+1];
ZeroMemory(szKeyName,dwSizeNeeded+1);
if(GetServiceDisplayName(serviceStatusHandle ,svcName,szKeyName,&dwSizeNeeded)!=0)
{
MessageBox(0,szKeyName,"Got the key name",0);
}


}

当我运行这段代码时,我永远无法在我的调试器中看到 szKeyName 的值,它会进入消息框的 if block ,但从不显示消息框。不确定为什么?

无论如何要让它工作以获取服务的显示名称或任何其他/更简单的方法来完成该任务?

最佳答案

您需要使用 WTSSendMessage 而不是 MessageBox 来与事件 session 交互。

WTS_SESSION_INFO* pSessionInfo = NULL;          
DWORD dwSessionsCount = 0;
if(WTSEnumerateSessions(WTS_CURRENT_SERVER_HANDLE, 0, 1, &pSessionInfo, &dwSessionsCount))
{
for(int i=0; i<(int)dwSessionsCount; i++)
{
WTS_SESSION_INFO &si = pSessionInfo[i];
if(si.State == WTSActive)
{
DWORD dwIdCurrentSession = si.SessionId;

std::string strTitle = "Hello";
std::string strMessage = "This is a message from the service";

DWORD dwMsgBoxRetValue = 0;
if(WTSSendMessage(
WTS_CURRENT_SERVER_HANDLE,
dwIdCurrentSession,
(char*)strTitle.c_str(),
strTitle.size(),
(char*)strMessage.c_str(),
strMessage.size(),
MB_RETRYCANCEL | MB_ICONINFORMATION | MB_TOPMOST,
60000,
&dwMsgBoxRetValue,
TRUE))
{

switch(dwMsgBoxRetValue)
{
case IDTIMEOUT:
// Deal with TimeOut...
break;
case IDCANCEL:
// Deal With Cancel....
break;
}
}
else
{
// Deal With Error
}

break;
}
}

WTSFreeMemory(pSessionInfo);
}

关于c++ - 如何在 C++ 中获取服务显示名称?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11436106/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com