Antonshka Опубликовано 26 сентября, 2021 Поделиться Опубликовано 26 сентября, 2021 Привет! Дочитываю книгу Щупака, по WinAPI. По словам самого автора - Спойлер На содержание книги повлияли: информация, почерпнутая автором из книг таких мэтров Windowsпрограмми рования как Чарльз Петцольд (Charles Petzold) [1], Джеффри Рихтер (Jeffrey Richter) [5] и Фень Юань (Feng Juan) [6]; Петцольд, насколько я видел, пишет о том же самом что и Щупак, правда часто в более краткой форме, Фень Юань, - пишет более подробно, но у него все про GDI. Потому, дочитав Щупака, я решил перейти уже к написанию своего собственного приложения. Писать я буду на чистом WinAPI. Для того чтобы закрепить материал, в первую очередь, и для того чтобы просто уметь это делать именно на нем. Но что потом? Так и писать GUI приложения на чистом WinAPI? На чем вы пишите GUI для своих приложений? Читал сегодня, что на чистом WinAPI, приложения и весят меньше, и работают быстрее. Что MFC неудобный, с точки зрения стиля (я его еще не изучал). Что Qt тоже имеет какие-то проблемы. Вообще в будущем есть намерение писать через DIrectX. Но если не через него, то через что? Ссылка на комментарий Поделиться на другие сайты Поделиться
youneuoy Опубликовано 26 сентября, 2021 Поделиться Опубликовано 26 сентября, 2021 (изменено) 40 минут назад, Antonshka сказал: На чем вы пишите GUI для своих приложений? первые попытки делать что-то, имеющее gui я начал с wpf(это c#) и с его формочками у меня всё время получались очень страшные интерфейсы. После этого я перешёл на c++ и попробовав разное пришёл к такому набору: простые приложения(где нужно одно окошко с кнопочками) пишу с использованием винапи, а для сложных использую вот эту штуку (позволяет очень быстро и относительно красиво делать как обычные менюшки, так и сложные таблицы, позволяет использовать opengl или directx и ещё всякие штуки, следовательно можно писать кроссплатформенные программы, поддерживает загрузку разных шрифтов и т.п. и т.п.). Как по мне это лучшие из возможных вариантов для человека, не очень разбирающегося в дизайне и прочих подобных вещах(кнопочки на формочках я действительно коряво делаю, без конструкторов формочек на мои программы можно смотреть без крови из глаз). Ну и вот пример - менюшка, стилизованная под игру medieval 2 total war(игра использует directX 9 и рисовать можно просто заинжектив dll-ку): Спойлер Изменено 26 сентября, 2021 пользователем youneuoy 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 27 сентября, 2021 Автор Поделиться Опубликовано 27 сентября, 2021 10 часов назад, youneuoy сказал: Ну и вот пример - менюшка, стилизованная под игру medieval 2 total war(игра использует directX 9 и рисовать можно просто заинжектив dll-ку): Скрыть контент Это рисуется в окне игры? Или в окне приложения которое использует для себя DirectX? imgui - интересная вещь. Слышал что у него недавно появилась поддержка DX12. Про WPF слышал что нет нормальной документации, но зато он рисует средствами DirectX. Но он к сожалению на c#, а я на с++, так что не мой вариант, пока что, по крайней мере. Ссылка на комментарий Поделиться на другие сайты Поделиться
LuBu Опубликовано 27 сентября, 2021 Поделиться Опубликовано 27 сентября, 2021 5 часов назад, Antonshka сказал: Это рисуется в окне игры? Или в окне приложения которое использует для себя DirectX? imgui - интересная вещь. Слышал что у него недавно появилась поддержка DX12. Про WPF слышал что нет нормальной документации, но зато он рисует средствами DirectX. Но он к сожалению на c#, а я на с++, так что не мой вариант, пока что, по крайней мере. MFC устарел уже давно Qt удобная, если надо быстро накидать менюшку и не сильно париться с этим. Но крупные проекты лучше не стоит, так своих проблем хватает. Выбор остается либо на WinAPI, сам пишу на нем, если что - то нужно. Ну и DirectX/OpenGL если нужно что - то красивое. WinAPI помойму тоже работает через DX, но так как это API винды. То на тяп ляп все сделанно. Итого: Пилишь простенькую программу - > QT Нужно что - то свое -> WinAPI Хочешь написать красивую программу или нарисовать что - то внутри игры -> DirectX/OpenGL 1 Ссылка на комментарий Поделиться на другие сайты Поделиться
youneuoy Опубликовано 27 сентября, 2021 Поделиться Опубликовано 27 сентября, 2021 (изменено) 6 часов назад, Antonshka сказал: Это рисуется в окне игры? Или в окне приложения которое использует для себя DirectX? на скриншоте рисование в окне игры. Нужно всего 3-4 функции хукнуть(я этого не делаю и использую загрузку своей библиотеки через враппер d3d9.dll, так антивирус не ругает за инжект). Кстати, imgui позволяет очень просто передавать свой контекст между несколькими .dll, очень удобно если систему плагинов делаешь. 6 часов назад, Antonshka сказал: Слышал что у него недавно появилась поддержка DX12 давно появилась. У imgui это называется бекэндами и они есть для чего угодно, в т.ч. для андроида и мака(и при необходимости новые писать довольно просто, погляди код в папке backends). Можно использовать sdl или allegro и не париться о всяких там directx. 6 часов назад, Antonshka сказал: Про WPF слышал что нет нормальной документации, но зато он рисует средствами DirectX. а зачем там документация? Это ведь конструктор форм, да ещё и для c#. И я его не рекомендовал, кстати - указал ведь, что у меня быстрее и красивее получается накидать менюшку прямо в коде при помощи imgui или winapi и я полностью на это перешёл. 6 часов назад, Antonshka сказал: Но он к сожалению на c# есть враппер imgui для c#. 1 час назад, LuBu сказал: WinAPI помойму тоже работает через DX, но так как это API винды. То на тяп ляп все сделанно. графика винапи не имеет сторонних зависимостей и именно этим она хороша. Изменено 27 сентября, 2021 пользователем youneuoy Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 27 сентября, 2021 Поделиться Опубликовано 27 сентября, 2021 1 час назад, youneuoy сказал: 2 часа назад, LuBu сказал: WinAPI помойму тоже работает через DX, но так как это API винды. То на тяп ляп все сделанно. графика винапи не имеет сторонних зависимостей и именно этим она хороша. А я например видела как из winApi вызывается функция отрисовки из directx Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 27 сентября, 2021 Поделиться Опубликовано 27 сентября, 2021 3 часа назад, LuBu сказал: Qt удобная, если надо быстро накидать менюшку и не сильно париться с этим. Но крупные проекты лучше не стоит, так своих проблем хватает. Ну чот откровенный бред. Весь KDE под линукс (и под винду, собственно, тоже) написан с использованием Qt, и это явно выходит за рамки "быстро накидать менюшку". И это уж точно крупный проект. Рекомендую впредь изучать матчасть, прежде чем позволять себе такие громкие высказывания. qBittorrent, кстати, тоже на Qt, и там тоже явно не "быстро накидали менюшку". 3 часа назад, LuBu сказал: WinAPI помойму тоже работает через DX, но так как это API винды Чего-чего??? (в оригинале была фотография девушки из рекламы школы иностранных языков в Бутово). Такого бреда я еще не слышал. 29 минут назад, imaginary сказал: А я например видела как из winApi вызывается функция отрисовки из directx Есть пример? Аж любопытно стало, как винапишная функция чтения файла, например, использует ДХ. Ссылка на комментарий Поделиться на другие сайты Поделиться
imaginary Опубликовано 27 сентября, 2021 Поделиться Опубликовано 27 сентября, 2021 2 минуты назад, imaginary сказал: А я например видела как из winApi вызывается функция отрисовки из directx Точнее наоборот 2 минуты назад, Xipho сказал: Есть пример? Аж любопытно стало, как винапишная функция чтения файла, например, использует ДХ. Наоборот было, я не то написала, по моему мы с тобой даже об этом говорили Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 27 сентября, 2021 Поделиться Опубликовано 27 сентября, 2021 19 минут назад, imaginary сказал: Наоборот было, я не то написала, по моему мы с тобой даже об этом говорили Наоборот - это я помню, да, обсуждали. Но чтобы винапи использовал дх - это что-то новенькое. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 27 сентября, 2021 Автор Поделиться Опубликовано 27 сентября, 2021 5 часов назад, youneuoy сказал: на скриншоте рисование в окне игры. Нужно всего 3-4 функции хукнуть(я этого не делаю и использую загрузку своей библиотеки через враппер d3d9.dll, так антивирус не ругает за инжект). А реально создать GUI на WinAPI в DLL которую инжектишь в игру? А то как сейчас я вижу, функции GUI на WinAPI часто требуют в качестве одного из своих параметров HINSTANCE приложения. Но у нас же не EXE, а DLL. Нельзя так сделать что-ли? А то я видел как @Xipho советовал кому-то недавно каким образом можно реализовать взаимодействие EXE трейнера с загруженной DLL. Помню советовал TCP что-ли. А так бы раз, и наше GUI находится уже в DLL, и следовательно все контролы получают прямой доступ к переменным, для опций читов, к примеру. Ссылка на комментарий Поделиться на другие сайты Поделиться
LuBu Опубликовано 27 сентября, 2021 Поделиться Опубликовано 27 сентября, 2021 @Xipho А через что тогда WinAPI рисует? Мы когда дескриптор получаем и начинаем рисовать, он же как - то связывается с видеокартой. Не напрямую ведь, а посредством чего - то... Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 27 сентября, 2021 Поделиться Опубликовано 27 сентября, 2021 2 часа назад, Antonshka сказал: А реально создать GUI на WinAPI в DLL которую инжектишь в игру? Слышком расплывчато. IMGUI так-то и есть GUI, и ты его можешь собрать в DLL, которую инжектишь в игру. Какой именно GUI ты имеешь в виду? Обычные виндовые окошки поверх игры? Да, можно. Красивые картинке на оверлее игры используя GDI - да, можно, но картинка будет нещадно мерцать. 2 часа назад, Antonshka сказал: А то как сейчас я вижу, функции GUI на WinAPI часто требуют в качестве одного из своих параметров HINSTANCE приложения. Но у нас же не EXE, а DLL. Ну так ты внедряешь DLL в адресное пространство игры, и там вполне себе можешь получить инстанс приложения. Проблемы не вижу от слова "совсем". 2 часа назад, Antonshka сказал: А то я видел как @Xipho советовал кому-то недавно каким образом можно реализовать взаимодействие EXE трейнера с загруженной DLL. Помню советовал TCP что-ли. Лучше не TCP, а named pipes 2 часа назад, LuBu сказал: Мы когда дескриптор получаем и начинаем рисовать, он же как - то связывается с видеокартой. Не напрямую ведь, а посредством чего - то Почитай книгу Фень Юаня "Программирование графики для Windows". Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 28 сентября, 2021 Автор Поделиться Опубликовано 28 сентября, 2021 14 часов назад, Xipho сказал: Слышком расплывчато. IMGUI так-то и есть GUI, и ты его можешь собрать в DLL, которую инжектишь в игру. Какой именно GUI ты имеешь в виду? Обычные виндовые окошки поверх игры? Да, можно. Красивые картинке на оверлее игры используя GDI - да, можно, но картинка будет нещадно мерцать. Имею ввиду создание отдельного окна, на котором будут разные стандартные контролы. Создание на WinAPI, но создание таким образом, чтобы код создания окна был в DLL, которая инжектится в игру, и чтобы не использовать TCP, named pipes, и подобные способы связи, а просто, напрямую, менять значения переменных, определенных в DLL. Ссылка на комментарий Поделиться на другие сайты Поделиться
Xipho Опубликовано 28 сентября, 2021 Поделиться Опубликовано 28 сентября, 2021 1 час назад, Antonshka сказал: Создание на WinAPI, но создание таким образом, чтобы код создания окна был в DLL, которая инжектится в игру Да пожалуйста, вполне можешь это сделать. Только не делай модальное окно, а то игра будет блокироваться во время появления такого окна. Я тебе больше скажу, ты можешь накидать так называемое диалоговое окно, и затолкать его в ресурсы длл-ки, а потом вполне себе спокойно при инжекте это окно отображать. Абсолютно никаких проблем. Ссылка на комментарий Поделиться на другие сайты Поделиться
Antonshka Опубликовано 28 сентября, 2021 Автор Поделиться Опубликовано 28 сентября, 2021 2 часа назад, Xipho сказал: Да пожалуйста, вполне можешь это сделать. Только не делай модальное окно, а то игра будет блокироваться во время появления такого окна. Я тебе больше скажу, ты можешь накидать так называемое диалоговое окно, и затолкать его в ресурсы длл-ки, а потом вполне себе спокойно при инжекте это окно отображать. Абсолютно никаких проблем. Понял, это хорошо. Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения