Usuário com melhor resposta
Pegar um valor do Prompt de comando para um textbox.

Pergunta
-
Olá pessoal.
A minha duvida é o seguinte:
Tenho um bat (arquivo de lote), ela me traz algumas informações extraída da rede, no prompt de comando exemplo:wmic /node:hostname computersystem get username
Este comando me traz o nome do usuário que esta logado em determinada maquina.
Eu quero pegar este nome e colocar em um Textbox.
Será que existe essa possibilidade?
Respostas
-
Olá Marcelo,
fiz um exemplo completo, inclusive utilizando Tratamento de Exceções e o objeto BackgroundWorker que permite que sua aplicação continue em execução enquanto o processo é rodado.
Eu fiz um comando básico, no caso foi o ping.
Para o seu comando "wmic", peço que verifique se o comando está no Path do Windows ou na pasta da aplicação.
Pois pode ser que o sistema não está encontrando, e por isso não retorna nada ok.
Segue o exemplo na Íntegra:
Form1.cs
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; namespace WindowsFormsPrompt { public partial class Form1 : Form { private BackgroundWorker objBackgroundWorker = null; public Form1() { InitializeComponent(); } private void btnExecutar_Click(object sender, EventArgs e) { // Limpa os campos lblStatus.Text = ""; txtResultado.Text = ""; // Configura os Eventos do objeto BackgroundWorker objBackgroundWorker = new BackgroundWorker(); objBackgroundWorker.WorkerReportsProgress = true; objBackgroundWorker.DoWork += new DoWorkEventHandler(objBackgroundWorker_DoWork); objBackgroundWorker.ProgressChanged += new ProgressChangedEventHandler(objBackgroundWorker_ProgressChanged); objBackgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(objBackgroundWorker_RunWorkerCompleted); objBackgroundWorker.RunWorkerAsync(); } private void objBackgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { lblStatus.Text = "Processo encerrado."; this.Cursor = Cursors.Default; } private void objBackgroundWorker_ProgressChanged(object sender, ProgressChangedEventArgs e) { // Muda o Cursor do Formulário this.Cursor = Cursors.WaitCursor; // Mostra o andamento na barra de Status lblStatus.Text = e.UserState.ToString(); // Adiciona o conteúdo do Andamento de retorno do processo em uma caixa de texto if (e.ProgressPercentage == 1) // Aqui é verificado se o Progresso é 1, para adicionar na caixa de texto. { txtResultado.AppendText(e.UserState.ToString() + Environment.NewLine); } } private void objBackgroundWorker_DoWork(object sender, DoWorkEventArgs e) { try { // Configuração do que será executado. System.Diagnostics.ProcessStartInfo info = new System.Diagnostics.ProcessStartInfo("ping"); info.Arguments = "www.uol.com.br"; info.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; info.RedirectStandardOutput = true; info.UseShellExecute = false; info.CreateNoWindow = true; // Atualiza Progresso objBackgroundWorker.ReportProgress(0, "Iniciando processo..."); objBackgroundWorker.ReportProgress(0, Environment.NewLine + info.FileName + " " + info.Arguments); // Processamento da execução System.Diagnostics.Process processo = new System.Diagnostics.Process(); processo.StartInfo = info; processo.Start(); // Captura do Retorno string linha; while ((linha = processo.StandardOutput.ReadLine()) != null) { objBackgroundWorker.ReportProgress(1, linha); // Ao marcar o progresso como 1, eu indico que ele irá aparecer na minha caixa de texto. } // Aguarda o termino para sair. processo.WaitForExit(); } catch (Exception ex) { MessageBox.Show(ex.Message); } } } }
Form1.Designer.cs
namespace WindowsFormsPrompt { partial class Form1 { /// <summary> /// Required designer variable. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// Clean up any resources being used. /// </summary> /// <param name="disposing">true if managed resources should be disposed; otherwise, false.</param> protected override void Dispose(bool disposing) { if (disposing && (components != null)) { components.Dispose(); } base.Dispose(disposing); } #region Windows Form Designer generated code /// <summary> /// Required method for Designer support - do not modify /// the contents of this method with the code editor. /// </summary> private void InitializeComponent() { this.btnExecutar = new System.Windows.Forms.Button(); this.txtResultado = new System.Windows.Forms.TextBox(); this.lblStatus = new System.Windows.Forms.Label(); this.SuspendLayout(); // // btnExecutar // this.btnExecutar.Location = new System.Drawing.Point(218, 187); this.btnExecutar.Name = "btnExecutar"; this.btnExecutar.Size = new System.Drawing.Size(261, 52); this.btnExecutar.TabIndex = 1; this.btnExecutar.Text = "Executar"; this.btnExecutar.UseVisualStyleBackColor = true; this.btnExecutar.Click += new System.EventHandler(this.btnExecutar_Click); // // txtResultado // this.txtResultado.Location = new System.Drawing.Point(13, 13); this.txtResultado.Multiline = true; this.txtResultado.Name = "txtResultado"; this.txtResultado.ReadOnly = true; this.txtResultado.ScrollBars = System.Windows.Forms.ScrollBars.Both; this.txtResultado.Size = new System.Drawing.Size(672, 162); this.txtResultado.TabIndex = 2; // // lblStatus // this.lblStatus.BorderStyle = System.Windows.Forms.BorderStyle.FixedSingle; this.lblStatus.Dock = System.Windows.Forms.DockStyle.Bottom; this.lblStatus.Location = new System.Drawing.Point(0, 252); this.lblStatus.Name = "lblStatus"; this.lblStatus.Size = new System.Drawing.Size(697, 29); this.lblStatus.TabIndex = 3; this.lblStatus.TextAlign = System.Drawing.ContentAlignment.MiddleCenter; // // Form1 // this.AutoScaleDimensions = new System.Drawing.SizeF(6F, 13F); this.AutoScaleMode = System.Windows.Forms.AutoScaleMode.Font; this.ClientSize = new System.Drawing.Size(697, 281); this.Controls.Add(this.lblStatus); this.Controls.Add(this.txtResultado); this.Controls.Add(this.btnExecutar); this.MaximizeBox = false; this.Name = "Form1"; this.StartPosition = System.Windows.Forms.FormStartPosition.CenterScreen; this.Text = "Executa Shell"; this.ResumeLayout(false); this.PerformLayout(); } #endregion private System.Windows.Forms.Button btnExecutar; private System.Windows.Forms.TextBox txtResultado; private System.Windows.Forms.Label lblStatus; } }
Att, Lucio Rogerio
Espero ter ajudado, se ajudei, por favor "Vote como Útil", e se resolvi seu problema, clique em "Propor como Resposta".- Sugerido como Resposta CarlosEduardo Ferreira quarta-feira, 17 de junho de 2015 14:41
- Marcado como Resposta Cristopher C I_ quinta-feira, 18 de junho de 2015 18:31
quarta-feira, 17 de junho de 2015 12:58
Todas as Respostas
-
Bom dia Marcelo.
Muito obrigado por sua participação no Fórum.
Por gentileza, verifique este link, ele contem informações importantes referentes a sua dúvida.
Excelente semana
Abraços
- Editado Cristopher C I_ terça-feira, 2 de junho de 2015 14:11 link
-
Sim pode fazê-lo, segue exemplo abaixo:
Process processo = new Process(); processo.StartInfo.FileName = "wmic"; processo.StartInfo.Arguments = "/node:hostname computersystem get username"; processo.StartInfo.WindowStyle = ProcessWindowStyle.Minimized; processo.Start(); //Pega retorno var retorno = processo.ExitCode; TextBox1.Text = retorno.ToString();
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel
-
-
-
-
-
Olá consegui de uma forma diferente, segue abaixo:
public void getSerial(string Serial) { //capturar o numero de serie Serial = txbHostName.Text; Process cmdProcess = null; cmdProcess = new Process(); // executa os parametros do wmic com o nome do host capturado na variavel nome1 cmdProcess.StartInfo.Arguments = "/node: " + Serial + " bios get serialnumber"; // executa o comando wmic cmdProcess.StartInfo.FileName = "wmic.exe"; // Redirect stdout cmdProcess.StartInfo.RedirectStandardOutput = true; // Set to false, otherwise you can't redirect stdout cmdProcess.StartInfo.UseShellExecute = false; // Start process if (cmdProcess.Start()) { // variavel nome recebe o resultado string nome = cmdProcess.StandardOutput.ReadToEnd(); //exclui a cadeia de caracteres a partir do numero dois para a esquerda //textBox1.Text = nome.Substring(nome.LastIndexOf("i") + 2); txb_NSerie.Text = (nome.Substring(13).Trim()); } else
Só que quando, ele processa este código ele abre a janela de prompt, executa e fecha.
Tem como executar o código sem aparecer a janela de prompt, como se executasse oculto, sem mostrar a janela de prompt? -
Usa o "WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;" do código de Lucio Rogerio SP que consegue, analise o código dele ja faz o que precisa.
A vantagem de ser inteligente é que podemos fingir que somos imbecis enquanto ao contrario é completamente impossivel