为什么在windows服务程序中调用EnumWindows枚举窗口句柄,很多窗口句柄没枚举到

为什么在windows服务程序中调用EnumWindows枚举窗口句柄,很多窗口句柄没有枚举到?

启动一个windows服务,在子线程中调用EnumWindows,问题如上,代码如下:
std::vector<HWND> g_vecHwnd;

BOOL CALLBACK lpEnumWindows(HWND hwnd, LPARAM lParam)
{
if (!IsWindowVisible(hwnd))
return TRUE;

if (!IsWindowEnabled(hwnd))
return TRUE;

LONG gwl_style = GetWindowLong(hwnd,GWL_STYLE);
if ((gwl_style & WS_POPUP) && !(gwl_style & WS_CAPTION))
return TRUE;

HWND hParent = (HWND)GetWindowLong(hwnd,GWL_HWNDPARENT);
if (IsWindowEnabled(hParent))
return TRUE;
if (IsWindowVisible(hParent))
return TRUE;

g_vecHwnd.push_back(hwnd);
return TRUE;
}

bOk = EnumWindows(lpEnumWindows, NULL);


ps:在回调函数中lpEnumWindows,我过滤了一些窗口,但是我想获取的窗口,在调试时发现根本没有枚举到。代码不放在服务中,可以枚举到。


------解决思路----------------------
你试试主线程,有些东西在子线程中确实会有问题。例如刷新托盘区,如果是子线程,发送消息会导致explorer.exe崩溃,主线程就正常
------解决思路----------------------
她们不再同一个 Session 中。
------解决思路----------------------
请关注服务程序的登录用户身份、允许不允许与桌面交互。