我需要检查用户当前选择的窗口,并且如果他们选择了特定程序则执行操作.
我之前没有使用过GetForegroundWindow函数,也找不到有关如何以这种方式使用它的任何信息.
我只需要比较当前窗口,看看它是否是一个特定的程序.但是,GetForegroundWindow函数似乎不会返回字符串或int.所以主要是我不知道如何找出我要比较的程序窗口的值.
我目前有代码来获取当前窗口:
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
IntPtr selectedWindow = GetForegroundWindow();
Run Code Online (Sandbox Code Playgroud)
我需要能够如下理想地应用它:
If (selectedWindow!="SpecificProgram")
{
<Do this stuff>
}
Run Code Online (Sandbox Code Playgroud)
我希望GetForegroundWindow值/对象对每个程序都是唯一的,并且不会以某种方式运行,每个特定的程序/窗口每次都有不同的值.
我也将此作为Windows窗体的一部分,但我怀疑它很重要.
-谢谢你的帮助
编辑:这种方式有效,并使用当前窗口的图块,这使得它非常适合检查窗口是否正确:
[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
private string GetActiveWindowTitle()
{
const int nChars = 256;
StringBuilder Buff = new StringBuilder(nChars);
IntPtr handle = GetForegroundWindow();
if (GetWindowText(handle, Buff, nChars) > 0)
{
return Buff.ToString();
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
然后我可以这样做:
if (GetActiveWindowTitle()=="Name of Window")
{
DoStuff.jpg
}
Run Code Online (Sandbox Code Playgroud) 我有一个小应用程序,它起到警报系统的作用,我使用一个表单作为警报出现在屏幕上,因为它们更通用和消息框.由于警报的性质,我需要它出现在所有当前连接的监视器的中心.我现在只在主监视器上显示它.
我在这里看了这两个帖子:
但我真的无法理解它,我已经查看了Screens.AllScreens属性,但仍然感觉没有更好的理解如何告诉表单哪个监视器出现,甚至更多地让它出现在多个,因为我假设我需要通过AllScreens数组进行循环.
我还需要关闭其中一个按钮时钟的所有表格,但是现在我只想在所有显示器上显示它们.
很抱歉提出一个我觉得大多数人都认为已经回答的问题.