Задать вопрос
Ответы пользователя по тегу C++
  • Как получить позицию икноки на десктопе, если известен его file index?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Если надо именно через File ID, то надо просто получить список иконок рабочего стола в рантайме и найти в этом списке искомую вами иконку по её имени. Работа с позицией иконок в рантайме описана вот тут:
    https://stackoverflow.com/questions/58126669/where...
    Ответ написан
    Комментировать
  • Как настроить кросскомпиляцию Qt6 + TDLib под Windows на Arch Linux, если при сборке постоянно возникают ошибки?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Кросскомпиляция для винды под линуксом вполне возможна. Лет 20 назад это было не так уж и сложно, но сегодня объём и сложность всяких зависимостей в проектах и компиляторах выросли настолько, что это превратилось в длинный и очень весёлый квест с кучей подводных камней и даже айсбергов. Поэтому проще всего поставить виртуалку и уже в ней всё собирать сразу под целевой ОС. Собственно в вашем случае так и надо продолжить разбираться с проблемами, которые вы встретили при сборке под линуксом. На сайте TDLib есть подробная инструкция для сборки библиотеки. Что именно у вас не получилось сделать? Вы искали ответ на вашу проблему в гугле?
    Ответ написан
  • Как установить Shell Anything? Есть ли другие вариант для контекстного меню?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Как его установить подробно расписано в его же мануале. Что именно у вас не получилось?

    Подскажите пожалуйста, какие темы я должен изучить, чтобы уметь правильно скачивать репозитории и интегрировать их в существующий проект?

    Там же в мануале указана ссылка на подробнейшую инструкцию по добавлению пунктов в контекстное меню и даже с картинками. Что именно по этой инструкции у вас не получилось сделать?

    Мне нужно динамически изменять контекстное меню — добавлять и удалять в нём опции и подопции.

    Та же инструкция в мануале.

    Плюс может кто-то знает альтернативу ShellAnything? Мне нужно динамически изменять контекстное меню — добавлять и удалять в нём опции и подопции.

    Альтернативы есть в гугле. Вы хоть пытались искать?
    Ответ написан
    4 комментария
  • Можно ли написать проект C++/CLR Windows Form на MacOS?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Да, можно. Ставите VirtualBox или UTM App, ставиет виртуалку с виндой десятой или одиннадцатой, в ней студию 2022 и все остальные инструменты для разработки. Есть два варианта:
    • х86 винда - потери производительности примерно 90%, но в целом всё будет работать как на обычной винде, просто существенно медленнее
    • Arm винда - пишут, что встроенный в винду транслятор команд х86->Arm достаточно производительный и работает нормально, но я лично не тестировал и ничего конкретного сказать не могу, предполагаю, что теоретически возможны какие-то проблемы

    На маке в виртуалку студию не ставил, но в целом в виртуалке сама по себе студия работает прекрасно и даже на не самом топовом железе вполне юзабально работает. В целом же рекомендую всё же использовать х86 ПК для разработки под винду ну или арендовать виртуалку в облаке.
    Ответ написан
  • Как в windows 11 отобразить экран входа в систему на второй монитор?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Да, всё верно, запускать службу на экране входа. Только что попробовал двигать и менять положение окна логина - не поддаётся, к сожалению. А вот скрыть или свернуть/развернуть его вполне можно. Очевидно, что позиция и размер окна прибиты гвоздями к основному экрану и обновляются приложением логина в реальном времени. Так что тут остаётся только несколько вариантов:
    • Попробовать изменить настройки экрана на дублирование
    • Реализовать своё окно логина - с дублированием ввода в оригинальное или возможно через даже через Credential Provider (не щупал - как оно работает не знаю)
    • Попробовать хакнуть процесс логина через редактирование его памяти и вписать нужные значения в переменные позиции и размера окна - вот тут тоже может не сработать из-за ограничений безопасности

    Такую службу я уже как-то давно запилил: https://github.com/VoidVolker/Windows-logon-service - она умеет запускать любые приложения в любом количестве на экране входа. А вот пример приложения, которое её использует: https://github.com/VoidVolker/LockScreen - показывает обои на всех дополнительных экранах логина. Там же легко найдёте код для работы со списком экранов - можете спокойно использовать (только ссылку укажите на репозиторий). А если сделаете с открытым исходным кодом - вообще отлично будет. Только WPF не используйте - там жуткий маразм из-за DPI с размещением окон на нескольких мониторах. Лучше WinForms или С/С++/WinAPI на любом ЯП. Для ковыряния в окнах есть великолепнейшая утилита InqSoft Window Scanner (древний раритет, но сравнимых по функционалу аналогов нет).

    UPD: проверил возможность переключения основного экрана в сессии логона - работает! Итак, решение следующее:
    1. Качаем nircmd: https://www.nirsoft.net/utils/nircmd.html
      Команда для переключения монитора следующая: https://nircmd.nirsoft.net/setprimarydisplay.html
      ❯ ./nircmd.exe setprimarydisplay 1
      ❯ ./nircmd.exe setprimarydisplay 2
      ❯ ./nircmd.exe setprimarydisplay \\.\DISPLAY3

    2. Вариант 1: Пишем простейшее приложение, которое при старте переключает монитор на нужный через nircmd, а при получении команды остановки - переключает монитор обратно. Вот на счёт события остановки не уверен - т.к. у меня в сервисе используется стандартный Process.Kill() без ожидания, при этом ещё и сессия логона закрывается и отработает ли событие - не знаю, не проверял. Возможно, добавлю в сервис опцию для выполнения команды перед закрытием сессии - либо в контексте сессии логона либо от имени системы.
    3. Вариант 2: в конфиг логон сервиса просто пишем nircmd с командой переключения на нужный монитор (при отключении монитора логон может и сломаться - не проверял)
    4. Пользователю в автозапуск положить скрипт/команду для переключения монитора обратно. Если требуется - это будет проще, чем запускать приложение в закрывающейся сессии логона.
    Ответ написан
    Комментировать
  • Как написать свой фреймворк?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Точно так же как и любое другое ПО:
    1. Формулируете вашу задачу в виде какого-то текстового/графического описания
    2. Формулируете ТЗ с конкретными требованиями, ограничениями и всем прочим
    3. На основе ТЗ разрабатываете ЧТЗ (Частное ТЗ) со всеми полными деталями, описаниями всех действий, событий, взаимодействий и прочее
    4. Используя ЧТЗ подготавливаете проект - архитектура, инструменты, системы, подсистемы и прочее с полным описанием, декомпозированными элементами вниз до самых простых и прочее
    5. Берёте проект и по шагам его реализовываете
    6. Profit

    Это примерно - у каждого проекта свой путь. Есть ещё аналитика, исследования, тесты, планирование и куча других организационных и подготовительных действий. В разработке фреймворка принципиальных отличий от разработки любого другого ПО нет.
    Ответ написан
  • Отрисовка наложений в windows?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    можно ли сделать моё наложение частью окна

    Только со стороны механизма рендеринга окна. Если у этого окна есть свой кастомный рендер контента, конечно. Если это простое системное окно - то нельзя.
    Ответ написан
    Комментировать
  • По какому принципу работает метод Utils::GetRandomNumber в Lineage 2?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    • Открыть исходный код и посмотреть
    • При отсутствии исходного кода дизассемблировать и посмотреть

    В простейшем случае генерируемое число зависит от системного времени на момент вызова, пачки множителей/делителей и какой-то соли, сгенерированной заранее или в предыдущий сеанс/вызов. В чуть более сложном случае может дополнительно браться какой-то системный параметр типа серийного номера платы, диска, системы и т.п. В совсем сложных случаях используется встроенный в процессор/плату/отдельно подключённый генератор псевдо-случайных чисел с дополнительным применением множества математических и криптографических операций.
    Ответ написан
    2 комментария
  • Как повторить такую "отрисовку" в терминале на Linux?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Google -> bash color -> тысячи мануалов. Использовать поиск по назначению - не так уж и сложно, правда же?
    Ответ написан
    2 комментария
  • Почему эмуляция кликов мыши через SendInput блокируется после трёх срабатываний?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Неужели для работы такого достаточно простенького кода придется обращаться к драйверам?

    В играх - да, ибо там своя атмосфера с античитами и банхаммерами. Вам нужен драйвер пользовательского ввода в ядре ОС (ring0). А туда пускают только с подписью (ну или ломать систему). Ищите на форумах автоита - там вроде был такой. Альтернативный вариант - свой контроллёр в USB порт, прикидывающийся мышкой/клавиатурой и которым можно рулить через драйвер уже в пользовательском пространстве.
    Ответ написан
    1 комментарий
  • На чём создать прогу для обработки больших данных?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Лучше для чего именно? В общем случае - на том, что знаете или что интересно было бы изучить.
    Ответ написан
    2 комментария
  • Как автоматически ввести команду из одной программы в консоль другой программы?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Использовать перенаправление или проксирование стандартного ввода и стандартного вывода. RFTM:
    Ответ написан
    Комментировать
  • Возможно ли реализовать TCP на Delphi?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Ставьте виртуалку в VirtualBox и не парьтесь с импортом сишных заголовков в дельфи.
    Ответ написан
    3 комментария
  • Из-за чего программа C++ на amd работает быстрее чем на intel?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Из-за того, что процессоры от разных производителей обладают разной производительностью, внезапно, из-за отличий в архитектуре, командах, транзисторах, частотах, кэшах и во всём остальном. Сюрприз! А еще есть такие факторы как: кэши, оперативная память, дисковая подсистема, запущенные приложения, сервисы, разные ОС, разные чипсеты, разные биосы, да даже вентилятор на процессоре может влиять на производительность, из-за которого турбобуст какой-нибудь включится или выключится, и еще целый вагон других факторов.
    Ответ написан
    5 комментариев
  • Какие технологии надо для создания мессенджера?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Сетевой стек, любой ЯП и любая библиотека для графического интерфейса. Да, можете использовать C#. Если хочется - можно и С++ вместе с Qt. И то и то даже в мобилки умеет - так что часть кодовой базы получится сделать кроссплатформенной. Для отображения интерфейса есть куча либ: под дотнет есть MAUI кроссплатформенный и WPF под винду. Для браузерного мессенджера надо API на WebSocket и любой фронт - хоть Vue/Rect, хоть простой UIKit.
    Ответ написан
    Комментировать
  • Рекомендации по созданию приложения на C++?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Подойдёт ли Windows Forms? Мне ведь потом на мобилку порт делать.

    Формы - это .Net и только для винды. Причем это уже очень старое легаси, которое имеет смысл использовать только для поддержки Windows XP - а у нас тут уже поддержка 10 заканчивается так-то. А .Net - это прежде всего C#. И вот на C# есть более новый WPF и кроссплатформенный MAUI. Для мобилки все равно придется переписывать с нуля или искать какие-то варианты решений, которые могут C# в мобилки.

    Или на мобилку лучше не на C++ делать? Что посоветуете?

    Не самое лучшее решение - там родная платформа Java и Swift. Qt умеет: https://doc.qt.io/qt-6/mobiledevelopment.html - но как оно там в результате будет работать сложно сказать и можно ожидать каких-нибудь слабопрогнозируемых глюков и сложностей. Спасибо Adamos.

    Может кому-то известны нюансы при постройке такой программы?

    Известны и т.к. вы нуб - для вас весь ваш процесс разработки будет нюансом и тут уже попахивает как минимум долгосрочной регулярной консультацией или менторство.

    В общем, у вас несколько вариантов. Вариант раз: если хотите именно плюсы - то вам следует использовать Qt и писать код сразу с учетом дальнейших доработок для работы в Linux, Mac и на мобилках - не знаю, как и на сколько хорошо Qt умеет в мобилки, но могут быть какие-то сложности/баги. Ну, в кроссплатформе от этого не уйти - придётся мириться и местами писать разный код для разных платформ.

    Вариант два: если хотите сразу писать приложение сразу для всех платформ с единой кодовой базой и минимальными услиями - то можно использовать веб-платформы типа NWJS, Cordova и прочие браузерные платформы. Минус - приложение будет тяжёлым и ощутимо более медленным, чем нормальное нативное.

    В целом, могу рекомендовать для начала просто сделать на плюсах с Qt хоть какое-то приложение для винды, далее внести доработки для работы в линуксе и маке. При наличии/доступности мака - можно сразу и для мака делать. Линукс прекрасно ставится и работает в VirtualBox и прочих виртуализаторах. Далее сделать поддержку сетевых фич, БД и прочего, а уже только потом переключаться на разработку для мобилок. При этом, вам надо будет организовать свой план разработки от меньшего к большему. Т.е., сначала самые простые функции делаете, а уже потом к ним добавляете что-то более сложное по мере изучения.
    Ответ написан
    5 комментариев
  • Кириллица в c++. Что с ней не так?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Как распознать кракозябры:

    Как распознаете - сможете понять из какой кодировку в какую у вас происходит трансформация и настроить всё в единой кодировке или добавить нужные опции где надо.
    Ответ написан
    Комментировать
  • Управление фокусом окна на Python/C++?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Ответ написан
    Комментировать
  • Как сделать эмуляцию клика мыши на python без задействования основного курсора?

    VoidVolker
    @VoidVolker Куратор тега Windows
    Dark side eye. А у нас печеньки! А у вас?
    Но вот нужно именно без взаимодействием с основным курсором.

    Только в виртуальной машине.
    Ответ написан
  • Как написать игровой движок?

    VoidVolker
    @VoidVolker
    Dark side eye. А у нас печеньки! А у вас?
    Точно так же, как и любое другое приложение:
    1. Написать базовое ТЗ
    2. Подготовить список требований и ограничений
    3. Проработать детально ТЗ (ЧТЗ) с подробным описанием всех деталей
    4. Разработать верхний уровень архитектуры решения - основные модули, системы и их взаимодействие
    5. Разработать следующий уровень архитектуры вниз и вглубь - повторить до получения самых простых элементов
    6. Подготовить пошаговый план разработки проекта
    7. Реализовать проект согласно плану
    Ответ написан
    1 комментарий