我实际上正在开发一个小屏幕监控,如果弹出一个新的可见窗口,它会发送一封电子邮件。我现在的问题是这部分:
Console.Write(" GeneralSettings.aItemsToAdd_Windows[i].Name: " + GeneralSettings.aItemsToAdd_Windows[i].Name + "\n");
Console.Write(" Marshal.StringToHGlobalAuto(GeneralSettings.aItemsToAdd_Windows[i].Name): " + Marshal.StringToHGlobalAuto(GeneralSettings.aItemsToAdd_Windows[i].Name) + "\n");
Console.Write("IsWindow(Marshal.StringToHGlobalAuto(GeneralSettings.aItemsToAdd_Windows[i].Name)): " + IsWindow(Marshal.StringToHGlobalAuto(GeneralSettings.aItemsToAdd_Windows[i].Name)) + "\n\n");
if (IsWindow(Marshal.StringToHGlobalAuto(GeneralSettings.aItemsToAdd_Windows[i].Name)))
{
listView_Windows.Items.Add(GeneralSettings.aItemsToAdd_Windows[i].Name);
}
else
{
aDeleteWindows.Add(new myAVP {
Name = "",
Handle = i
});
}
我的 Console.Writes 的输出如下:
GeneralSettings.aItemsToAdd_Windows[i].Name: notepad++
Marshal.StringToHGlobalAuto(GeneralSettings.aItemsToAdd_Windows[i].Name): 84883296
IsWindow(Marshal.StringToHGlobalAuto(GeneralSettings.aItemsToAdd_Windows[i].Name)): False
我的程序失败的原因是因为它总是通过“else”部分运行,因为 IsWindow 总是错误的。那么有人可以帮助我吗,我如何检查称为(在这种情况下)notepad++ 的进程是否仍然是可见和打开的窗口?除了进程名称,我还得到了进程 ID。我的研究结果是我必须使用带有进程名称的 Marshal.StringToHGlobalAuto 函数来获取 ptr hwnd。这是正确的,还是我的错误在哪里?
marshal 函数的返回值(在这种情况下): 84883296 并没有告诉我任何我不明白为什么 IsWindow 总是失败的原因。
到目前为止,感谢您的建议。