1 / 1 / 0
Регистрация: 01.02.2016
Сообщений: 14
1

Как работать с запущенным внешним приложением?

13.02.2016, 18:17. Показов 2766. Ответов 19
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток. Прошу помочь с следующей проблемой: есть exe-ник который считает контрольную сумму файла. Надо с его помощью открыть файл вычислить контрольную сумму и передать ее моей программе.
Программу запустил:
C#
1
2
3
   Process proc = new Process();
   proc.StartInfo.FileName = "D:\\Exl_winx.exe";
   proc.Start();
как теперь с ее помощью открыть нужный мне файл и получить контрольную сумму?
заранее спасибо.
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
13.02.2016, 18:17
Ответы с готовыми решениями:

Обработка команд из командной строки уже запущенным приложением
Добрый день уважаемые форумчане! Перейду сразу к сути: Необходимо что-бы приложение в запущенном...

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

Как работать с запущенным консольным приложением?
я с помощью команды "nc cacoiti.server.ru 1111" подлючаюсь к серверу и он на каждый мой запрос...

Как принять параметры приложением, запущенным через ShellExecute
Приветствую Как принять параметры приложением, запущенным через ShellExecute. Т.е. приложение №1...

19
976 / 871 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
13.02.2016, 18:44 2
KoSeOl, все зависит от того, что там за программа. Если консольная, то читайте про перенаправление потоков ввода/вывода.
0
1 / 1 / 0
Регистрация: 01.02.2016
Сообщений: 14
13.02.2016, 18:51  [ТС] 3
приложение Windows Forms
0
Нарушитель
5775 / 1433 / 350
Регистрация: 07.05.2015
Сообщений: 2,820
13.02.2016, 18:52 4
KoSeOl, что значит "контрольную сумму"? Хэш? Хэш можно вычислить и с помощью .NET типов.
0
976 / 871 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
13.02.2016, 18:56 5
KoSeOl, чужое приложение на винформах проще будет разобрать .NET Reflectorом и вытащить из него нужный код, чем заморачиваться с программным управлением им(если оно там, конечно, не предусмотрено создателями). Да и есть подозрение, что оно и не надо, и все можно сделать проще
0
1 / 1 / 0
Регистрация: 01.02.2016
Сообщений: 14
13.02.2016, 19:59  [ТС] 6
программа написана на делфи.
А про
Цитата Сообщение от EvilFromHell Посмотреть сообщение
Да и есть подозрение, что оно и не надо, и все можно сделать проще
Можно по подробнее ели не трудно?
0
976 / 871 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
13.02.2016, 20:29 7
Цитата Сообщение от KoSeOl Посмотреть сообщение
программа написана на делфи.
Цитата Сообщение от KoSeOl Посмотреть сообщение
приложение Windows Forms
Вы уж определитесь.
Цитата Сообщение от KoSeOl Посмотреть сообщение
Можно по подробнее ели не трудно?
Ну что-нибудь вообще про эту программу известно? Куда она выводит нужную информацию и как? Как можно сказать что-то информативное про управление чужой программой, не не зная про нее ничего?
И про функционал, который в той программе реализован, что-то известно? Нельзя ли его, как пишет greg zakharov, просто продублировать в своем приложении, а не заморачиваться с такими вещами?

Добавлено через 18 минут
В общем случае-для управления чужим приложением, у которого есть окно, можно использовать оконные сообщения(WinApi функция PostMessage/SendMessage, а так же Spy++). В более тяжелых случаях понадобятся DLL иньекция, разного рода хуки, а так же долгое вдумчивое копание в дизассемблированном коде.
0
1 / 1 / 0
Регистрация: 01.02.2016
Сообщений: 14
13.02.2016, 22:48  [ТС] 8
Визуально программа работает так:
в программе есть TreeView, ListView, TextBox и кнопка.
в TreeView - выбор папки
в ListView - выбор файла
нажимаем на кнопку и в TextBox появляется контрольная сумма файла выбранного в ListView

Добавлено через 5 минут
Цитата Сообщение от greg zakharov Посмотреть сообщение
что значит "контрольную сумму"? Хэш? Хэш можно вычислить и с помощью .NET типов.
вот пример контрольной суммы "CSVT-8CLR", каким образом ее получает программа мне не известно
0
Эксперт .NET
5490 / 4260 / 1211
Регистрация: 12.10.2013
Сообщений: 12,262
Записей в блоге: 2
13.02.2016, 23:09 9
Цитата Сообщение от KoSeOl Посмотреть сообщение
каким образом ее получает программа мне не известно
Самое главное-узнать этот момент, а все остальное можно реализовать уже в C#.
0
976 / 871 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
14.02.2016, 05:02 10
Солидарен с insite2012, функционал программы простой, проще его переписать в С# чем заморачиваться. В противном случае-берете Spy++ и шлете нужные сообщения нужным контролам.
0
1 / 1 / 0
Регистрация: 01.02.2016
Сообщений: 14
14.02.2016, 20:00  [ТС] 11
переписать не проще потому что я не знаю как реализовано формирование контрольной суммы. А по поводу нужных сообщений нужным контролам ссылку не дадите где можно почитать.
0
976 / 871 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
14.02.2016, 20:15 12
KoSeOl, spy++ откройте(где-то в папке со студией под названием spyxx), выберите в нем нужное окно и сами все увидите. По каждому оконному сообщению есть инфа на MSDN, а функции, какими они шлются, я уже указал-PostMessage и SendMessage. Но все, это, конечно, как-то через задницу, по уму надо таки узнать да переписать Ведь окно таки придется открывать, чтобы послать ему какие-то сообщения. Хоть и на долю секунды.
1
1 / 1 / 0
Регистрация: 01.02.2016
Сообщений: 14
21.02.2016, 01:06  [ТС] 13
EvilFromHell, спасибо за подсказку частично получилось, а именно считать контрольную сумму после того как вручную в программе выбрал нужный файл. А вот программно передать в запущенную программу адрес файла и заставить просчитать контрольную сумму не получается да и что душой кривить не хватает мне знаний и навыков. Но нашел другой способ. Перетягивая мышкой нужный мне файл на екзешник программы она открывается с вычисленной контрольной суммой. Питался это реализовать с помощью следующего кода передав адрес файла как аргумент при запуске

C#
1
2
3
4
5
 private void button1_Click(object sender, EventArgs e)
        {
            ProcessStartInfo myProcessr = new ProcessStartInfo("D:\\Exl_winx.exe", "D:\\1.txt");
            Process.Start(myProcessr);
         }
но в результате программа просто запускается. Как мне в Exl_winx.exe при ее запуске передать адрес нужного файла для обработки?
0
976 / 871 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
21.02.2016, 07:10 14
KoSeOl, чтобы программа обрабатывала таким образом поданные аргументы, в ней должно быть это написано. В программе на шарпе они вот тут:
C#
1
2
3
4
5
6
7
8
9
10
namespace ConsoleApplication45
{
    class Program
    {
        static void Main(string[] args) //args-аргументы, те самые, которые вы пытаетесь подавать через ProcessStartInfo
        {
              //тут args должны быть обработаны.
        }
    }
}
А этого, по всей видимости, не сделано, а значит так сделать невозможно. Внимательно посмотрите, какие сообщения идут окну, когда вы перетягиваете туда нужный файл(раз так работает). И их эмулируйте.
0
1 / 1 / 0
Регистрация: 01.02.2016
Сообщений: 14
21.02.2016, 13:45  [ТС] 15
EvilFromHell, Вы меня не поняли я не в окно программы перетягиваю, а на ее ярлык и она запускается с параметрами файла который я перетянул на иконку (или ярлык) приложения. От сюда делаю выводи что args-аргумент в виде пути к файлу все же передается из проводника в программу подсчета контрольной суммы. А вот перетягивание на само окно приложения не работает.
0
976 / 871 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
22.02.2016, 10:55 16
KoSeOl, да, извиняюсь, я что-то был уставший и читал невнимательно. Тогда я с ходу не скажу в чем дело, по идее должно было бы работать. Если хотите-можете скинуть программу, попробую.
0
1 / 1 / 0
Регистрация: 01.02.2016
Сообщений: 14
22.02.2016, 21:39  [ТС] 17
EvilFromHell, был бы очень благодарен вот программка
Вложения
Тип файла: zip Exl_winx.zip (278.0 Кб, 5 просмотров)
0
976 / 871 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
25.02.2016, 09:33 18
Лучший ответ Сообщение было отмечено KoSeOl как решение

Решение

KoSeOl, дошли таки руки посмотреть.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
using System.Diagnostics;
 
namespace ConsoleApplication49
{
    class Program
    {
        static void Main(string[] args)
        {
            ProcessStartInfo si = new ProcessStartInfo("Exl_winx.exe", "\"C:\\XCOM 2\\ReadMe_CHS.rtf\"");
            Process p = Process.Start(si);
        }
    }
}
Вот так у меня все работает аналогично тому, как при перетягивании. Да и ваш пример по идее должен работать. Если подавать аргумент без кавычек, то пробелы будут мешать. Но другой вопрос, что программа почему-то для некоторых файлов вообще не желает ничего не считать, вне зависимости от способа подачи. Это так и должно быть?
1
1 / 1 / 0
Регистрация: 01.02.2016
Сообщений: 14
25.02.2016, 20:12  [ТС] 19
EvilFromHell, да мой вариант тоже работает если путь к файлу передавать в виде
Код
"\"path"\"
а я передавал "path" . Я так понял вся проблема была в отсутствии
Код
\"
СПАСИБО ОГРОМНОЕ.
Но теперь есть одно "НО". При поиске в нете я не видел ни разу такой записи аргумента как показали Вы, даже на msdn путь передается просто строкой. Если не тяжело объясните что означает
Код
\"
А по поводу открытия програ должна считать контрольную сумму для архивов, таблиц и текстовых документов.

Тема закрыта.
0
976 / 871 / 350
Регистрация: 26.04.2012
Сообщений: 2,647
25.02.2016, 20:50 20
KoSeOl, это означает обычные кавычки, которые экранируются, чтобы они считались именно кавычками как символ, а не теми, что ограничивают строку. Нужны они тут для того, чтобы попадающиеся в пути пробелы не делили ее на несколько аргументов, что некорректно обрабатывалось бы прогой.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.02.2016, 20:50
Помогаю со студенческими работами здесь

Мониторинг используемых файлов запущенным приложением
Привет всем, народ подскажите с помощью какого ПО можно узнать какие в данный момент файлы...

Программное управление внешним приложением
Здравствуйте! Стоит задача программно управлять внешним приложением стороннего производителя....

Не пойму, как работать с внешним прерыванием ATMega8
Здравствуйте. Пытаюсь накодить программку, которая по нажатию кнопки переключала яркость диода....

Как дальше работать с открытым приложением?
Когда открыто какое-нибудь приложение из VB, как с ним дальше програмно работать? Например...

Можно ли: открыть файл PDF внешним приложением Inkscape и скопировать из него содержимое?
возможно ли открыть файл в PDF внешним приложением (Inkscape) и скопировать в буфер содержимое ?...

Как работать с ASP.NET MVC 5 приложением после развертывания на сервере?
Интересуют ресурсы, где можно почитать про то(желательно с примерами), как работать с ASP.NET MVC 5...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2023, CyberForum.ru