Как мы можем получить дескриптор окна, у которого нет названия? Есть ли способ перечислить все окна на рабочем столе и фильтровать окно, в котором нет заголовка (в моем случае есть только один) и получить его дескриптор .. или указав другие атрибуты, такие как окно, которое имеет специальная кнопка или ListBox и т.д. ...Получить ручку окна, которое не имеет названия .. (C#)
ответ
Это следует сделать это:
...
using System.Runtime.InteropServices;
using System.Diagnostics;
...
public class foo()
{
...
[DllImport ("user32")]
internal static extern int GetWindowText (int hWnd, String text, int nMaxCount);
[DllImport ("user32.dll")]
public static extern int GetWindowTextLength (int hWnd);
[DllImport ("user32.dll")]
public static extern int FindWindow (String text, String class_name);
[DllImport ("user32.dll")]
public static extern int FindWindowEx (int parent, int start, String class_name);
[DllImport ("user32.dll")]
public static extern int GetWindow (int parent, uint cmd);
public List<int> FindTitlelessWindows()
{
List<int> titleless = new List<int>();
Process [] procs = Process.GetProcesses();
IntPtr hWnd;
foreach (Process proc in procs)
{
hWnd = proc.MainWindowHandle;
if (hWnd != IntPtr.Zero)
{
TraverseHierarchy (hWnd.ToInt32(), 0, titleless);
}
}
foreach (int i in titleless)
{
System.Console.WriteLine (i);
}
return titleless;
}
public void TraverseHierarchy (int parent, int child, List<int> titleless)
{
String text = "";
GetWindowText (parent, text, GetWindowTextLength (parent));
if (String.IsNullOrEmpty (text))
{
titleless.Add (parent);
}
TraverseChildern (parent, titleless);
TraversePeers (parent, child, titleless);
}
public void TraverseChildern(int handle, List<int> titleless)
{
// First traverse child windows
const uint GW_CHILD = 0x05;
int child = GetWindow (handle, GW_CHILD);
if (0 != child)
{
TraverseHierarchy (child, 0, titleless);
}
}
public void TraversePeers(int parent, int start, List<int> titleless)
{
// Next traverse peers
int peer = FindWindowEx(parent, start, "");
if (0 != peer)
{
TraverseHierarchy (parent, peer, titleless);
}
}
}
Проще, если верхних окон достаточно, но также проверяет, является ли это окно частью конкретной программы, например. ваш: 'foreach (Process proc in procs) { hWnd = proc.MainWindowHandle; если (HWND = IntPtr.Zero && proc.MainWindowTitle == "" && proc.ProcessName.StartsWith ("мое имя процесса")!) { titleless.Add (hWnd.ToInt32()); } } ' – kjyv
Что-то, как это должно работать, не тестировалось
[DllImport("user32", CharSet = CharSet.Auto, SetLastError = true)]
internal static extern int GetWindowText(IntPtr hWnd, [Out, MarshalAs(UnmanagedType.LPTStr)] StringBuilder lpString, int nMaxCount);
[DllImport("user32.dll", SetLastError = true, CharSet = CharSet.Auto)]
public static extern int GetWindowTextLength(IntPtr hWnd);
....
Process[] procs = Process.GetProcesses();
IntPtr hWnd;
foreach(Process proc in procs)
{
hWnd = proc.MainWindowHandle;
if (hWnd != IntPtr.Zero)
{
int length = GetWindowTextLength(hWnd);
StringBuilder sb = new StringBuilder(length + 1);
GetWindowText(hWnd, sb, length);
if (String.IsNullOrEmpty(sb.ToString())
{
// we have a window with no title!
}
}
}
Это будет только поиск окон верхнего уровня без заголовка. Вам все равно нужно пройти все дочерние окна и сверстники. –
Вы предполагаете, что OP хочет включить дочерние окна (возможно, нет). OTOH (как вы подразумеваете) не каждое окно верхнего уровня является MainWindow процесса ... –
http://msdn.microsoft.com/en-us/library/ms633558(VS.85).aspx
WindowFromPoint возвращает дескриптор, или нуль, если окно не находится под курсором. Может ли это быть использовано или вы пытаетесь автоматизировать процесс?
Посмотрите на функцию EnumChildWindows.
Я думаю, что если вы передадите эту функцию в указатель главного окна (например, рабочий стол), вы сможете получить список всех окон и их дочерних окон.
В сочетании с FindWindow должно быть возможно получить дескриптор в нужное вам окно, как только вы найдете ожидаемый дочерний элемент управления.
Here вы можете найти библиотеку, которая будет обрабатывать файлы API Windows в управляемом коде.
Скачайте dll и ссылайтесь на него в своем проекте, и оттуда очень легко до получить любую информацию о любом желаемом окне;
void ForAllSystemWindows()
{
foreach (SystemWindow window in SystemWindow.AllToplevelWindows)
{
if (window.Title == string.Empty)
{
//Found window without title
//Get window handle
IntPtr windowhandle = window.HWnd;
//Do other stuff ..
}
}
}
- 1. получить ручку окна
- 2. Получить ручку окна с не полностью известным названием. (C#)
- 3. Получить дескриптор окна, которое не имеет имя
- 4. CLI/C++ Как получить ручку окна?
- 5. Получить ручку окна в PyGI
- 6. Как получить ручку окна свернутого окна
- 7. Получить ручку окна вкладки Chrome изнутри расширения?
- 8. Получить оконную ручку окна под курсором
- 9. Как найти ручку неизвестного окна в C++?
- 10. Python Selenium получить текущую ручку окна
- 11. Как я могу получить ручку обзора окна в visual C++
- 12. C# EasyHook, изменение названия окна
- 13. Созданные окна не имеют названия
- 14. Дайте ручку окна (Родной), как закрыть окна с помощью C#?
- 15. получить ручку от процесса
- 16. Удаление названия диалогового окна
- 17. FindWindowEx не удалось найти ручку окна
- 18. Найти ручку окна кнопки ленты
- 19. Перетащите ручку окна для Tkinter?
- 20. Как получить ручку окна другого приложения, сведенную к системному лотку?
- 21. Не удается получить ручку процесса
- 22. Buildoutputs не имеет названия сборки
- 23. Как получить ручку управления TextBox внутри окна в окне 10
- 24. C# пытается получить событие, которое срабатывает при закрытии другого окна
- 25. Добавить цвет фона названия, которое уже имеет фоновое изображение
- 26. Восстановить ручку окна и нажать кнопку программно
- 27. Создание окна, которое не имеет кнопки закрытия в Qt
- 28. Как получить ручку окна в COM-однопоточную квартиру (STA)?
- 29. Получить ручку окна из панели задач с помощью мыши pos
- 30. Как получить ручку окна (int) от расширения хром?
Все, что мешает вам передать пустую строку в FindWindow? – Joey
Sidenote: Вы не можете предположить, что ваше окно является единственным, у которого нет названия. –