Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.76/67: Рейтинг темы: голосов - 67, средняя оценка - 4.76
3 / 3 / 0
Регистрация: 10.07.2009
Сообщений: 101
1

Получить список открытых окон программ

28.01.2011, 19:44. Показов 12021. Ответов 12
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Собсно сабж.

Задача: получить список всех окон, и через SprPos прогнать каждое на наличие слова (hack к примеру).
Далее по имени окна вычислить PID и выгрузить процесс <-- это не проблема

Сделать цикл для проверки в принципе тоже не составило труда, но работает только в случае, если я сам, вручную, забиваю список окон, что не есть приемлемо.

Поскольку я новичёк, работа с EnumChildWindows и прочими EnumDesktopWindows мне пока не даётся.

Основной задачей является поиск запущенных читов, ака хаков на компьютере пользователя. Искать соответственно необходимо несколько слов, которые я храню в Memo (юзер его не видит). Храню в Memo т.к. хотел обойтись без массивов, из-за того, что программа с сервера периодически обновляет список искомых слов => меняется кол-во элементов.

Прошу помочь мне со списком этих чёртовых окон, замучился уже ужОс как. Ни гугл ни яндекс толком ничего мне не помогли найти.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
28.01.2011, 19:44
Ответы с готовыми решениями:

Список всех открытых окон в Windows
Как вывести в ListBox список всех открытых окон в Windows? Вот этот код выводит все процессы. Как...

Как получить список открытых окон?
А как получить список открытых окон????(В listBox)(заранее спасибо)

Как получить список открытых окон?
Всем привет!:senor: Мне нужно получить список открытых окон на данный момент в системе. Как это...

Как получить список открытых окон?
На windows я нашел это: Как на linux? Добавлено через 29 минут я получил список открытых...

12
LK
Заблокирован
28.01.2011, 23:04 2
не дается ему ...
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
BOOL EnumWindowsProc(HWND hWnd, long lParam)
{
  wchar_t Buff[255], NameOfClass[255]; // char - для ВСВ6
  GetWindowText(hWnd, Buff, 254);
  GetClassName(hWnd, NameOfClass, 254);  // clasa
  Form1->ListBox1->Items->Add(AnsiString(Buff) + " ("+AnsiString(NameOfClass) + ")" );
  return TRUE;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
  Form1->ListBox1->Clear();
  EnumWindows((WNDENUMPROC)EnumWindowsProc, 0);
}
2
3 / 3 / 0
Регистрация: 10.07.2009
Сообщений: 101
29.01.2011, 01:56  [ТС] 3
Спасибо большое!

Слегка подправил, убрал вывод имён классов, соответственно появившихся пустых строк и убрал вывод каких-то системных значений, типа Default IME и MSCTFIME UI.

Ещё такой вопрос: я использую цикл for, совершая его столько раз, сколько строк в листбоксе со списком окон, после чего очищаю всё, снова получаю список окон, проверяю и так далее.
Как вы думаете стоит оставить так, или такой метод может сильно загрузить компьютер?
0
LK
Заблокирован
29.01.2011, 02:04 4
для чего терзать листбокс ? изначально заносите нужные строки в StringList
C++
1
2
TStringList *list = new StringList;
list->Add(AnsiString(Buff) + " ("+AnsiString(NameOfClass) + ")" );
, делайте, что нужно, оставшиеся после обработки строки из StringList заносите в листбокс, и не забудьте при разрушенни формы
C++
1
2
delete list;
list = NULL;
Добавлено через 2 минуты
я использую цикл for, совершая его столько раз,
- звучит странно, но подозреваю, что вы имеете ввиду итерации.
C++
1
for (int i=0; i <= list->Count-1; i++) {...}
0
3 / 3 / 0
Регистрация: 10.07.2009
Сообщений: 101
29.01.2011, 04:29  [ТС] 5
Ну я просто не так выразился... маловато терминов знаю просто))

