Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Windows服务(Win.7)获取活动窗口不';不行?_C#_.net_Windows 7_Windows Services - Fatal编程技术网

C# Windows服务(Win.7)获取活动窗口不';不行?

C# Windows服务(Win.7)获取活动窗口不';不行?,c#,.net,windows-7,windows-services,C#,.net,Windows 7,Windows Services,我在我的项目中有这样一个代码部分: const int cChars = 256; int ihandler = 0; StringBuilder sBuff = new StringBuilder(cChars); ihandler = GetForegroundWindow(); StreamWriter sw; if (File.Exists("C:\\Log.txt")) { sw = File.AppendText("C:\\Log.txt"); sw.WriteL

我在我的项目中有这样一个代码部分:

const int cChars = 256;
int ihandler = 0;

StringBuilder sBuff = new StringBuilder(cChars);
ihandler = GetForegroundWindow();

StreamWriter sw;
if (File.Exists("C:\\Log.txt"))
{
    sw = File.AppendText("C:\\Log.txt");
    sw.WriteLine(sBuff.ToString() + "->" + ihandler.ToString());
    sw.WriteLine("-----------");
    sw.Close();
}
else
{
    sw = new StreamWriter("C:\\Log.txt");
    sw.WriteLine(sBuff.ToString() + "->" + ihandler.ToString());
    sw.WriteLine("-----------");
    sw.Close();
}

它的值始终为0,我无法访问活动窗口的名称。我正在使用Windows 7。这是一个Windows服务项目,我应该怎么做?ihandler总是得到0,因此我无法访问name。

该服务在一个单独的会话中运行,远离与桌面的交互会话。在服务会话中没有前台窗口,因此它返回0。

服务在单独的会话中运行,远离与桌面的交互会话。在服务会话中,没有前台窗口,因此它返回0。

在Windows服务中,没有UI,没有登录用户,也没有活动窗口

Windows服务在系统启动(如果配置为自动)且没有用户登录时启动,因此尝试获取活动或
foregroundindow
没有意义

您应该修复您的设计并避免使用任何窗口,因为您无法想象或假设任何可用和活动的窗口

编辑:这可能在Windows XP之前的计算机上运行,因为在Vista/Win7中更改了在其自己的Windows会话中运行的服务


尽管如此,即使它在Win2000或WinXP中工作,也是一个糟糕的设计。

在Windows服务中,没有用户界面,没有登录用户,也没有活动窗口

Windows服务在系统启动(如果配置为自动)且没有用户登录时启动,因此尝试获取活动或
foregroundindow
没有意义

您应该修复您的设计并避免使用任何窗口,因为您无法想象或假设任何可用和活动的窗口

编辑:这可能在Windows XP之前的计算机上运行,因为在Vista/Win7中更改了在其自己的Windows会话中运行的服务


尽管如此,即使它在Win2000或WinXP中工作,也是一个糟糕的设计。

您可以尝试允许该服务与桌面交互。我不是100%确定这是否能解决您的问题,但值得一试


在“服务属性”窗口(服务->右键单击->属性)中,转到“登录”选项卡并选中“允许服务与桌面交互”

您可以尝试允许服务与桌面交互。我不是100%确定这是否能解决您的问题,但值得一试


在“服务属性”窗口(服务->右键单击->属性)中,转到“登录”选项卡并选中“允许服务与桌面交互”

因此,使用Windows服务,我不能访问active window的文本吗?Windows服务在后台运行,在桌面会话的上下文之外。它可能只是有可能做到这一点,但它有各种各样的安全问题和陷阱。你最好找到另一种方法——请看我的答案中的一条建议。正如David指出的那样,从Vista和2003 Server开始,你就不能再与桌面交互(或自己创建窗口)。这是特别禁止的,因为这些版本的windows。因此,使用windows服务,我不能访问active window的文本吗?windows服务在后台运行,在桌面会话的上下文之外。它可能只是有可能做到这一点,但它有各种各样的安全问题和陷阱。你最好找到另一种方法——请看我的答案中的一条建议。正如David指出的那样,从Vista和2003 Server开始,你就不能再与桌面交互(或自己创建窗口)。这是特别禁止的,因为这些版本的windows。我会使用进程id代替-任何原因你不能?我会使用进程id代替-任何原因你不能?很抱歉,我找不到这样的内容:从我在这里和其他地方读到的内容来看,它在Vista后不可用。尽管该选项似乎已启用(至少在我的Win7上)它似乎对新的几乎没有用处对不起,但我找不到类似的东西:从我在这里和其他地方读到的内容来看,它在Vista后不可用。尽管该选项似乎已启用(至少在我的Win7上),但它对新的几乎没有用处