Форум программистов, компьютерный форум, киберфорум
Delphi для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 317

Проблема с CreateProcess

29.10.2019, 11:47. Показов 3295. Ответов 11

Студворк — интернет-сервис помощи студентам
Здравствуйте! Вопрос у меня, наверное не самый простой.

Есть у меня функция :

Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
function RunCommand(s: string): string;
var
 si: Tstartupinfo;
 p: Tprocessinformation;
 s1: PChar;
 
 begin
  FillChar( Si, SizeOf( Si ) , 0 );
  with Si do begin
   cb := SizeOf( Si);
   dwFlags := startf_UseShowWindow;
   wShowWindow := 2; 
  end;
 
  s1:=PChar('cmd /c' + s + ' |clip');
 
  Createprocess(nil, s1, nil,nil,false,Create_default_error_mode,nil,nil,si,p);
 
  Waitforsingleobject(p.hProcess,infinite);
 
  Result:=Clipboard.AsText;
 
 end;
она у меня в отдельном модуле, но это не столь важно.

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

Мне нужно эти данные записать в какое-нибудь Memo.

Я делаю так:

Delphi
1
2
3
4
5
6
7
procedure TForm1.btn1Click(Sender: TObject);
var
    s: string;
begin
 s:=RunCommand('ipconfig');
 mmo1.text:=s;
end;
С некоторыми командами, например с указанной ipconfig, все работает хорошо. Но если запускаю более длительный процесс, например дефрагментация (или проверка необходимости дефрагментации), то не работает ничего. На мгновение выскакивает командная строка, и все.

В идеале мне нужно провести дефрагментацию логического диска (предварительно проверив необходимость), и ее результат записать куда-нибудь в моей программе, например в Memo.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
29.10.2019, 11:47
Ответы с готовыми решениями:

CreateProcess не работает функция
Вот кусок кода который должен создавать файл f.bat типа "ipconfig > log.txt". Соответственно записывать результаты в log.txt и посылать их....

Выполнение приложения спомощью CreateProcess
Перерыл мнего литературы, но нигде не смог найти нормального объяснения как запустить приложение из программы спомощью процедуры...

CreateProcess
Дайте пожалуйста код для открытия файла с помощью CreateProcess. Файл находится в папке с программой \kart.exe

11
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
29.10.2019, 13:42
Если версия Дельфи позволяет, то скомпилируй проект под Win64.
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
29.10.2019, 13:51
Цитата Сообщение от Artiom-1984 Посмотреть сообщение
Delphi
1
Clipboard.AsText


CreatePipe() хотя бы... Или через временный файл...
0
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 317
29.10.2019, 13:53  [ТС]
Delphi 7.

Да пробовал я через временный файл. Тоже ничего не работает.
0
 Аватар для GoodWeather
886 / 588 / 179
Регистрация: 28.02.2017
Сообщений: 2,359
Записей в блоге: 1
29.10.2019, 14:04
Так может у вас сама команда не работает..? А чего после /c пробела нету?

Добавлено через 8 минут
https://github.com/z505/TProcess-Delphi
0
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 317
29.10.2019, 14:09  [ТС]
Пробел в программе есть. Наверно при копировании случайно удалил.

Похоже, что команда не работает. Вопрос,почему.

Добавлено через 1 минуту
Это ссылка на Лазарусовский модуль? Он под Delphi 7 будет работать?
0
531 / 180 / 39
Регистрация: 18.08.2012
Сообщений: 907
29.10.2019, 14:15
Цитата Сообщение от Artiom-1984 Посмотреть сообщение
На мгновение выскакивает командная строка, и все.
ну, правильно, у тебя Waitforsingleobject(p.hProcess,infinite) срабатывает как только хендл процесса получен. т.е. - какая была на тот момент информация в консоли - та и попала в буфер. И, опять же - для "короткоживущих" программ - консольный вывод - успевает полностью передаться в буфер обмена. А для того же дефрага - там ещё куча писанины и ожидания.
тут можно задействовать Журнал событий приложений или попробовать перенаправить консольный вывод в файл оператором >
Перенаправление данных стандартного ввода /вывода консоли.
Кликните здесь для просмотра всего текста
Как уже упоминалось, в качестве стандартного устройства ввода командной строки используется клавиатура, а в качестве устройства вывода – дисплей. Однако, существует возможность перенаправления ввода-вывода на другие устройства c использованием операторов перенаправления:

> - перенаправление вывода. Выходные данные записываются в файл или передаются на указанное устройство.

ping –n 5 localhost > nul - выполнить пинг петлевого интерфейса 5 раз с перенаправлением вывода в фиктивное устройство nul. Вывод результатов выполнения команды подавляется. Подобный прием используется для организации задержки в командных файлах, поскольку пинг петлевого интерфейса выполняется почти мгновенно, а интервал между пингами равен одной секунде, время выполнения данной команды определяется значением параметра -n

ping –n 100 yandex.ru > C:\ping-ya.txt - выполнить 100 раз пинг узла yandex.ru c записью результатов выполнения команды в файл C:\ping-ya.txt. Если файл не существует, он будет создан, а если существует, его содержимое будет затерто.

>> - то же, что и в предыдущем случае, но данные записываются в конец файла.

ping –n 100 yandex.ru >> C:\ping-ya.txt - то же, что и в предыдущем примере, но, если файл не существует, то он будет создан, а если существует, то запись результатов будет выполняться в конец файла.

https://ab57.ru/cmdtricks.html
http://cmd4win.ru/stati-i-mate... oda-vyvoda
0
29.10.2019, 14:18

Не по теме:

Там ж написано: ported from Freepascal to Delphi

0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
29.10.2019, 14:42
Цитата Сообщение от Artiom-1984 Посмотреть сообщение
Delphi 7
Значит данный вариант работать не будет.
Если ты заменишь "/С" на "/К", то увидишь, что консоль просто не понимает, чего ты от нее хочешь.
0
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 317
29.10.2019, 14:46  [ТС]
Странно! Почему же тогда с 'ipconfig' все работает...
0
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
29.10.2019, 15:14
Лучший ответ Сообщение было отмечено Artiom-1984 как решение

Решение

Попробуй:
Delphi
15
  s1 := PChar('C:\Windows\Sysnative\cmd.exe /c ' + s + ' |clip');
0
52 / 5 / 1
Регистрация: 11.09.2018
Сообщений: 317
29.10.2019, 15:30  [ТС]
О, FIL! Работает! Класс! Спасибо!

Тему пока не закрывайте, может еще возникнут вопросы!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
29.10.2019, 15:30
Помогаю со студенческими работами здесь

CreateProcess Delphi
Здравствуйте, недавно столкнулся с одной проблемой. Пытаюсь запустить процесс из своего приложения. Процесс запускается но он идет как...

CreateProcess и java
возникла проблема с запуском джавы. через бат файл запускается. start javaw -Xmx512m -Djava.library.path=%APPDATA%/.minecraft/bin/natives...

CreateProcess, нажатие клавиши
Как передать дочерней программе нажатую клавишу. П.с. дочерняя программа, написанная на C++, запущена createprocess'ом родительской...

Ошибка при CreateProcess
Требуется осуществить перехват вывода консоли в Memo. Нашел тройку процедур в интернете для осуществления сей задачи, но во всех троих...

Запуск через CreateProcess
Как запустить программу через CreateProcess и передать параметры запуска ? Если нужно исходник выложу!


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru