C# GetForegroundWindow()
возвращает тот же результат для нескольких окон, EnumWindows
на самом деле не возвращает это окно вообще. У каждого процесса действительно есть свой уровень.C# GetForegroundWindow() возвращает тот же результат для нескольких окон, EnumWindows на самом деле не возвращает это # вообще
Я также прошел через обе функции GetWindowThreadProcessId()
и перечислил через них GetChildWindows()
, но все же они не возвращают то же окно, что и GetForegroundWindow()
.
Как правильно начать с GetForegroundWindow()
и превратить его в то, что вы извлекли из надлежащего EnumWindows
?
Goal: GetForegroundWindow
+ правильно перечислить нужные правильные ручки верхнего уровня (все вкладки в хром, ваши проектные формы), но без необходимости просеивать через беспорядок GetAllWindows()
приносит вам. Благодарю.
private ArrayList GetAllWindows()
{
var windowHandles = new ArrayList();
EnumedWindow callBackPtr = GetWindowHandle;
EnumWindows(callBackPtr, windowHandles);
foreach (IntPtr windowHandle in windowHandles.ToArray())
{
EnumChildWindows(windowHandle, callBackPtr, windowHandles);
}
return windowHandles;
}
private delegate bool EnumedWindow(IntPtr handleWindow, ArrayList handles);
[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool EnumWindows(EnumedWindow lpEnumFunc, ArrayList lParam);
[DllImport("user32")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool EnumChildWindows(IntPtr window, EnumedWindow callback, ArrayList lParam);
List<IntPtr> ids = new List<IntPtr>();
private bool GetWindowHandle(IntPtr windowHandle, ArrayList windowHandles)
{
windowHandles.Add(windowHandle);
listBox1.Items.Add(windowHandle);
//ids.Add(GetWindowThreadProcessId(windowHandle, IntPtr.Zero));
return true;
}
Вы имеете в виду, что результат из 'EnumWindows' не содержит окна, возвращаемого из' GetForegroundWindow'? – Default
не совсем .. он получает лучшие результаты, но не отдельные результаты. – ploxtic
Кто-нибудь дал это? – ploxtic