ОБНОВЛЕНИЕ Нашли грубый и неэлегичный метод, но он работает!
Сохраните это как paint.bat
где-нибудь в PATH, где это будет найдено всеми пользователями, такими как C: \ Windows:
@start /b "Paint" "c:\Program Files\Paint.NET\PaintDotNet.exe" %2
Сохраните это как replace_mspaint_with_paintdotnet.reg
и объедините его с реестром, дважды щелкнув по нему с помощью проводника Windows (требуются права администратора):
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\mspaint.exe]
"Debugger"="paint.bat"
Теперь с помощью контекстного меню «Правка» на любом из обычных типов файлов изображений будет использоваться PaintDotNet вместо MS Paint.
Прекратите читать сейчас, если вы не любите мелкие детали.
Между утилитами, перечисленными в обоих ответах @ Psycogeek, я разочарованно приблизился к полному решению, но недостаточно близко. Я выкладываю частичное лекарство здесь на тот случай, если кто-то другой может предоставить недостающую часть.
На вкладке autoruns
Image Hijacks показаны программы, которые претендуют на то, чтобы быть их эквивалентами MS, популярными примерами использования этого метода являются Notepad2, заменяющий Notepad, и Process Explorer, заменяющий диспетчер задач.
Если дважды щелкнуть один из угонщиков, скажем, notepad2, откроется соответствующая запись в Regedit. Я экспортировал этот ключ на диск, а затем изменил записи блокнота на записи paindotnet.
Я слил этот измененный файл .reg, обновил автозапуск и, конечно же, там есть новая запись mspaint.
В этот момент все вызовы, которые раньше выполнялись в mspaint, теперь перенаправляются в PaintDotNet.exe, ура! например:
- Пуск> Выполнить> mspaint
mspaint
в командной оболочке
- Выберите файл foobar.jpg в проводнике Windows и используйте контекстное меню « Изменить».
C:\Windows\system32\mspaint.exe
отовсюду
К сожалению, при каждом вызове Paintdotnet сообщает, что тип изображения не распознается и не может быть открыт. :( :(
Некоторое тестирование в командной строке показывает, что я получаю ту же ошибку, передавая пустые кавычки в PdN.
C:\> "C:\Program Files\Paint.NET\PaintDotNet.exe" " "
Поэтому я думаю, что по какой-то причине путь к целевому файлу искажается до того, как PdN его увидит. Я не смог выяснить, как увидеть, что на самом деле получает PdN, и, следовательно, возможно, придумать последнее средство.
Вот replace_mspaint_with_paintdotnet.reg
, что заменяет mspaint.exe на PdN и повторяет ошибку выше:
Windows Registry Editor Version 5.00
[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Image File Execution Options\mspaint.exe]
"Debugger"="\"C:\\Program Files\\Paint.NET\\PaintDotNet.exe\""
Используйте эту отладку paint.bat
для захвата командной строки, используемой для запуска командного файла в %TEMP%
:
@echo %* > "%temp%\%~nx0.txt"
@start /b "Paint" "c:\Program Files\Paint.NET\PaintDotNet.exe" %2
Добавление строки наподобие notepad %*
показывает, что ошибка неопознанного изображения заключается в том, что в первом методе PdN пытается загрузить фактический файл c: \ windows \ system32 \ mspaint.exe в качестве изображения и никогда не видит никаких других параметров. По причинам, которые я не понимаю, использование %2
вместо обычного %1
в пакетном файле работает, но не тогда, когда PdN вызывается напрямую.
Уф! Это было сложно. Будут оценены не глупые решения, которые обходят необходимость в пакетном файле. :)