Форум программистов, компьютерный форум, киберфорум
Наши страницы
C++: WinAPI
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 176
1

Что мне делать после прочтения книги?

19.07.2015, 20:48. Просмотров 959. Ответов 8
Метки нет (Все метки)

Прошу прощения за тупой вопрос, но вот какая ситуация. Прочитал я Рихтера и Пецольда, понял "в общем" принципиальную схему работы винды. Как работать с GUI, ввод/вывод, потоки, процессы, задания, короче теперь я сильно умный... Дошло дело до написания кода и тут понеслась.
Когда читал книги то попутно немного врубался в основные функции, методы вызова и логику построения решения задачи. То есть у меня в голове сейчас дАфига всего, абсолютно не связанного между собой.
Чего я хочу?
Вот я все знаю. Хочу создать прогу... Который будет запускать 10 окон калькулятора и 10 окон блокнота. Создал!
CreateProcess()... и все как по книге, я для себя разложил по полочкам - чтоб создать процесс:
Винда управляет процесс через объекты ядра процесс и поток(в целом). Значит я создаю структуры проц инфо(и все необходимые... просто чтоб тут меньше букв было) Логика ясна, как по книге, код работает как часики.

А вот наступает момент и я хочу чтоб у меня окно калькулятора номер 1 называлось не "Калькулятор", а "Бульбулятор" к примеру. И я понимаю что мне надо изменить некий параметр в структуре который отвечает за название окон в структуре ядра интересующего меня, вызываемого процесса. Но это не по книге!
Как мне узнать Айди процесса и потом добраться до нужного параметра вызванного процесса чтоб поменять его?
Понятно что надо пошерстить MSDN но я даже не знаю что искать в нем.
Вот конкретно сейчас вопрос.

Как закрыть открытое окно калькулятора?
Должна быть цепочка последовательных действий

1)Получить Описатель(хендл) окна.
2)Вызвать TerminateProcess. Два раза, чтоб таблица описателей пользователя обнулилась и окно закрылось.
Все. А как это сделать, где блин искать решения? Может есть удобные функции или библиотеки о которых я не знаю, тогда бы это решило много вопросов.

Надеюсь меня кто-то поймет(кроме бота), поскольку я и сам еще не знаю что ищу, наверное.
Спасибо!
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.07.2015, 20:48
Ответы с готовыми решениями:

Прикладное программирование, что бы мне почитать
Добрый день. Хотел спросить совета, поп поводу того, чтобы мне почитать....

Как мне отловить что мыша над кнопкой
Вот в чем вопрос я создаю окно функция DialogBox(); на нем всякие chechbox...

Что делать с handle'ом bmp файла?
Подскажите пожалуйста, каким образом можно работать с bmp файлом после того как...

Как организовать код записи БД в файл и потом его прочтения из файла?
Как можно организовать код записи БД в файл и потом его прочтения из файла?...

Неисправность после ремонта. Что мне делать?
Приветствую, комрады. Телефон LG G2 D802, куплен в мегафоне в декабре прошлого...

8
VTsaregorodtsev
533 / 487 / 68
Регистрация: 19.02.2010
Сообщений: 1,786
19.07.2015, 22:24 2
Цитата Сообщение от MMt Посмотреть сообщение
А вот наступает момент и я хочу чтоб у меня окно калькулятора номер 1 называлось не "Калькулятор", а "Бульбулятор" к примеру. И я понимаю что мне надо изменить некий параметр в структуре который отвечает за название окон в структуре ядра интересующего меня, вызываемого процесса.
Обычный SetWindowText() всё сделает - ему надо только хэндл нужного окна (или контрола) сунуть
0
Dragokas
Эксперт WindowsАвтор FAQ
17015 / 7072 / 856
Регистрация: 25.12.2011
Сообщений: 10,891
Записей в блоге: 16
20.07.2015, 15:45 3
Лучший ответ Сообщение было отмечено MMt как решение

Решение

Цитата Сообщение от MMt Посмотреть сообщение
1)Получить Описатель(хендл) окна.
Если процесс создавали Вы и заголовок либо класс окна заранее известен то:
FindWindow с любым из этих параметров. Получаете описатель окна.
Вызываете GetWindowThreadProcessID. Получаете PID процесса, которому принадлежит окно.
Сравниваете его с PID из структуры PROCESS_INFORMATION, которую Вы использовали когда создавали процесс.

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

Если заголовок/класс неизвестен, то можно перечислить все окна через EnumWindows.

Цитата Сообщение от MMt Посмотреть сообщение
2)Вызвать TerminateProcess.
Более мягко - через SendMessage с параметром WM_CLOSE.
2
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 176
20.07.2015, 21:31  [ТС] 4
спасибо. мыслю уловил. что за чем вызывать и как оно между собой связано становиться ясно.
0
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 176
21.07.2015, 22:41  [ТС] 5
Я правильно понимаю? Вот вызвал я через CreateProcess другую прогу. Значит она уже сама по себе и есть другой процесс! Собственно чтоб закрыть этот "другой" процесс, мне надо добраться всеми честными и не честными путями до струкрути описывающей этот процесс - processinfo pi. А там и получу pi.hProcess. Значит имея этот pi.hProcess я в два счета закрою нужное мне окно.
0
Dragokas
Эксперт WindowsАвтор FAQ
17015 / 7072 / 856
Регистрация: 25.12.2011
Сообщений: 10,891
Записей в блоге: 16
22.07.2015, 12:52 6
О теории можно говорить часами.
Попробуйте сами. Почитайте описание CreateFile, изучите каждый аргумент, затем каждую структуру, на которую он указывает.
Посмотрите примеры, как это делают другие.
Создайте проект, попробуйте, пощупайте. Так все и поймете.
Цитата Сообщение от MMt Посмотреть сообщение
Значит имея этот pi.hProcess я в два счета закрою нужное мне окно.
Где-то используется хендл, где-то PID, читайте внимательно описание используемых Вами функций. Лучший источник - MSDN.
1
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 176
22.07.2015, 20:48  [ТС] 7
MSDN это просто вынос мозга, настолько неудобная структура....
0
Dragokas
Эксперт WindowsАвтор FAQ
17015 / 7072 / 856
Регистрация: 25.12.2011
Сообщений: 10,891
Записей в блоге: 16
23.07.2015, 12:29 8
MMt, при чем здесь структура? Забиваете в Google нужную функцию и сразу попадаете на страницу описания.
0
MMt
0 / 0 / 0
Регистрация: 29.04.2014
Сообщений: 176
23.07.2015, 23:07  [ТС] 9
Раздуплился с непонятными вопросами по ВиНапи. В виду недостатка опыта я просто путаюсь в типах данных и идентификаторах для процессов и окон в винде. Теперь стало понятно как оперировать к нужным мне процессам или участкам программы. По крайней мере я понимаю цепочку что и зачем искать.
Еще раз всем спасибо!
0
23.07.2015, 23:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.07.2015, 23:07

Что делать после книги Праты? Практика || Теория
Привет. Думаю у каждого здесь обывателя был идентичный вопрос. Вот прочитал я...

Что мне делать или что надо знать перед тем как начать изучение яз.программирования С/С++?
Я пока вообще не умею программировать.Сначала хотел с бейсика или паскаля.Но...

что мне делать?
Прошло чуть больше года и ноутбук греется. Раньше я не пользовался на ноутбуке...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru