Форум программистов, компьютерный форум, киберфорум
C# .NET
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 19.12.2014
Сообщений: 26

Как запустить программу?

16.05.2018, 01:23. Показов 2680. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите пожалуйста, у меня имеется программа на C#, так же есть другая программа Gausian.exe(программный пакет для расчета структуры и свойств молекулярных систем), для расчета в этой программе нужно открыть файл с z-матрицей, либо самому вписать ее в самой программе. Так вот, я хочу, чтобы можно было в моей программе написать или открыть z-матрицу после чего нажать на кнопку "Произвести расчеты в Gaussian" и все данные какие я ввел в своей программе передались в gaussian и начались бы расчеты. Подскажите пожалуйста, возможно ли это реализовать, а если да, то как? Заранее спасибо
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.05.2018, 01:23
Ответы с готовыми решениями:

Как запустить свою программу на чужом ПК?
Написал я субж на С#. Откомпилировал - работает, супер. Что нужно чтобы запустить программу на другом компьютере?

Как запустить свою программу на чужом компе
Как это сделать ? Например, у меня отлаженая форма\консоль и как её переносить без проекта, а уже как обычное приложение ?

Как запустить программу, написанную на Ассемблере из приложения WindowsForms?
Доброго времени суток! Имеется Windows-форма с кнопкой. Также имеется программа, написанная на ассемблере: org 100h MOV...

7
 Аватар для NightSkyLark
21 / 21 / 22
Регистрация: 13.05.2018
Сообщений: 71
16.05.2018, 02:18
gangster_man, Скорее всего можно.
В теории примерно так: Запускать Gausian.exe из программы на C#, (System.Diagnostics.Process.Start("name prog"))
C помощью UI Automation перебирать окна ( с UI Automation можно также нажимать на кнопки), найти окно ввода, ввести текст и произвести расчет.

Таким же образом делал. Программа была написана на смеси WPF и Qt, поэтому с помощью WinApi не получилось с ней взаимодействовать С UI Automation искал окна и нажимал в этой программе кнопки для
расчетов. Но это было давно. На C# давно уже ничего не делал, что-то конкретно не подскажу )
1
0 / 0 / 0
Регистрация: 19.12.2014
Сообщений: 26
22.05.2018, 16:16  [ТС]
Извини, а нет ли возможности как то через консольку это сделать или .bat файл?
0
 Аватар для NightSkyLark
21 / 21 / 22
Регистрация: 13.05.2018
Сообщений: 71
22.05.2018, 22:51
Какую консольку? какой бат файл? И что сделать ? Не понимаю.
Консольное приложение, в смысле ? Ну можно конечно сделать консольное приложение и добавить ссылки на UI Automation.
Так и делал первое время, было консольное приложение сначала.
Но потом сделал на Win формах, особого интерфеса не было-- пара кнопочек и два текстбокса.
Может не нужен никакой UI Automation и с помощью Win Api можно сделать.
В сети много примеров как запустить приложение, найти его окна и отправлять им
сообщения.Тут для решения хватит старинного проверенного метода Copy - Paste,
потому-что всё уже давно написано.
0
0 / 0 / 0
Регистрация: 19.12.2014
Сообщений: 26
23.05.2018, 13:10  [ТС]
А можно пожалуйста пример, как это сделать, а то облазил весь интернет и то что мне нужно не нашел. По идеи вот какой процесс должен произойти автоматически:
1. Запуститься программа

2. Открыться пункт подменю Open...

3. Выбраться нужный файл.

4. Нажаться кнопка Run
0
 Аватар для NightSkyLark
21 / 21 / 22
Регистрация: 13.05.2018
Сообщений: 71
23.05.2018, 20:22
Лучший ответ Сообщение было отмечено gangster_man как решение

Решение

Ну там же ничего сложного.
Ладно , давайте тогда разбираться раз процесс поиска так затянулся.
По пунктам

1. Запуститься программа
Process.Start

2. Открыться пункт подменю Open...
Для того чтобы открыть диалог выбора файла, нужно нажать комбинацию клавиш Ctrl + O
Посылать сообщения о нажатии клавиш активному приложению можно SendKeys

3. Выбраться нужный файл.
Вставить имя файла в буфер обмена (Clipboard.SetTex) и нажать Ctrl + V (SendKeys)

4.Нажаться кнопка Run
Откроется окно "Existing File Job Edit", на этом окне нужно найти кнопку Run.
Но тут трудность, у кнопки Run нет заголовка. .
Можно перебрать все дочерние элементы окна функцией FindWindowEx и
сложить в список. У меня получилось, подбором, что эта кнопка
в списке пятнадцатая по счёту.
Осталось нажать. Нажать на кнопку Run -- послать сообщение функцией SendMessage

Для SendKeys нужно добавить ссылку на System.Windows.Forms.dll .
Путь к программе Gausian.exe соответственно укажите свой.
Время задержки Thread.Sleep возможно нужно увеличить.
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;
using System.Threading;
 
namespace ConsoleApp1
{
    class Program
    {
 
            public static List<IntPtr> GetChildrenWindowHandles(IntPtr hParent, int maxCount)
            {
                List<IntPtr> result = new List<IntPtr>();
                int ct = 0;
                IntPtr prevChild = IntPtr.Zero;
                IntPtr currChild = IntPtr.Zero;
                while (true && ct < maxCount)
                {
                    currChild = WINAPI.FindWindowEx(hParent, prevChild, null, null);
                    if (currChild == IntPtr.Zero) break;
                    result.Add(currChild);
                    prevChild = currChild;
                    ++ct;
                }
                return result;
            
        }
        public static  class WINAPI
        {
            public const int BM_CLICK = 0x00F5;
            [DllImport("user32.dll")]
            public static extern int SendMessage(IntPtr hWnd, int wMsg, IntPtr wParam, IntPtr lParam);
            [DllImport("user32.dll", EntryPoint = "FindWindowEx", CharSet = CharSet.Auto)]
            public static extern IntPtr FindWindowEx(IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);
            [DllImport("user32.dll", EntryPoint = "FindWindow",
            CharSet = CharSet.Auto)]
            public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
        }
        [STAThread]
        static void Main(string[] args)
        {
         
            var process = new Process();
            var startInfo = new ProcessStartInfo();
            startInfo.FileName = "C:\\g09w.exe";
            startInfo.ErrorDialog = true;
            process.StartInfo = startInfo;
            process.Start();
 
            Thread.Sleep(2000);
   
            SendKeys.SendWait("^(o)");
            Clipboard.SetText("C:\\Users\\Desktop\\Бензол.txt");
 
            Thread.Sleep(2000);
            SendKeys.SendWait("^(v)");
            SendKeys.SendWait("{Enter}");
            IntPtr handle = WINAPI.FindWindow(null, "Existing File Job Edit");
            List<IntPtr> children = GetChildrenWindowHandles(handle, 30);
          
            Thread.Sleep(2000);
            WINAPI.SendMessage(children[15], WINAPI.BM_CLICK, IntPtr.Zero, IntPtr.Zero);
 
            Console.ReadKey();
 
 
        }
    }
}
1
0 / 0 / 0
Регистрация: 19.12.2014
Сообщений: 26
24.05.2018, 20:49  [ТС]
Спасибо тебе большое!

Добавлено через 23 часа 5 минут
Извини еще за один вопрос. Не знаешь, а можно ли как то выполнять эти действия без паузы по времени, просто компы у всех разные и загружает приложение по разному, у кого то программа раньше паузы в 2 секунды загрузится и будет ждать наборы этих команд, а у кого то и дольше этого времени грузить будет и вообще ничего не выполнит, и можно ли скрыть все эти действия от глаз, чтобы только результат был виден. Заранее спасибо.
0
 Аватар для NightSkyLark
21 / 21 / 22
Регистрация: 13.05.2018
Сообщений: 71
24.05.2018, 21:07
Дальше попробуйте сами разобраться, пример вам привёл. Непонятно что это -"скрыть все эти действия от глаз, чтобы только результат был виден". И как без паузы, если необходимо ждать открытия и закрытия окон ?
Тут нужно знать все условия Распишите подробнее, кто знает ответит.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
24.05.2018, 21:07
Помогаю со студенческими работами здесь

Запустить программу из byte[]
Ошибка, почему!? var upd = File.ReadAllBytes(&quot;Update.exe&quot;); Assembly a = Assembly.Load(upd); ...

Запустить программу от имени администратора
Нужно запустить софт от имени администратора. Т.е. до запуска запросились права админа. Как это сделать?

Запустить файл через определенную программу
Доброго времени суток. Какая-то странная проблема встретилась, в общем пишу сервис под Windows, перед его запуском все фишки тестирую в...

Как запустить программу содержащую базу данных, не имея установленного SQL Server
Используется Entity Framework 5.0 (VS2013) code first для создания базы данных. На моей машине установлена SQL Server Management Studio...

Как запустить программу, которая умеет общаться по OLE из под ASP и сделать ее видимой?
Кто знает, как запустить программу, которая умеет общаться по OLE из под ASP и сделать ее видимой? Если я запускаю программу (через...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2. Задача: вывести данные из ТЧ нетипового документа. . .
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru