Доброй ночи, лично Я добавляю в конце аргументов cmd: "& exit", это позволяет избавиться от останков cmd в фоновых процессах, если процесс не смог закрыться самостоятельно
Спасибо огромное! Именно то, что я искал: мне надо было, чтобы командная строка у яндекс-облака запрашивала новый токен. Большую часть параметров я нарыл верно, но что-т с синтаксисом намудрил похоже. Ваш пример заработал :) А может, сейчас понимаю, дело было просто в "/c" поля аргументов. В общем, очень полезное видео!
Спасибо тебе большое, два часа ебался с классом "Powershell", пытался заставить его работать, не смог.. нашёл твоё видео (ещё года два назад смотрел, но тогда не понадобилось), за пару минут переписал свой код согласно инструкции))) и всё заработало Вот просто от души, жирный лайк
Таким новинкам даю какое-то время на развитие. Пока рано говорить. Но, как показывает практика, это очередная попытка сделать что-то, на что потом Microsoft успешно забьёт. Не могу опять же точно говорить, что так будет, но так показывает практика
Привет, хотел бы узнать, как сделать возможным общение 2 твоих программ? Вроде есть что-то, как pipe. Но не понимаю, что да как. Извините, если может не ясно выразился
Пересмотрел несколько раз это видео и ещё предыдущее про лямбда выражение и как-то не могу уловить смысл. Я понял, что эта лямбда упрощает код, но не могу въехать когда лучше её использовать почему в конкретном примере мы используем именно такую запись? В предыдущем уроке вроде было понятно. Вот на примере process.OutputDataReceived += (s, e) => { label.Text += e.Data + Environment.NewLine; }; какая бы была запись без использования лямбды?
@@XpucT спасибо большое! Стало понятнее) Я сначала даже "вышел с этим вопросом в Интернет" и меня там гугл закидал делегатами, полез в самой вижуал студии внутрь OutputDataReceived и в итоге опять упёрся в делегаты. Почувствовал себя тупым =) Просто не сразу въехал, что есть такое по своей сути OutputDataReceived и почему мы потом пишем лямбду. Вдруг в будущем попадётся нечто подобное, а я не смогу понять что с ним делать). Как оказалось это такое же событие как какой-нибудь маус клик и т.п.. Да, в видео ты говорил, что это событие, но это как-то не отложилось в памяти и в ответе на комментарий это было продемонстрировано наглядно)
Для тех, у кого после всех манипуляций с кодировкой для вывода всё равно выходят иероглифы и хрен пойми что, нашёл команду для cmd, мне помогло, только русский текст всё равно отобразит символами, но так-как у меня это только имя сетевого подключения - не критично, главное что основная информация хотя бы есть: REG ADD HKCU\Console /v CodePage /t REG_DWORD /d 0xfde9
Здравствуйте. Подскажите, есть ли какое-то решение. как в уже открытую CMD, передавать команды, то есть CMD открыли отдельно и надо ее поймать, и провести с ней операции?
@@XpucT Спасибо. По мучался, но получилось, разобрался, на самом деле очень удобный, этот Autoit. Тут еще выяснил, что его можно подключать к C#, вообще много процессов можно упростить. Ее раз спасибо, за подсказку.
Добрый день еще раз. Не могли бы вы рассказать про консоль "как взаимодействие"? Например я по вашему материалу запускаю команду plink (из состава putty) с аргументами, однако, если я делаю запрос на сервер в первый раз, то система даже при использовании аргумента для plink "-batch" запрашивает разрешение сохранить или нет ssh ключ. С помощью вашего урока я все это читаю, а как послать на такой запрос ответ "yes" не знаю. Если не сложно просветите как это сделать?
Привет, Хачатур! По ходу урока переписывал код, написан точь-в-точь как у тебя, но у меня программа открывает новое окно. Передал программе права админа, ситуацию не изменило
Показывает ошибку на это: process.BeginOutputReadLine(); process.OutputDataReceived += (s, e) => { label1.Text += e.Data + " "; }; Ошибка: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'label1' не из того потока, в котором он был создан." пишу все как на видео. может что то изменилось?
Здравствуйте, искал как вытащить данные ipconfig с консоли в лейбл. наткнулся на ваше видео, написал точно так-же, но в сам лейбл ничего не выводится. есть мысли в чем может быть дело?
А вот по поводу poweshell и команды из примера "/command get-appxpackage | ft name" у меня что в выводе, что в самом poweshell (логично) говорит о том, что не распознает команду : the term 'get-appxpackage' is not recognized as the name of a cmdlet, function, script file, or operable program. Если есть решение, был бы рад услышать, но пока что, что решения не нашёл.
Спасибо большое. А можете показать как вводить значения в командной строке? Например если запустить команду "time", то мы не видим что отобразилось в командной строке. А хотелось бы увидеть и суметь ввести какие значения
Консоль, как приложение и консоль как взаимодействие - немного разные. Чтобы вводить что-то в консоль, нужно отправлять эти значения, как аргументы своему приложению. То есть в Вашем случае, что Вы спросили, будет работать отдельный exe через простую консоль. То есть консоль не будет являться самостоятельным приложением.
В случае с консольным приложением вы можете использовать аналогичный RedirectStandardInput. Или же можно использовать SendKeys, есть такая вещь в вин апи
ув. Хачатур привет Можно ли менять кодировку сразу в строке Match match? пример: line = wc.DownloadString($"");
Match match = Regex.Match(line, " chcp 65001 & \"temp\":(.*?),(.*?)\"name\":\"(.*?)\","); label1.Text = match.Groups[3].Value + " " + match.Groups[1].Value + " °C"; или нужно добавлять в переменную line ? типа так---> line = wc.DownloadString($" chcp 65001 & "); P.S. Скажи пожалуйста можно ли вывести время в реальном времени, что бы после нажатия на кнопку, в лейбл выводилось время и чтоб время обновлялось само, без нажатия на кнопку(т.е. шло в реальном времени)?
Очень полезно, но мне интересно, как продолжить работу с консолью? Допустим, я написал команду "del /p file.txt", получил вывод "Удалить [Y(да)/N(нет)]?" и мне нужно для удаления написать "y" в консоль. Можно ли как-то реализовать такое?
Спасибо за урок! Я чёт не очень понял как лучше и эффективнее завершать процессы программ, служб и тд Cmd($"taskkill /f /im distnoted.exe" ); Так Или так foreach (Process process in Process.GetProcessesByName("regedit")) // Для каждого процесса, у которого имя regedit { process.Kill(); // Завершить процесс }
Оба варианта рабочие, однако, когда нужно завершить процесс (по какой-то причине) в отдельном потоке, то, чтобы не создавать Task или Thread проще завершить процесс в cmd.
Спасибо тебе за уроки! У меня только запрашивает запуск программы от Админа. Может кто подсказать, как ее с с# запустить или как по умолчанию запускать в cmd всегда от админа?
Доброго времени суток! Наткнулся на ваши ролики. Долго пытаюсь понять принцыпы Power Shell, но пока безуспешно. Посоветуйте как пробить эту стену. Заранее благодарен.
Как можно в С# (если возможно) получить параметры извне не в консольном приложении (static void Main(string[] args)), а в точку входа Windows Form (static void Main()). Спасибо
Здравствуйте, попробовал ваш код, но при нажатии на кнопку вылезает ошибка "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'label1' не из того потока, в котором он был создан.". А также заметил, что если в выражении (s, a) я заменяю "a" на "e" то эта переменная подчеркивается красным. В точности повторил ваш код.
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Windows.Forms; using System.Diagnostics; namespace WindowsFormsApp2 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Button1_Click(object sender, EventArgs e) { Process process = Process.Start(new ProcessStartInfo { FileName = "cmd", Arguments = "/c dism /online /cleanup-image /startcomponentcleanup", UseShellExecute = false, CreateNoWindow = true, RedirectStandardOutput = true }); process.BeginOutputReadLine(); process.OutputDataReceived += (s, a) => { label1.Text += a.Data; }; } } }
@@ВладимирДанилин-м3к это лайфхак, но злоупотреблять не рекомендуется, потому что если будут ошибки, то Ты их просто не выловишь. Просто всегда помни, что у Тебя подключён лайфхак.
Та же история. Костыли сейчас приделаю, но почему такое происходит, не догоняю. Насчет переменной события: как вообще у Хачатура работает с переменной e, если выше этот же символ объявлен переменной события кнопки?
Хачатур не подскажешь, как в приложении winforms по нажатию на кнопку открывать в браузере по умолчанию определенную ссылку? Пробовал по твоему видосу как удалять папку через консоль , там консоль не видно, в общем очень удобно, но команда которую я ввожу не выполняется. Как можно сделать это по другому? В интернете решения не нашел. Заранее спасибо!!
Upd: Видимо в ответах к комментариям не приходят уведомления, либо они не появляются в списке. Вставлю ответ сюда: XpucT нет, есть консольное приложение (node.js windows сервер), от которого нужно получать логи в реальном времени (сделано, спасибо видео) и вводить команды Теперь есть красивое приложение на C#, но команды вводить нельзя
Немного непонятно на том моменте, когда вы рассказываете про свойства UseChellExecute и RedirectStandardOutput, вероятно просто я тупой, но раньше я об этих вещях не где не слышал, а их описание почему то звучит для меня слишком страшно
Здравствуйте! У меня не срабатывает амперсанд. Сначала думал, что в коде, а в итоге сама консоль пишет "Неправильный формат параметра: $". В чем может быть проблема?
Добрый день. Смотря в какой среде разработки Вы работаете. Если в старой, где C# версия ниже 4, то он не знает, что это. Проблем в Visual Studio последней версии не может быть со знаком амперсанда.
Зравствуйте, не знаю как исправить ошибку System.InvalidOperationException: "Поток StandardOut не был перенаправлен или процесс еще не был запущен." работает только так private void button1_Click(object sender, EventArgs e) { Process process = new Process(); process.StartInfo.FileName = "cmd"; process.StartInfo.Arguments = "/c chcp 65001 & dism /online /cleanup-image /startcomponentcleanup"; process.StartInfo.UseShellExecute = false; process.StartInfo.CreateNoWindow = true; process.StartInfo.RedirectStandardOutput = true; process.Start(); process.BeginOutputReadLine(); process.OutputDataReceived += (s, a) => { label1.Text += a.Data + " "; };
Добрый день. Вы изучите материал, который Вам тут предоставлен, потом задайте вопрос. А Вы свой код откуда-то взяли, причём устаревший метод объявлений. По потокам также есть видео ruclips.net/video/vHqHrf914TA/видео.html
привет Хачатур, почему-то вылезает ошибка при запуске кода не понимаю почему , на компе я админ и в VS тоже. private void button1_Click(object sender, EventArgs e) { Process process = Process.Start(new ProcessStartInfo { FileName = "cmd", Arguments = "/c time /t", UseShellExecute = false, CreateNoWindow = true, RedirectStandardInput = true, }) ; label1.Text = process.StandardOutput.ReadToEnd(); } Сама Ошибка - StandardOut has not been redirected or the process hasn't started yet.
Давай назад, Данил и не забегай вперёд. Про методы уже был урок. Идти в этом курсе нужно *строго последовательно* ➜ ruclips.net/p/PL05SB3rBbUsraqiEUeS70RKhVAu97nGeb
@@XpucT О, спасибо за ответ. Да не, я уже и Шилдта прочитал на metanit сижу и все твои видео смотрел. Решил это видео пересмотреть и в голове, наверное, все перемешалось, из-за недостатка практики, я увидел здесь не то, что есть на самом деле. а Сейчас обдумал и понял.
Большое спасибо за уроки!!! Можешь подсказать: 1. Как проверить доступ к файлу, например, для того, чтобы удалить или переименовать. 2. Как запустить child процесс с ограничением использования ресурсов CPU, оперативка
XpucT Спасибо большое за ответ!! 1. Данная реализация проверяет занят ли данный файл другим процессом, а что насчет атрибутов, например, файл только для чтения, а я его хочу удалить. 2. В данном видео рассказывается о потоках, а я имел ввиду запуск командной строки с параметрами и для этой командной строки огранить использование ресурсов CPU и Memory .
@@alex31347 1. File.SetAttributes(ПутьКфайлу, File.GetAttributes(ПутьКфайлу) & ~FileAttributes.ReadOnly); 2. Нужно искать в сети, есть ли вообще контроль управления памятью у cmd. Но что-то подсказывает, что контролировать нужно не cmd, а то, что она использует.
Тоже пытался сделать такую программу к консольному приложению, но она не имеет такого ключа, который я могу ей отправить только когда она уже запущена. После запуска я могу получать логи, которые собираю и отправлять команды. Как сделать возможность *ввода* команд? И консольное приложение может очистить консоль и изменить текст на экране. Для ввода программа должна быть уже запущена (т.е поле для ввода)
XpucT нет, есть консольное приложение (node.js windows сервер), от которого нужно получать логи в реальном времени (сделано, спасибо видео) и вводить команды Теперь есть красивое приложение на C#, но команды вводить нельзя
@@XpucT да, окей Я просто пока решил помучиться и попробовать поставить на VirtualBox официальный образ для разрабов (тот что с вижуалкой сразу и тд) и накатить твикер с активатором, хех Спасибо
Есть операции, которые намного дешевле и проще на cmd, чем на C#. Поэтому есть возможность подключаться. Пример из Win 10 Tweaker: Как узнать, SSD у человека или HDD? На C# никак, на С++ никак, на VB никак. А вот на PowerShell можно.
@@XpucT да вот нашел за пару минут emoacht.wordpress.com/2012/11/06/csharp-ssd/ обертка для винапи не пару строчек, зато не надо вызывать пс но один хер я могу вызвать внешнюю утилиту и считать вывод ее из stdin и регулярками распарсить это все равно не дает понимания смысла этих лямбд, а только больше засирает мозги синтаксисом непонятным
@@kalobyte Я это нашёл также когда-то за пару минут. Но судя по тому, что после Моего коммента Ты дал эту ссылку, Ты не очень понимаешь, что это боль в десятой степени. У кодера не должно быть принципов пилить на чистом C#. Это крайне тупо. В случае с вопросом SSD - это тупо в десятой степени. То есть 10 причин. 10 степеней боли в разных местах при использовании такого решения. Есть вопросы копирования файлов или удаления в корзину средствами подключения Basic, также Basic лучше при работе с ярлыками. Чтобы узнать какой монитор или ТВ установлен, C# не поможет. Он не настолько развит, как другие, зато легко даёт подключаться к любому другому. Что касается чтения вывода из внешней утилиты, то эта утилита должна поддерживаться также C#. Если внешняя утилита сделана не консольным окном, а типа консольным, то не получится. Нужно гуглить примеры, скорее всего кто-то это уже делал. Точно такой же вопрос чтения с этой утилиты.
@@XpucT дело не в принципах есл вопрос можно решить без внешних утилит, то он должен решаться без внешних утилит, т.к. антивирусы не любят такое насчет определить тип диска, то я думал, что есть wmi запрос к бд и вообще есть ли в системе свойства у типов хранилищ или дисков если в апи виндовса такого нет, то там конечно будут костыли с доставкой этой инфы и насчет типа консольным я не понял если приложение консольное, то оно выводит данные в стандартный вывод или stderr в шарпе же должны быть функции для принятия потока со стандартного вывода или ввода
@@kalobyte ну, уже всё было понятно с первого ответа, но после слов об антивирусах только закрепилось. Очевидно мы не найдём общий язык. Надеюсь, что найдёте ответ на свой вопрос.
многобукф. можно мативационноное видео? типо зачем с 0? ты проги делаешь этим живешь. а юзеру без практики смысл. что тебе мотевировало это изучать? вин тен твикер тыж не сразу придумал. твой путь?)
@@deftrue4444 ого. загнул))) но я к тому нужноли это? мне нравиться к примеру фотошопить. знаю. учусь 7 лем лет. и всеравно тяп ляп. могу программить теоритически. но не кончиться ли так же? взял ноу экран к сожелению отсикает возможность шопить. поменять нет возможности. у праграммиромирования нет зависимости от железа. тут дело скорей в том что могу а не хочу. вопрос в том не накроеться все это без практики? что огн делал как развился в этом направлении? делать для себя тобишь в муср что ли?
Добрый вечер. Я до данного плейлиста посмотрел еще 1 плейлист у другого человека. За 20 уроков вы объяснили все что он говорил за 60. Но после синтаксиса, я как будто начал смотреть видео по другим языкам. До этого не объяснялось что такое реестр или язык cmd. А без этих знаний, мне кажется что просмотр становится отчасти бесполезным. Как будто вы стало все обьснять для более продвинутой аудитории. Где мне все это понять, чтобы просмотр стал более эффективным?
В идеале пройтись по этому плейлисту: ruclips.net/p/PL0U1uvNv2tf6DduPOCc9-IGJjdVghlvo_ Но только смотреть, не делать. Делать можно после просмотра всего листа, ибо многое уже поменялось.
@@XpucT Спасибо за такой скорый ответ. Обязательно пройдусь. Конечно здесь мне понравилось лямбда выражение, которое действительно связанно с синтаксисом и наверное упрощением читабельности кода и не только. А Нужно идти по новому плейлисту сейчас или уже после просмотра данного плейлиста?
Доброй ночи, лично Я добавляю в конце аргументов cmd: "& exit", это позволяет избавиться от останков cmd в фоновых процессах, если процесс не смог закрыться самостоятельно
Спасибо огромное! Именно то, что я искал: мне надо было, чтобы командная строка у яндекс-облака запрашивала новый токен. Большую часть параметров я нарыл верно, но что-т с синтаксисом намудрил похоже. Ваш пример заработал :) А может, сейчас понимаю, дело было просто в "/c" поля аргументов. В общем, очень полезное видео!
Спасибо тебе большое, два часа ебался с классом "Powershell", пытался заставить его работать, не смог.. нашёл твоё видео (ещё года два назад смотрел, но тогда не понадобилось), за пару минут переписал свой код согласно инструкции))) и всё заработало
Вот просто от души, жирный лайк
Еще два крутых видео на ночь, точно ночью код присниться))
Блин. Это видео просто спасительное! Спасибо!
Реальная годнота. Спасибо тебе.
Большое спасибо!
Хорошее видео спс. p.s *Какая мышка у Хачатура? Уж классно клацает*
X-738K
Насколько же у тебя крутые видео, смотрю и обучаюсь с большим удовольствием! Что думаешь по поводу MAUI?
Таким новинкам даю какое-то время на развитие. Пока рано говорить.
Но, как показывает практика, это очередная попытка сделать что-то, на что потом Microsoft успешно забьёт.
Не могу опять же точно говорить, что так будет, но так показывает практика
Привет, хотел бы узнать, как сделать возможным общение 2 твоих программ? Вроде есть что-то, как pipe. Но не понимаю, что да как. Извините, если может не ясно выразился
Пересмотрел несколько раз это видео и ещё предыдущее про лямбда выражение и как-то не могу уловить смысл. Я понял, что эта лямбда упрощает код, но не могу въехать когда лучше её использовать почему в конкретном примере мы используем именно такую запись? В предыдущем уроке вроде было понятно. Вот на примере process.OutputDataReceived += (s, e) => { label.Text += e.Data + Environment.NewLine; }; какая бы была запись без использования лямбды?
Привет 🖐
v004.radikal.ru/2111/ab/6258118893-6-f61e128384c217fd351076acdfdb5826.mp4
@@XpucT спасибо большое! Стало понятнее) Я сначала даже "вышел с этим вопросом в Интернет" и меня там гугл закидал делегатами, полез в самой вижуал студии внутрь OutputDataReceived и в итоге опять упёрся в делегаты. Почувствовал себя тупым =) Просто не сразу въехал, что есть такое по своей сути OutputDataReceived и почему мы потом пишем лямбду. Вдруг в будущем попадётся нечто подобное, а я не смогу понять что с ним делать). Как оказалось это такое же событие как какой-нибудь маус клик и т.п.. Да, в видео ты говорил, что это событие, но это как-то не отложилось в памяти и в ответе на комментарий это было продемонстрировано наглядно)
CreateNoWindow значит "не создавать окно", с английского во многих случаях нельзя переводить в таком же порядке)
*создать без окна
Подскажите как передать в командную строку вот такую команду Wbadmin start backup
Не запускается. Пишет "имя label1 не существует в данном контексте" подскажите где проблема
Для тех, у кого после всех манипуляций с кодировкой для вывода всё равно выходят иероглифы и хрен пойми что, нашёл команду для cmd, мне помогло, только русский текст всё равно отобразит символами, но так-как у меня это только имя сетевого подключения - не критично, главное что основная информация хотя бы есть: REG ADD HKCU\Console /v CodePage /t REG_DWORD /d 0xfde9
Здравствуйте. Подскажите, есть ли какое-то решение. как в уже открытую CMD, передавать команды, то есть CMD открыли отдельно и надо ее поймать, и провести с ней операции?
Добрый день.
Разве что перехват клавиш и донабор. Либо AutoIt.
Программно на C# так просто не залезешь в чужой интерфейс.
@@XpucT Понятно. Запустил gcc gdb, а подключится к нему не могу. Хотел сделать для него удобный интерфейс.
@@XpucT Спасибо. По мучался, но получилось, разобрался, на самом деле очень удобный, этот Autoit. Тут еще выяснил, что его можно подключать к C#, вообще много процессов можно упростить. Ее раз спасибо, за подсказку.
Добрый день еще раз. Не могли бы вы рассказать про консоль "как взаимодействие"? Например я по вашему материалу запускаю команду plink (из состава putty) с аргументами, однако, если я делаю запрос на сервер в первый раз, то система даже при использовании аргумента для plink "-batch" запрашивает разрешение сохранить или нет ssh ключ. С помощью вашего урока я все это читаю, а как послать на такой запрос ответ "yes" не знаю. Если не сложно просветите как это сделать?
сам понял, все получилось. Не совсем так как у Вас. Если интересно кому - обращайтесь
Привет, Хачатур! По ходу урока переписывал код, написан точь-в-точь как у тебя, но у меня программа открывает новое окно. Передал программе права админа, ситуацию не изменило
Показывает ошибку на это:
process.BeginOutputReadLine();
process.OutputDataReceived += (s, e) => { label1.Text += e.Data + "
"; };
Ошибка: Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'label1' не из того потока, в котором он был создан."
пишу все как на видео.
может что то изменилось?
Про потоки видео есть на канале и как ими управлять.
Очень познавательно! Спасибо!
Здравствуйте, искал как вытащить данные ipconfig с консоли в лейбл. наткнулся на ваше видео, написал точно так-же, но в сам лейбл ничего не выводится. есть мысли в чем может быть дело?
Попробуйте абсолютно ничего не менять в коде и вытащить другие данные. Не ipconfig
@@XpucT походу какой-то глюк случился у студии. с какого-то раза сработало и все вывело. спасибо.
А вот по поводу poweshell и команды из примера "/command get-appxpackage | ft name" у меня что в выводе, что в самом poweshell (логично) говорит о том, что не распознает команду : the term 'get-appxpackage' is not recognized as the name of a cmdlet, function, script file, or operable program. Если есть решение, был бы рад услышать, но пока что, что решения не нашёл.
какая ось? этот командлет вроде только в win10
Спасибо большое. А можете показать как вводить значения в командной строке? Например если запустить команду "time", то мы не видим что отобразилось в командной строке. А хотелось бы увидеть и суметь ввести какие значения
Консоль, как приложение и консоль как взаимодействие - немного разные.
Чтобы вводить что-то в консоль, нужно отправлять эти значения, как аргументы своему приложению.
То есть в Вашем случае, что Вы спросили, будет работать отдельный exe через простую консоль.
То есть консоль не будет являться самостоятельным приложением.
В случае с консольным приложением вы можете использовать аналогичный RedirectStandardInput. Или же можно использовать SendKeys, есть такая вещь в вин апи
ув. Хачатур привет
Можно ли менять кодировку сразу в строке Match match?
пример:
line = wc.DownloadString($"");
Match match = Regex.Match(line, " chcp 65001 & \"temp\":(.*?),(.*?)\"name\":\"(.*?)\",");
label1.Text = match.Groups[3].Value + " " + match.Groups[1].Value + " °C";
или нужно добавлять в переменную line ? типа так--->
line = wc.DownloadString($" chcp 65001 & ");
P.S. Скажи пожалуйста можно ли вывести время в реальном времени, что бы после нажатия на кнопку, в лейбл выводилось время и чтоб время обновлялось само, без нажатия на кнопку(т.е. шло в реальном времени)?
Нашёл информацию, через таймер, все работает))
void timer1_Tick(object sender, EventArgs e)
{
string date_time = DateTime.Now.ToString();
label2.Text = date_time;
}
Извините но ваш пример не работает, делал все по видео, но ничего не выводит
может, тут кто-нибудь еще обитает... не помогает смена кодировки на 1251, все равно возвращает крокозябры. В чем может быть причина?
Я читаю все комментарии. Привет.
Ты получаешь данные из cmd или что-то вызываешь через cmd?
@@XpucT Привет!
Делаю как у тебя на видео, то есть вызываю cmd с аргументом "/c chcp 1251 & ipconfig". С 65001 все в порядке.
@@XpucT Разобралась. Помогла установка StandardOutputEncoding (поставила в моем случае UTF8 и все стало ок). Спасибо :)
классный контент
Очень полезно, но мне интересно, как продолжить работу с консолью? Допустим, я написал команду "del /p file.txt", получил вывод "Удалить [Y(да)/N(нет)]?" и мне нужно для удаления написать "y" в консоль. Можно ли как-то реализовать такое?
Желательно смотреть все видео по плейлисту, там есть ответ на этот вопрос.
ruclips.net/p/PL0U1uvNv2tf6DduPOCc9-IGJjdVghlvo_
@@XpucT Понял, поищу. Спасибо.
Спасибо за урок!
Я чёт не очень понял как лучше и эффективнее завершать процессы программ, служб и тд
Cmd($"taskkill /f /im distnoted.exe" ); Так
Или так
foreach (Process process in Process.GetProcessesByName("regedit")) // Для каждого процесса, у которого имя regedit
{
process.Kill(); // Завершить процесс
}
Оба варианта рабочие, однако, когда нужно завершить процесс (по какой-то причине) в отдельном потоке, то, чтобы не создавать Task или Thread проще завершить процесс в cmd.
Спасибо тебе за уроки! У меня только запрашивает запуск программы от Админа. Может кто подсказать, как ее с с# запустить или как по умолчанию запускать в cmd всегда от админа?
ruclips.net/video/jHVTmDePWAA/видео.html
@@XpucT Спасибо!
Доброго времени суток!
Наткнулся на ваши ролики.
Долго пытаюсь понять принцыпы Power Shell, но пока безуспешно. Посоветуйте как пробить эту стену. Заранее благодарен.
PowerShell довольно медленно развивается, однако почти всё можно найти на stackoverflow.
Спасибо.
Как можно в С# (если возможно) получить параметры извне не в консольном приложении
(static void Main(string[] args)),
а в точку входа Windows Form (static void Main()).
Спасибо
С помощью dnSpy.
Здравствуйте, попробовал ваш код, но при нажатии на кнопку вылезает ошибка "Недопустимая операция в нескольких потоках: попытка доступа к элементу управления 'label1' не из того потока, в котором он был создан.". А также заметил, что если в выражении (s, a) я заменяю "a" на "e" то эта переменная подчеркивается красным. В точности повторил ваш код.
Добрый день, Володя.
Скиньте, пожалуйста, ответом весь код полностью.
Кстати, ошибка с потоками будет рассмотрена позже и объясню, как это обойти.
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Diagnostics;
namespace WindowsFormsApp2
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void Button1_Click(object sender, EventArgs e)
{
Process process = Process.Start(new ProcessStartInfo
{
FileName = "cmd",
Arguments = "/c dism /online /cleanup-image /startcomponentcleanup",
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardOutput = true
});
process.BeginOutputReadLine();
process.OutputDataReceived += (s, a) => { label1.Text += a.Data; };
}
}
}
@@XpucT Проблема решена)
System.Windows.Forms.Control.CheckForIllegalCrossThreadCalls = false;
@@ВладимирДанилин-м3к это лайфхак, но злоупотреблять не рекомендуется, потому что если будут ошибки, то Ты их просто не выловишь. Просто всегда помни, что у Тебя подключён лайфхак.
Та же история. Костыли сейчас приделаю, но почему такое происходит, не догоняю. Насчет переменной события: как вообще у Хачатура работает с переменной e, если выше этот же символ объявлен переменной события кнопки?
Хачатур не подскажешь, как в приложении winforms по нажатию на кнопку открывать в браузере по умолчанию определенную ссылку? Пробовал по твоему видосу как удалять папку через консоль , там консоль не видно, в общем очень удобно, но команда которую я ввожу не выполняется. Как можно сделать это по другому? В интернете решения не нашел. Заранее спасибо!!
Привет 🖐
Очень просто, в уроках показывал:
Process.Start("google.com");
@@XpucT Я так пробовал но вылазит ошибка: System..ComponentModel.Win32Exception: "Приложение не найдено". В интернете решение не нашел
@@mlstrbrv в системе не привязан браузер по умолчанию.
@@XpucT Спасибо большое, теперь все рабоет
Upd: Видимо в ответах к комментариям не приходят уведомления, либо они не появляются в списке.
Вставлю ответ сюда:
XpucT нет, есть консольное приложение (node.js windows сервер), от которого нужно получать логи в реальном времени (сделано, спасибо видео) и вводить команды
Теперь есть красивое приложение на C#, но команды вводить нельзя
Я видел ответ, но не понял его совершенно. В чём конкретно вопрос?
В поле ввода? Закинуть textBox и всё.
XpucT как сделать ввод команды в допустим cmd без ключей, а напрямую, как с выводом. Только здесь не cmd, а стороннее консольное приложение
Немного непонятно на том моменте, когда вы рассказываете про свойства UseChellExecute и RedirectStandardOutput, вероятно просто я тупой, но раньше я об этих вещях не где не слышал, а их описание почему то звучит для меня слишком страшно
Но в видео-то всё понятно? =)
@@XpucT да, в целом, всё чётко :)
Здравствуйте! У меня не срабатывает амперсанд. Сначала думал, что в коде, а в итоге сама консоль пишет "Неправильный формат параметра: $". В чем может быть проблема?
Добрый день.
Смотря в какой среде разработки Вы работаете. Если в старой, где C# версия ниже 4, то он не знает, что это.
Проблем в Visual Studio последней версии не может быть со знаком амперсанда.
Привет, У меня приложение плохого качества в смысле что шрифты кнопки и прочее плохо отображаются, типа блюр. Не знаешь как пофиксить ?
Привет 🖐
В свойствах формы, как минимум стоит указать шрифт, который не блюрит.
Есть по похожей теме видео: ruclips.net/video/weEjciHBEyE/видео.html
@@XpucT Спасибо за то что быстро ответил и помог :3
Зравствуйте, не знаю как исправить ошибку System.InvalidOperationException: "Поток StandardOut не был перенаправлен или процесс еще не был запущен."
работает только так
private void button1_Click(object sender, EventArgs e)
{
Process process = new Process();
process.StartInfo.FileName = "cmd";
process.StartInfo.Arguments = "/c chcp 65001 & dism /online /cleanup-image /startcomponentcleanup";
process.StartInfo.UseShellExecute = false;
process.StartInfo.CreateNoWindow = true;
process.StartInfo.RedirectStandardOutput = true;
process.Start();
process.BeginOutputReadLine();
process.OutputDataReceived += (s, a) => { label1.Text += a.Data + "
"; };
process.WaitForExit();
}
Добрый день.
Вы изучите материал, который Вам тут предоставлен, потом задайте вопрос.
А Вы свой код откуда-то взяли, причём устаревший метод объявлений.
По потокам также есть видео ruclips.net/video/vHqHrf914TA/видео.html
привет Хачатур, почему-то вылезает ошибка при запуске кода не понимаю почему , на компе я админ и в VS тоже.
private void button1_Click(object sender, EventArgs e)
{
Process process = Process.Start(new ProcessStartInfo
{
FileName = "cmd",
Arguments = "/c time /t",
UseShellExecute = false,
CreateNoWindow = true,
RedirectStandardInput = true,
}) ;
label1.Text = process.StandardOutput.ReadToEnd();
}
Сама Ошибка - StandardOut has not been redirected or the process hasn't started yet.
Привет 🖐
i.imgur.com/fepTA3e.png
@@XpucT Спасибо!!!долбанная невнимательность...
А как Писать в C# Комманды Коммандной Стороки (CMD)
Ответь Пж
Плиз
03:40 с 21 строки по 27 это что? Анонимный метод?
Давай назад, Данил и не забегай вперёд.
Про методы уже был урок. Идти в этом курсе нужно *строго последовательно* ➜ ruclips.net/p/PL05SB3rBbUsraqiEUeS70RKhVAu97nGeb
@@XpucT О, спасибо за ответ.
Да не, я уже и Шилдта прочитал на metanit сижу и все твои видео смотрел. Решил это видео пересмотреть и в голове, наверное, все перемешалось, из-за недостатка практики, я увидел здесь не то, что есть на самом деле. а Сейчас обдумал и понял.
Большое спасибо за уроки!!!
Можешь подсказать:
1. Как проверить доступ к файлу, например, для того, чтобы удалить или переименовать.
2. Как запустить child процесс с ограничением использования ресурсов CPU, оперативка
1.
try
{
stream = ТвойФайл.Open(FileMode.Open, FileAccess.Read, FileShare.None);
}
catch
{
// ТвойФайл занят и трогать нельзя
}
2.
Priority = ThreadProirity.Highest
( подробнее ruclips.net/video/vHqHrf914TA/видео.html )
XpucT Спасибо большое за ответ!!
1. Данная реализация проверяет занят ли данный файл другим процессом, а что насчет атрибутов, например, файл только для чтения, а я его хочу удалить.
2. В данном видео рассказывается о потоках, а я имел ввиду запуск командной строки с параметрами и для этой командной строки огранить использование ресурсов CPU и Memory
.
@@alex31347
1. File.SetAttributes(ПутьКфайлу, File.GetAttributes(ПутьКфайлу) & ~FileAttributes.ReadOnly);
2. Нужно искать в сети, есть ли вообще контроль управления памятью у cmd. Но что-то подсказывает, что контролировать нужно не cmd, а то, что она использует.
Кстати, окно у меня всё равно создаётся)) Похоже машинка медленная...
Уроки по WPF будут?
Только если в этом будет необходимость или народ решит сделать что-то, где требуется WPF.
Тоже пытался сделать такую программу к консольному приложению, но она не имеет такого ключа, который я могу ей отправить только когда она уже запущена.
После запуска я могу получать логи, которые собираю и отправлять команды.
Как сделать возможность *ввода* команд? И консольное приложение может очистить консоль и изменить текст на экране. Для ввода программа должна быть уже запущена (т.е поле для ввода)
Console для олдфагов. Это не наш метод.
XpucT нет, есть консольное приложение (node.js windows сервер), от которого нужно получать логи в реальном времени (сделано, спасибо видео) и вводить команды
Теперь есть красивое приложение на C#, но команды вводить нельзя
CrwateNoWindow по-любому Русские программисты делали ))) Наши любят поугарать и поиздеваться ))))
Христ, я же верно понял, что это та самая ВМ от самих микромягких?
Нет, не верно. Это бесплатный продукт от компании Oracle.
@@XpucT я про другое. Я про то, что образ от них или просто накатил винду Индуса?
@@PervertGenius Windows 10 build 1709 by xlx
@@XpucT да, окей
Я просто пока решил помучиться и попробовать поставить на VirtualBox официальный образ для разрабов (тот что с вижуалкой сразу и тд) и накатить твикер с активатором, хех
Спасибо
посмотрел ролик
увидел ответ на вопрос КАК использовать
не увидел ответ на вопрос ЗАЧЕМ
сейчас гляну следущее видео, там наверное есть ответ
Есть операции, которые намного дешевле и проще на cmd, чем на C#.
Поэтому есть возможность подключаться.
Пример из Win 10 Tweaker:
Как узнать, SSD у человека или HDD? На C# никак, на С++ никак, на VB никак. А вот на PowerShell можно.
@@XpucT
да вот нашел за пару минут
emoacht.wordpress.com/2012/11/06/csharp-ssd/
обертка для винапи
не пару строчек, зато не надо вызывать пс
но один хер я могу вызвать внешнюю утилиту и считать вывод ее из stdin и регулярками распарсить
это все равно не дает понимания смысла этих лямбд, а только больше засирает мозги синтаксисом непонятным
@@kalobyte Я это нашёл также когда-то за пару минут. Но судя по тому, что после Моего коммента Ты дал эту ссылку, Ты не очень понимаешь, что это боль в десятой степени. У кодера не должно быть принципов пилить на чистом C#. Это крайне тупо. В случае с вопросом SSD - это тупо в десятой степени. То есть 10 причин. 10 степеней боли в разных местах при использовании такого решения. Есть вопросы копирования файлов или удаления в корзину средствами подключения Basic, также Basic лучше при работе с ярлыками. Чтобы узнать какой монитор или ТВ установлен, C# не поможет. Он не настолько развит, как другие, зато легко даёт подключаться к любому другому.
Что касается чтения вывода из внешней утилиты, то эта утилита должна поддерживаться также C#. Если внешняя утилита сделана не консольным окном, а типа консольным, то не получится. Нужно гуглить примеры, скорее всего кто-то это уже делал. Точно такой же вопрос чтения с этой утилиты.
@@XpucT
дело не в принципах
есл вопрос можно решить без внешних утилит, то он должен решаться без внешних утилит, т.к. антивирусы не любят такое
насчет определить тип диска, то я думал, что есть wmi запрос к бд и вообще есть ли в системе свойства у типов хранилищ или дисков
если в апи виндовса такого нет, то там конечно будут костыли с доставкой этой инфы
и насчет типа консольным я не понял
если приложение консольное, то оно выводит данные в стандартный вывод или stderr
в шарпе же должны быть функции для принятия потока со стандартного вывода или ввода
@@kalobyte ну, уже всё было понятно с первого ответа, но после слов об антивирусах только закрепилось. Очевидно мы не найдём общий язык. Надеюсь, что найдёте ответ на свой вопрос.
многобукф. можно мативационноное видео? типо зачем с 0? ты проги делаешь этим живешь. а юзеру без практики смысл. что тебе мотевировало это изучать? вин тен твикер тыж не сразу придумал. твой путь?)
Интересная мысль. Наверно нужно будет 👍
@@XpucT люблю твою фолософию слушать)
@@deftrue4444 ого. загнул))) но я к тому нужноли это? мне нравиться к примеру фотошопить. знаю. учусь 7 лем лет. и всеравно тяп ляп. могу программить теоритически. но не кончиться ли так же? взял ноу экран к сожелению отсикает возможность шопить. поменять нет возможности. у праграммиромирования нет зависимости от железа. тут дело скорей в том что могу а не хочу. вопрос в том не накроеться все это без практики? что огн делал как развился в этом направлении? делать для себя тобишь в муср что ли?
@@deftrue4444 спасибо. многое объяснил. учту
Добрый вечер. Я до данного плейлиста посмотрел еще 1 плейлист у другого человека. За 20 уроков вы объяснили все что он говорил за 60. Но после синтаксиса, я как будто начал смотреть видео по другим языкам. До этого не объяснялось что такое реестр или язык cmd. А без этих знаний, мне кажется что просмотр становится отчасти бесполезным. Как будто вы стало все обьснять для более продвинутой аудитории. Где мне все это понять, чтобы просмотр стал более эффективным?
В идеале пройтись по этому плейлисту:
ruclips.net/p/PL0U1uvNv2tf6DduPOCc9-IGJjdVghlvo_
Но только смотреть, не делать. Делать можно после просмотра всего листа, ибо многое уже поменялось.
@@XpucT Спасибо за такой скорый ответ. Обязательно пройдусь. Конечно здесь мне понравилось лямбда выражение, которое действительно связанно с синтаксисом и наверное упрощением читабельности кода и не только. А Нужно идти по новому плейлисту сейчас или уже после просмотра данного плейлиста?
@@NewbieTM_ в идеале идти по плейлисту C# после просмотра плейлиста Windows.
очень крутой видос, спасибо. а через командную строку можно создать видеозвонок конкретному пользователю по скайпу?
Если Skype принимает такие аргументы, то да. Но нужно читать документацию.
Гуглить примерно так: Skype API calls
XpucT спасибо
@@sergeykozhemyakin7707 добрый день
У вас получилось написать код, он заработал?