В плане терзания - почему терзаю?) Во-первых это её работа такая, а во-вторых я убираю лишние строки до ввода в листбокс. Та и помню преподаватель в пример написал программу, которая шифровала текст, так там каждая строка в мемо за цикл изменялась n раз, где n - 6-и значный ключ шифрования <- вот это терзание)

Ещё такой вопрос: в цикле for работает ещё один for внутри которого уже if. Как я писал, каждое значение из списка окон проверяется на наличие текста, из списка "запрещённых" слов, таким образом у меня получается:

C++
1
2
3
4
5
6
7
8
9
10
//получил список в listbox
//сработал таймер:
for
{
     for 
        {
         if (StrPos(...)) {...}
         }
}
//очистил всё
Возможна ли такая реализация? Вот, что я имел в виду, когда спрашивал про нагрузку))
0
LK
Заблокирован
29.01.2011, 05:06 6
сложно сказать - нет конкретного кода, если у вас что-то типа
C++
1
2
3
for (int i = 0; i <= 100; i++) {
  for (i = 10; i <= 90; i++) { ... }
}
- то смысла нет , если
C++
1
2
3
for (int i = 0; i <= 100; i++) {
  for (int j = 10; j <= 90; j++) { ... }
}
- то может и есть

Добавлено через 4 минуты
попалось на глаза
необходимо несколько слов, которые я храню в Memo (юзер его не видит)
- это криво - храните в массиве, или в StringList

Добавлено через 2 минуты
так там каждая строка в мемо за цикл изменялась n раз, где n - 6-и значный ключ шифрования <- вот это терзание)
- если для наглядности - то да - чтобы все видели, как меняется строка , а так - то это дело интимное
0
3 / 3 / 0
Регистрация: 10.07.2009
Сообщений: 101
29.01.2011, 05:13  [ТС] 7
Нет ну я же не настолько новичок, что бы при помощи одной и той же переменной совершать разных 2 цикла)))
К слову в PHP я это всё написал за 10 минут (без окон правда, там получал списки файлов и файлов в подкатегориях), но хоть и php си-подобный язык - я на си пока что очень плохо пишу, и многие ответы, советы и решения приходится искать в интернете.

Что касается хранения - сейчас я покамес храню в ListBox-е, только для того, что бы видеть своими глазами что и с чем сравнивается, а если программа словила - пишет в мемо что словила и откуда.
Плюс ко всему - строки берутся из зашифрованного файла. Пока пишу - необходимо отладить всё, соответственно необходимо видеть расшифровала программа текст или нет.

Ещё такой вопрос: TcpServer может получить IP адрес от TcpClient? Без Indy (рановато мне), и прочих заморочек, типа сервиса WhoIs?
0
LK
Заблокирован
29.01.2011, 05:31 8
попалось совершенно случайно http://abitur.bsuir.by/m/12_116608_1_52046.pdf что-то там есть и про WhoIs
1
2 / 2 / 0
Регистрация: 23.03.2011
Сообщений: 23
21.09.2012, 01:22 9
Цитата Сообщение от LK Посмотреть сообщение
BOOL EnumWindowsProc(HWND hWnd, long lParam)
{
* wchar_t Buff[255], NameOfClass[255]; // char - для ВСВ6
* GetWindowText(hWnd, Buff, 254);
* GetClassName(hWnd, NameOfClass, 254); *// clasa
* Form1->ListBox1->Items->Add(AnsiString(Buff) + " ("+AnsiString(NameOfClass) + ")" );
* return TRUE;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
* Form1->ListBox1->Clear();
* EnumWindows((WNDENUMPROC)EnumWindowsProc, 0);
}
В Builder 2009 выдает ошибки:
[BCC32 Error] Unit1.cpp(21): E2034 Cannot convert 'wchar_t *' to 'char *'
[BCC32 Error] Unit1.cpp(21): E2342 Type mismatch in parameter 'lpString' (wanted 'char *', got 'wchar_t *')
[BCC32 Error] Unit1.cpp(22): E2034 Cannot convert 'wchar_t *' to 'char *'
[BCC32 Error] Unit1.cpp(22): E2342 Type mismatch in parameter 'lpClassName' (wanted 'char *', got 'wchar_t *')
Подскажите, пожалуйста, в чем дело и как с этим бороться?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32991 / 21297 / 8180
Регистрация: 22.10.2011
Сообщений: 36,592
Записей в блоге: 8
21.09.2012, 02:36 10
Цитата Сообщение от hwarang Посмотреть сообщение
в чем дело
В ANSI-приложении. Переключись на Юникод (Project -> Options -> _TCHAR maps to -> wchar_t) и все соберется.
0
2 / 2 / 0
Регистрация: 23.03.2011
Сообщений: 23
21.09.2012, 08:15 11
Цитата Сообщение от UI Посмотреть сообщение
В ANSI-приложении. Переключись на Юникод (Project -> Options -> _TCHAR maps to -> wchar_t) и все соберется.
Все равно не собралось:
[BCC32 Error] Unit1.cpp(19): E2188 Expression syntax
[BCC32 Error] Unit1.cpp(20): E2451 Undefined symbol 'Buff'
[BCC32 Error] Unit1.cpp(20): E2062 Invalid indirection
[BCC32 Error] Unit1.cpp(21): E2451 Undefined symbol 'NameOfClass'
[BCC32 Error] Unit1.cpp(21): E2062 Invalid indirection
[BCC32 Error] Unit1.cpp(23): E2188 Expression syntax
[BCC32 Warning] Unit1.cpp(24): W8070 Function should return a value
[BCC32 Error] Unit1.cpp(28): E2109 Not an allowed type
[BCC32 Error] Unit1.cpp(29): E2062 Invalid indirection

