我已在具有管理员权限帐户的Windows服务中写入此代码:
private delegate bool EnumWindowsProc(IntPtr hWnd, int lParam);
[DllImport("USER32.DLL")]
static extern bool EnumWindows(EnumWindowsProc enumFunc, int lParam);
[DllImport("USER32.DLL")]
static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int MaxCount);
[DllImport("USER32.DLL")]
static extern int GetWindowTextLength(IntPtr hWnd);
[DllImport("USER32.DLL")]
static extern bool IsWindowVisible(IntPtr hWnd);
[DllImport("USER32.DLL")]
static extern IntPtr GetShellWindow();
private static IntPtr shellWindow = GetShellWindow();
private static Dictionary<intptr, string=""> windows = new Dictionary<intptr, string="">();
private static bool _fEnumWindowsCallBack(IntPtr hWnd, int lParam)
{
// It never execute this code
if (hWnd == shellWindow) return true;
if (!IsWindowVisible(hWnd)) return true;
int length = GetWindowTextLength(hWnd);
if (length == 0) return true;
StringBuilder builder = new StringBuilder(length);
GetWindowText(hWnd, builder, length + 1);
windows[hWnd] = builder.ToString();
return true;
}
public static IDictionary<intptr, string=""> GetOpenWindows()
{
windows.Clear();
EnumWindowsProc fEnumWindowsCallBack = new EnumWindowsProc(_fEnumWindowsCallBack);
EnumWindows(fEnumWindowsCallBack, 0);
return windows;
}
但它确实有效(从不执行_fEnumWindowsCallBack函数)。
知道为什么吗?
我正在使用W7 x64,Visual Studio 2012。
感谢。
答案 0 :(得分:0)
我的假设是因为您的Windows服务未在交互式会话中运行。没有窗户可以计算。
来自docs(强调我的):
支持的最低客户端
Windows 2000 Professional [仅限桌面应用]
支持的最低服务器
Windows 2000 Server [仅限桌面应用]