pybll Ответов: 0

Каков способ редактирования запущенного приложения в windows?


Я хочу иметь возможность редактировать текст (строки) программ, которые я запускаю в windows. У меня есть программа для этого. Но это не работает для некоторых программ. Это работает следующим образом:

прежде чем редактировать
после редактирования


Когда я запускаю это программное обеспечение, а затем нажимаю alt + щелкните правой кнопкой мыши любой текст на любом windows (например, этот установщик), он меняется вот так.

Интересно, как я могу разработать такую программу? Я знаю C#. Я студент-программист. Так что я не новичок в программировании. Мне нужна помощь, чтобы составить дорожную карту этой работы. Что вы об этом думаете? Какой язык я должен использовать? И каковы же основы этого вопроса? Каждая идея/комментарий ценны для меня.

Заранее спасибо.

Что я уже пробовал:

Я искал, как работает программа смены памяти.

Richard MacCutchan

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

pybll

Спасибо за ваш комментарий. Но я хочу изменить строки только для текущего сеанса, только на одно мгновение. не для исходного кода.

Richard MacCutchan

Таким образом, вам нужно будет использовать FindWindow функция для поиска оконных ручек элементов управления и использования SetWindowText функция, чтобы изменить его. Но, как я уже упоминал, это не гарантирует, что он сохранит текст, который вы туда поместили.

pybll

Можно ли получить доступ к окнам других приложений с помощью этих функций?

Richard MacCutchan

Да, используя P/Invoke, см. pinvoke.net: findwindow (user32)[^].

Stefan_Lang

Нет никакого гарантированного способа достичь этого без изменения фактического исходного кода программы.

Есть по крайней мере два препятствия для вашей идеи:
1. в то время как Microsoft определяет, как должны обрабатываться такие ресурсы, как строки, существуют методы более низкого уровня для достижения того же самого, и программы могут использовать любой из этих других методов. Программа может даже хранить и перерисовывать все как изображение, а не хранить его в виде строки!
2. память, которую использует программа, имеет очень ограниченный доступ к другим программам. Это вопрос безопасности: если какая-либо программа может просто изменить память другой программы, она может делать все виды вредоносных вещей!
3. в то время как 30 лет назад адреса памяти соответствовали физическим адресам, в настоящее время только менеджер памяти знает истинный физический адрес. Поэтому, даже если вы найдете физический адрес, который вы можете изменить, чтобы изменить текущую программу любым способом, он не будет работать при следующем запуске этой программы, потому что тогда все адреса будут разными! Такие методы могут работать на некоторых встроенных системах, которые не используют адреса виртуальной памяти, но не на современных операционных системах.

pybll

Спасибо за ваш комментарий. Но я хочу изменить строки только для текущего сеанса, только на одно мгновение. не для исходного кода.

Dave Kreskowiak

Не имеет значения, что это "только для текущей сессии и только на один раз". Это чрезвычайно трудно сделать. Существует несколько различных способов хранения строк в памяти приложениями. То, что может работать для одной строки в одном приложении, может не работать для другой строки в другом приложении.

Метод, который вы находите, работает для одного приложения, может не работать для другого.

FindWindow и SetWindowText не изменят строку данных в произвольном адресе в памяти. Он только изменит отображаемую строку в элементе управления, и это даже не гарантировано.

0 Ответов