在if语句中使用GetForegroundWindow结果来检查用户';的当前窗口
本文关键字:用户 窗口 检查 语句 if 结果 GetForegroundWindow | 更新日期: 2023-09-27 18:20:04
我需要检查用户当前选择了哪个窗口,如果他们选择了特定的程序,我需要做一些事情。
我以前没有使用过GetForegroundWindow函数,也找不到任何关于如何以这种方式使用它的信息。
我只需要一个if来比较当前窗口,看看它是否是一个特定的程序。然而,GetForegroundWindow函数似乎不会返回字符串或int。所以主要是我不知道如何找出我想与之比较的程序窗口的值。
我目前有获得当前窗口的代码:
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
IntPtr selectedWindow = GetForegroundWindow();
我需要能够按照以下理想方式应用它:
If (selectedWindow!="SpecificProgram")
{
<Do this stuff>
}
我希望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;
}
然后我可以做:
if (GetActiveWindowTitle()=="Name of Window")
{
DoStuff.jpg
}
它有一些代码,但它可以工作:
#region Retrieve list of windows
[DllImport("user32")]
private static extern int GetWindowLongA(IntPtr hWnd, int index);
[DllImport("USER32.DLL")]
private static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount);
[DllImport("USER32.DLL")]
private static extern bool EnumWindows(EnumWindowsProc enumFunc, int lParam);
[DllImport("user32.dll")]
private static extern IntPtr GetForegroundWindow();
private const int GWL_STYLE = -16;
private const ulong WS_VISIBLE = 0x10000000L;
private const ulong WS_BORDER = 0x00800000L;
private const ulong TARGETWINDOW = WS_BORDER | WS_VISIBLE;
internal class Window
{
public string Title;
public IntPtr Handle;
public override string ToString()
{
return Title;
}
}
private List<Window> windows;
private void GetWindows()
{
windows = new List<Window>();
EnumWindows(Callback, 0);
}
private bool Callback(IntPtr hwnd, int lParam)
{
if (this.Handle != hwnd && (GetWindowLongA(hwnd, GWL_STYLE) & TARGETWINDOW) == TARGETWINDOW)
{
StringBuilder sb = new StringBuilder(100);
GetWindowText(hwnd, sb, sb.Capacity);
Window t = new Window();
t.Handle = hwnd;
t.Title = sb.ToString();
windows.Add(t);
}
return true; //continue enumeration
}
#endregion
并检查用户窗口:
IntPtr selectedWindow = GetForegroundWindow();
GetWindows();
for (i = 0; i < windows.Count; i++)
{
if(selectedWindow == windows[i].Handle && windows[i].Title == "Program Title X")
{
//Do stuff
break;
}
}
阀门