|
С# Средство разработки на платформе .Net |
07.11.2013, 01:33
|
#16
|
AnyKey`щик
Регистрация: 01.11.2013
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Пару вопросов на счет окон.
Пытался разобраться без вашей помощи но впал в отчаянье. Перечислить все окна процесса мы можем. Можем и найти и вывести окно по имени класса. Но как перечислить найденные окна по имени класса, если их больше чем одно?
|
(Offline)
|
|
07.11.2013, 07:04
|
#17
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Пару вопросов на счет окон.
public static List<IntPtr> FindWindowsByClassInProcess(string windowClassName, string processName) { var windows = new List<IntPtr>(); var processWindowHandles = EnumerateProcessWindowHandles( Process.GetProcessesByName("explorer").First().Id);
foreach (var handle in processWindowHandles) { if (GetWindowClassName(handle).StartsWith(windowClassName)) { windows.Add(handle); } }
return windows; }
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
07.11.2013, 09:10
|
#18
|
AnyKey`щик
Регистрация: 01.11.2013
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Пару вопросов на счет окон.
Спасибо большое. Скажу честно не сразу удалось правильно переписать код под изменённую функцию ))
|
(Offline)
|
|
07.11.2013, 09:53
|
#19
|
AnyKey`щик
Регистрация: 01.11.2013
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Пару вопросов на счет окон.
try
{
var windows = new List<IntPtr>();
foreach (var hwnd in EnumerateProcessWindowHandles(Process.GetProcessesByName("processXXX").First().Id))
{
if (GetWindowClassName(hwnd).StartsWith("XXXClass"))
{
windows.Add(hwnd);
Console.WriteLine("Finded Name: " + GetWindowName(hwnd));
Console.WriteLine("Finded Class: " + GetWindowClassName(hwnd));
Console.WriteLine(hwnd);
Console.WriteLine();
IntPtr hwndchat = FindWindowEx(hwnd, IntPtr.Zero, "XXXchildClass", "");
if (hwndchat != IntPtr.Zero)
{
Console.WriteLine("Finded child Name: " + GetWindowName(hwndchat));
Console.WriteLine("Finded child Class: " + GetWindowClassName(hwndchat));
Console.WriteLine(hwndchat);
Console.WriteLine();
Console.WriteLine();
}
else
{
Console.WriteLine("Не найдено дочернего окна");
}
}
}
}
catch
{
Console.WriteLine("Не запущен");
}
Стал вопрос о присвоении каждому дочернему окну своего указателя
|
(Offline)
|
|
07.11.2013, 13:01
|
#20
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Пару вопросов на счет окон.
Что за указателя?
|
(Offline)
|
|
07.11.2013, 14:15
|
#21
|
AnyKey`щик
Регистрация: 01.11.2013
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Пару вопросов на счет окон.
Ну чтобы к каждому окну из hwndchat обращаться отдельно
|
(Offline)
|
|
07.11.2013, 14:19
|
#22
|
AnyKey`щик
Регистрация: 01.11.2013
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Пару вопросов на счет окон.
Ну а указатель это номер который получает каждое окно при запуске от системы случайно.
Ну вроде как то так...
|
(Offline)
|
|
07.11.2013, 14:42
|
#23
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Пару вопросов на счет окон.
Ну так hwndchat и есть хэндл окна, обращайся к нему через него.
|
(Offline)
|
|
07.11.2013, 19:07
|
#24
|
AnyKey`щик
Регистрация: 01.11.2013
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Пару вопросов на счет окон.
foreach (var hwnd in EnumerateProcessWindowHandles(Process.GetProcessesByName("Procces").First().Id))
{
if (GetWindowClassName(hwnd).StartsWith("Class"))
{
windows.Add(hwnd);
Console.WriteLine("Finded Name: " + GetWindowName(hwnd));
Console.WriteLine("Finded Class: " + GetWindowClassName(hwnd));
Console.WriteLine(hwnd);
Console.WriteLine();
IntPtr hwndchat = FindWindowEx(hwnd, IntPtr.Zero, "PokerStarsChatClass", "");
if (hwndchat != IntPtr.Zero)
{
Console.WriteLine("Finded child Name: " + GetWindowName(hwndchat));
Console.WriteLine("Finded child Class: " + GetWindowClassName(hwndchat));
Console.WriteLine(hwndchat);
Console.WriteLine();
Console.WriteLine();
string stol1 = Convert.ToString(hwndchat);
Console.WriteLine(stol1);
}
else
{
Console.WriteLine("Не найдено дочернего окна");
}
}
}
В переменную stol1 записывается хэндл последнего найденного окна, а как быть с другими?
|
(Offline)
|
|
07.11.2013, 19:18
|
#25
|
Unity/C# кодер
Регистрация: 03.10.2005
Адрес: Россия, Рязань
Сообщений: 7,568
Написано 3,006 полезных сообщений (для 5,323 пользователей)
|
Ответ: Пару вопросов на счет окон.
Создай поле ( http://msdn.microsoft.com/ru-ru/library/ms173118.aspx ) в своем классе например список (List<string>) и в него сохраняй.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
07.11.2013, 19:34
|
#26
|
AnyKey`щик
Регистрация: 01.11.2013
Сообщений: 14
Написано 0 полезных сообщений (для 0 пользователей)
|
Ответ: Пару вопросов на счет окон.
Спасибо
|
(Offline)
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 12:07.
|