forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   С# (http://forum.boolean.name/forumdisplay.php?f=128)
-   -   Пару вопросов на счет окон. (http://forum.boolean.name/showthread.php?t=15562)

riot 07.11.2013 01:33

Ответ: Пару вопросов на счет окон.
 
Пытался разобраться без вашей помощи но впал в отчаянье. Перечислить все окна процесса мы можем. Можем и найти и вывести окно по имени класса. Но как перечислить найденные окна по имени класса, если их больше чем одно?

pax 07.11.2013 07:04

Ответ: Пару вопросов на счет окон.
 
PHP код:

public static List<IntPtrFindWindowsByClassInProcess(string windowClassNamestring 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;
        } 


riot 07.11.2013 09:10

Ответ: Пару вопросов на счет окон.
 
Спасибо большое. Скажу честно не сразу удалось правильно переписать код под изменённую функцию ))

riot 07.11.2013 09:53

Ответ: Пару вопросов на счет окон.
 
Код:

            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("Не запущен");
            }

Стал вопрос о присвоении каждому дочернему окну своего указателя

pax 07.11.2013 13:01

Ответ: Пару вопросов на счет окон.
 
Что за указателя?

riot 07.11.2013 14:15

Ответ: Пару вопросов на счет окон.
 
Ну чтобы к каждому окну из hwndchat обращаться отдельно

riot 07.11.2013 14:19

Ответ: Пару вопросов на счет окон.
 
Ну а указатель это номер который получает каждое окно при запуске от системы случайно.

Ну вроде как то так...

pax 07.11.2013 14:42

Ответ: Пару вопросов на счет окон.
 
Ну так hwndchat и есть хэндл окна, обращайся к нему через него.

riot 07.11.2013 19:07

Ответ: Пару вопросов на счет окон.
 
Код:

                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 записывается хэндл последнего найденного окна, а как быть с другими?

pax 07.11.2013 19:18

Ответ: Пару вопросов на счет окон.
 
Создай поле ( http://msdn.microsoft.com/ru-ru/library/ms173118.aspx ) в своем классе например список (List<string>) и в него сохраняй.

riot 07.11.2013 19:34

Ответ: Пару вопросов на счет окон.
 
Спасибо


Часовой пояс GMT +4, время: 19:07.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot