Доброе время суток. Суть вот в чем. Есть некоторое приложение, которое должно встраиваться в контекстное меню проводника Windows. Т.е. пользователь кликает правой кнопкой по файлу, выбирает некий пункт меню, запускается приложение и делает что-то с этим файлом.
Сначала я добавил пункт в контекстное меню через реестр:| Код | HKEY_CLASSES_ROOT/*/shell/ |
Здесь я добавил нужный мне пункт меню: | Код | HKEY_CLASSES_ROOT/*/shell/Do Something HKEY_CLASSES_ROOT/*/shell/Do Something/command |
и в последнем прописал путь к приложению: для того, чтобы оно могло получать файл как входной аргумент.
Далее пишется программа. Функция Main в Program.cs выглядит так: | Код | [STAThread] static void Main( string[] args ) { Application.EnableVisualStyles(); Application.SetCompatibleTextRenderingDefault( false );
if ( args.Length != 0 ) Application.Run( new Form1( args ) ); else Application.Run( new Form1() ); } |
А затем перехватываю аргумент в конструкторе Form1() и, собственно, если файл один, то все прекрасно работает. Но проблемы начинаются, когда файлов несколько. Вместо того, чтобы обработать несколько файлов в одном приложении, запускается по одной копии приложения на каждый файл.
Если делать это через командную строку. Ну т.е. | Код | C:\MyApp.exe file1.dat file2.dat file3.dat |
то всё прекрасно. А вот через контекстное меню...
Я погуглил и нашел, что надо для каждого запуска проверять, запущено ли уже приложение, и если да, то отправлять ему сообщение с этим аргументом и закрывать ненужную копию приложения.
Прежде чем я начал влезать в эти дебри с мьютексами и сообщениями, скажите, нет ли другого более простого способа? Заранее благодарен. |