Если без *
Код
[CODE]BOOL EnumWindowsProc(HWND hWnd, long lParam)
{
 wchar_t Buff[255], NameOfClass[255]; // char - для ВСВ6
 GetWindowText(hWnd, Buff, 254);
 GetClassName(hWnd, NameOfClass, 254); *// clasa
 Form1->ListBox1->Items->Add(AnsiString(Buff) + " ("+AnsiString(NameOfClass) + ")" );
 return TRUE;
}
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
 Form1->ListBox1->Clear();
 EnumWindows((WNDENUMPROC)EnumWindowsProc, 0);
}
//---------------------------------------------------------------------------
[/CODE]
получаю ошибку
[BCC32 Error] Unit1.cpp(22): E2062 Invalid indirection
?
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
32991 / 21297 / 8180
Регистрация: 22.10.2011
Сообщений: 36,592
Записей в блоге: 8
21.09.2012, 10:16 12
А ты все лишние звездочки убрать не пробовал? В строке №5 приведенного фрагмента, перед комментариями, ничего не замечаешь?
1
2 / 2 / 0
Регистрация: 23.03.2011
Сообщений: 23
22.09.2012, 01:15 13
Цитата Сообщение от Oskaria Посмотреть сообщение
Слегка подправил, убрал вывод имён классов, соответственно появившихся пустых строк и убрал вывод каких-то системных значений, типа Default IME и MSCTFIME UI.
Не подскажите, каким образом реализовали? Т.к. для меня строки типа
C++
1
2
3
4
(TApplication)
 (tooltips_class32)
 (tooltips_class32)
 (tooltips_class32)
никакой пользы не имеют, а только отвлекают и ничего не означают. Хотелось бы в ListBox получить только перечень открытых окон (в моем случае в формате Word).
0
22.09.2012, 01:15
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.09.2012, 01:15
Помогаю со студенческими работами здесь

Список открытых окон
Добрый вечер! Собираюсь писать менеджер окон, Qt предоставляет возможность увидеть все открытые...

Список открытых в XWindow окон
Всем привет:) Требуется написать программу, примитивную панель задач -- должна выводить список...

Как получить названия всех открытых окон?
Здравствуйте! У меня такая проблема нужно взять список названий и handle всех открытых окон (т.е. и...

Можно ли в цикле получить все titles открытых окон?
Мне нужно среди открытых в броузере окон провести поиск окна с определенным title. Возможно ли это?...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru