Форум программистов, компьютерный форум, киберфорум
.NET
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
61 / 66 / 1
Регистрация: 23.05.2015
Сообщений: 349
Записей в блоге: 52
1

Как в закрытую программу передаётся информация о файле, открываемом через контекстное меню или перетаскиванием

09.08.2020, 22:17. Просмотров 2329. Ответов 11

Всем вам знаком такой способ открывания файлов в Проводнике Windows, как перетаскивание его значка на значок подходящей программы (см. скриншоты).

1. Например, хватаем мышкой текстовый файл
Как в закрытую программу передаётся информация о файле, открываемом через контекстное меню или перетаскиванием


2. Перетаскиваем его на ярлык программы Wordpad
Как в закрытую программу передаётся информация о файле, открываемом через контекстное меню или перетаскиванием


3. Открывается Wordpad и показывает содержимое файла, который был на него перетащен
Как в закрытую программу передаётся информация о файле, открываемом через контекстное меню или перетаскиванием

Внимание, 2 вопроса.
Как Проводник передаёт информацию об открываемом файле в открываемую программу?
Как открываемая программа узнаёт, какой именно файл в ней хотят открыть?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.08.2020, 22:17
Ответы с готовыми решениями:

Запретить вставку текста в TEdit из буфера обмена через Ctrl+V или через контекстное меню
Добрый день! Есть такой вопрос: Что нужно сделать, чтобы в TEdit не было возможности вставить...

Поиск в Яндексе или в Google через контекстное меню Windows
Кто знает какие нибудь программы для вин 10, чтобы внедрить в любое контекстное меню пункты для...

Передать путь файла в программу через контекстное меню
Добрый день. Добавил контекстное меню в Windows, которая запускает определенный exe'шник....

Как создать контекстное меню. Например нажимая на richTextBox правой кнопкой мыши, мне бы предоставлялось контекстное меню
Как создать контекстное меню. Например нажимая на richTextBox правой кнопкой мыши, мне бы...

11
4441 / 3129 / 1340
Регистрация: 09.05.2015
Сообщений: 7,680
10.08.2020, 01:12 2
Через аргументы командной строки.
1
1296 / 758 / 284
Регистрация: 17.05.2015
Сообщений: 2,906
10.08.2020, 15:25 3
mozgotron, если перетаскиванием, то в событии DragEventArgs лежат пути до файлов
1
61 / 66 / 1
Регистрация: 23.05.2015
Сообщений: 349
Записей в блоге: 52
10.08.2020, 15:46  [ТС] 4
Someone007, Рядовой, понятно.

Значит, если открывать файл через контекстное меню "Открыть с помощью", то Проводник Windows формирует командную строку, в которую включаются 2 аргумента:
1) полный путь файла, который был выделен перед открытием контекстного меню;
2) полный путь к исполняемому файлу, который был выбран в меню выбора программы.

Например, формируется такая командная строка:
Код
C:\Program Files\windows nt\accessories>wordpad.exe D:\Temp\CEPxChamber1.tmp
В этой командной строке 2 аргумента:
1) C:\Program Files\windows nt\accessories>wordpad.exe
2) D:\Temp\CEPxChamber1.tmp

Если я правильно понимаю, при перетаскивании значка файла CEPxChamber1.tmp на значок файла wordpad.exe формируется точно такая же командная строка. И оба аргумента извлекаются из события DragEventArgs программы Windows Explorer и передаются программе WordPad.
0
Эксперт .NET
7476 / 4980 / 1182
Регистрация: 25.05.2015
Сообщений: 15,218
Записей в блоге: 14
10.08.2020, 15:56 5
mozgotron, всё не правильно.

1.
Цитата Сообщение от Someone007 Посмотреть сообщение
Через аргументы командной строки.
Формируется путь к программе и строка аргументов.
Программа запускается с этими аргументами.

Если она первая копия, то ... очевидно.

Если не первая, то одним из множества видов межпроцессной коммуникации передаёт данные первой копии. А сама закрывается.
Так можно передать данные в уже открытую программу.

2.
Цитата Сообщение от Рядовой Посмотреть сообщение
если перетаскиванием, то в событии DragEventArgs лежат пути до файлов
Ранее запущенная программа в своём окне ловит сообщение с этим событием. Вытаскивает имена файлов. Читает их.

А это
Цитата Сообщение от mozgotron Посмотреть сообщение
программы Windows Explorer и передаются программе WordPad.
к первому варианту.
1
61 / 66 / 1
Регистрация: 23.05.2015
Сообщений: 349
Записей в блоге: 52
10.08.2020, 15:56  [ТС] 6
Первый аргумент (C:\Program Files\windows nt\accessories>wordpad.exe) использует сам Windows Explorer для открытия WordPad.
Второй аргумент (D:\Temp\CEPxChamber1.tmp) использует программа WordPad.

Результат: мы видим окно программы WordPad и внутри ричтекстбокса видим содержимое файла CEPxChamber1.tmp.
0
Эксперт .NET
7476 / 4980 / 1182
Регистрация: 25.05.2015
Сообщений: 15,218
Записей в блоге: 14
10.08.2020, 16:00 7
mozgotron, здесь да.
1
61 / 66 / 1
Регистрация: 23.05.2015
Сообщений: 349
Записей в блоге: 52
10.08.2020, 16:03  [ТС] 8
Цитата Сообщение от Rius Посмотреть сообщение
Ранее запущенная программа в своём окне ловит сообщение с этим событием. Вытаскивает имена файлов. Читает их.
Вот это действие мне и предстоит реализовать в своей программе! С одной только разницей, что моя программа должна отлавливать имя папки, в которой находится открываемый файл. Но это уже полбеды.
0
Эксперт .NET
7476 / 4980 / 1182
Регистрация: 25.05.2015
Сообщений: 15,218
Записей в блоге: 14
10.08.2020, 16:08 9
Цитата Сообщение от mozgotron Посмотреть сообщение
Вот это действие мне и предстоит реализовать в своей программе!
А вы уверены? Вопрос-то в теме был поставлен другой.
0
61 / 66 / 1
Регистрация: 23.05.2015
Сообщений: 349
Записей в блоге: 52
10.08.2020, 16:11  [ТС] 10
Rius, Рядовой, Someone007, и если не путаю, то принимать аргумент с именем файла должна процедура
Код
Sub Main(переменная для аргумента)
Добавлено через 57 секунд
Rius, конечно уверен. Для этого же я и задал вопрос.
0
Эксперт .NET
7476 / 4980 / 1182
Регистрация: 25.05.2015
Сообщений: 15,218
Записей в блоге: 14
10.08.2020, 16:25 11
Цитата Сообщение от mozgotron Посмотреть сообщение
и если не путаю, то принимать аргумент с именем файла должна процедура
Вы всё путаете.
Цитата Сообщение от mozgotron Посмотреть сообщение
конечно уверен. Для этого же я и задал вопрос.
А я вот уверен, что вы не знаете, что именно вам нужно.
Вопрос в теме был про другой способ. И Main() тоже про другой.

Добавлено через 4 минуты
Простой пример от MS про командную строку и Main():
Command-Line Arguments (C# Programming Guide)

Есть более сложная обработка ключей, опциональных и обязательных параметров...

Добавлено через 1 минуту
Цитата Сообщение от mozgotron Посмотреть сообщение
Вот это действие мне и предстоит реализовать в своей программе!
А это как бы называется Drag'n'Drop. Другой способ!
1
1296 / 758 / 284
Регистрация: 17.05.2015
Сообщений: 2,906
10.08.2020, 17:30 12
Цитата Сообщение от mozgotron Посмотреть сообщение
Sub Main(переменная для аргумента)
Это в бейсике она саб, у шарпистов это void
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.08.2020, 17:30

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Как включить контекстное меню, или создать его
добрый день. возможно не по теме, подскажите как включить контекстное меню, или создать его...

Как получить список выбранных файлов через контекстное меню?
Приветствую! Я в реестре создал свой пункт меню с командой @="MyTest.exe %1" Если я выбираю один...

Как добавить свою программу в контекстное меню проводника?
Как добавить свою программу в контекстное меню проводника?

Как получить путь к файлу, который открывается через контекстное меню
Как получить путь к файлу, который открывается через контексное меню?

Как добавить в стандартное контекстное меню Windows свою программу?
Доброго времени суток! У меня такой вопрос - как добавить в стандартное контекстное меню Windows...

Php не обрабатывает скрипт в открываемом файле
Здарова всем. Описание вопроса: 1. Есть 2 файла, в 1 лежит скрипт, открывающий 2 файл и выводящий...


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

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

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