Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 15.12.2015, 10:42   #1
CloudStrife
Новичок
Джуниор
 
Регистрация: 15.12.2015
Сообщений: 24
Вопрос Получение окна заголовка на новой строке

Мне нужна ваша помощь
Как вывести название нового заголовка активного окна в текстбоксе, на новой строке! ( скрин)
Вот кусок кода:
Код:
[DllImport("user32.dll")]
        static extern IntPtr GetForegroundWindow();
 
        [DllImport("user32.dll")]
        static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);
 
        private string GetActiveWindowTitle()
        {
            IntPtr  handle = IntPtr.Zero;
            StringBuilder title = new StringBuilder(256);
            handle = GetForegroundWindow();
            if (handle != IntPtr.Zero)
            {
                if (GetWindowText(handle,title, 256) > 0)
                    return title.ToString();
            }
            return "unknown";
        }
На таймере использую вывод:

Код:
textBox1.Text = textBox1.Text + Environment.NewLine + Environment.NewLine + "[---- " 
        + GetActiveWindowTitle() + " ----]" + Environment.NewLine + Environment.NewLine;
P.S: Проблема в том что, что нужно сделать вывод активного окна только если какое либо окно открыто, и вывести в textBox.Text
Изображения
Тип файла: png Screenshot_1.png (34.0 Кб, 82 просмотров)
Вложения
Тип файла: rar WindowsFormsApplication3.rar (315.6 Кб, 6 просмотров)

Последний раз редактировалось Stilet; 15.12.2015 в 10:51.
CloudStrife вне форума Ответить с цитированием
Старый 15.12.2015, 10:53   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
только если какое либо окно открыто
Это как? Разве во время работы винды существуют закрытые окна?
Может быть ты хотел сказать "Только если какая-то программа, которая похожа на обычную, и не относится к окнам самого виндовса"?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 15.12.2015, 10:55   #3
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Цитата:
Как вывести название нового заголовка
Не очень понял в чем состоит задача, но скорее всего вам нужны хуки (hook).
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 15.12.2015, 10:57   #4
CloudStrife
Новичок
Джуниор
 
Регистрация: 15.12.2015
Сообщений: 24
По умолчанию

Ну возможно я не так выразился, в примере видно, что когда жмякаешь открываешь какое либо окно, то заголовок этого окна показывает в текстбоксе, ( проблема в том что выводится очень много строк с этими окнами, мне же нужно сделать чтобы просто при открытые какого либо окна, заголовок показывался в текстбоксе!
На пример:

Открыли блокнот
в Текстбоксе показывает:
[--- Блокнот ---]

открыли браузер
в текстбоксе след строка показывает:
[---- GoogleChrome ---]
и так далее!


Ну вообщем нужно сделать чтобы при открытые какого либо окна выводился его заголовок в текстбокс!
CloudStrife вне форума Ответить с цитированием
Старый 15.12.2015, 10:58   #5
CloudStrife
Новичок
Джуниор
 
Регистрация: 15.12.2015
Сообщений: 24
По умолчанию

Alex11223 Я уже использую всё что нужно, мне просто нужно сделать вывод заголовка нового окна
CloudStrife вне форума Ответить с цитированием
Старый 15.12.2015, 11:06   #6
CloudStrife
Новичок
Джуниор
 
Регистрация: 15.12.2015
Сообщений: 24
По умолчанию

Давайте я попробую формально обозначить точку зрения того что мне нужно, я скинул проект, при запуске вы увидите что при открытие какого либо (окна - файла - браузера ) в текстбоксе появляются заголовки, но они стоят на таймере, поэтому вывод идет постоянно, но мне нужно единожды открыть какого либо окно и вывести его заголовок в текстбокс! ( Думаю осветлил мысль )
CloudStrife вне форума Ответить с цитированием
Старый 15.12.2015, 11:16   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Ну так с помощью хуков и можно ловить когда другое окно активируется
https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx
https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx
https://msdn.microsoft.com/en-us/lib...=vs.85%29.aspx (на C# хук на CBTProc вроде сложно сделать, скорее всего нужна DLL на С++)
Более простой пример на C#
http://stackoverflow.com/questions/4...ithout-polling

Ну или как вариант можно просто записывать последнее название в переменную и выводить/перезаписывать только когда не совпадает.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 15.12.2015 в 11:25.
Alex11223 вне форума Ответить с цитированием
Старый 15.12.2015, 11:30   #8
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а вы пишите например в HashSet, а потом его уже выводите в бокс.(HashSet неповзолит дублей)

Код:
HashSet<string> windows = new HashSet<string>();
в таймере же:
Код:
windows.Add(GetActiveWindowTitle());
var arr=new string[windows.Count];
windows.CopyTo(arr);
textBox1.Lines=arr;
ну или банально очищайте бокс.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.

Последний раз редактировалось Пепел Феникса; 15.12.2015 в 11:35.
Пепел Феникса вне форума Ответить с цитированием
Старый 15.12.2015, 11:32   #9
CloudStrife
Новичок
Джуниор
 
Регистрация: 15.12.2015
Сообщений: 24
По умолчанию

У меня уже стоит хук!
Если в коде на таймере изменить так:
Код:
 textBox1.Text = "[---- " + GetActiveWindowTitle() + " ----]" + Environment.NewLine + Environment.NewLine;
То всё захваченные заголовки окон, отображаются на одной строчке!
Всё что мне нужно это сделать их каждой строчкой?
Вы понимаете? ^_^
CloudStrife вне форума Ответить с цитированием
Старый 15.12.2015, 11:33   #10
CloudStrife
Новичок
Джуниор
 
Регистрация: 15.12.2015
Сообщений: 24
По умолчанию

Пепел Феникса В листбоксе? ( он стоит на таймере, там явно будет много строк!
CloudStrife вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получение GET заголовка от браузера The SCS PHP 5 27.06.2012 13:23
Получение Заголовка предка объекта KORT Общие вопросы Delphi 2 22.03.2012 15:41
Получение заголовка окна, запущенного от имени другого пользователя на сервере терминалов ArtyAtWork Общие вопросы Delphi 3 06.10.2011 09:24
Изменение заголовка окна в Delphi T(h)rasher Помощь студентам 7 05.10.2011 06:58
Область заголовка окна HunterMan Win Api 3 14.04.2008 15:37