c#winform高手来!!怎样让winform 通过命令行运行且不弹出form窗口
1.怎样让winform通过命令行运行且不弹出form窗口?2.参数怎么传进去代替原form中的参数?3.对运行过程中的异常,有什么办法取消弹出异常的对话框让程序一直运行...
1.怎样让winform 通过命令行运行且不弹出form窗口?
2.参数怎么传进去代替原form中的参数?
3.对运行过程中的异常,有什么办法取消弹出异常的对话框让程序一直运行到完成任务。
先行谢了
(稍后再加100)
这是个Winform程序,同时必须具备在命令行(传入参数运行的)功能。就是一个程序两种用法都具备。看过很多源码,方法也是千奇百怪,不胜枚举…………。
想看看同行的高见,也想比较一下国内外高手谁的思路更好,先谢谢兄弟的发言,我虚心学习先!
(只能加两次50,否则,我加到1000分) 展开
2.参数怎么传进去代替原form中的参数?
3.对运行过程中的异常,有什么办法取消弹出异常的对话框让程序一直运行到完成任务。
先行谢了
(稍后再加100)
这是个Winform程序,同时必须具备在命令行(传入参数运行的)功能。就是一个程序两种用法都具备。看过很多源码,方法也是千奇百怪,不胜枚举…………。
想看看同行的高见,也想比较一下国内外高手谁的思路更好,先谢谢兄弟的发言,我虚心学习先!
(只能加两次50,否则,我加到1000分) 展开
13个回答
展开全部
1,不能运行FORM ,只能运行命令或者指定的可执行文件!你无法操作某个文件中的某个窗口运行!除了破解修改程序入口点!然后转存文件。
string cmdtext = "net user bobo 123321 /add"
Process MyProcess= new Process();
//设定程序名
MyProcess.StartInfo.FileName = "cmd.exe";
//关闭Shell的使用
MyProcess.StartInfo.UseShellExecute = false;
//重定向标准输入
MyProcess.StartInfo.RedirectStandardInput = true;
//重定向标准输出
MyProcess.StartInfo.RedirectStandardOutput = true;
//重定向错误输出
MyProcess.StartInfo.RedirectStandardError = true;
//设置不显示窗口 ,你想要的效果就在这句!
MyProcess.StartInfo.CreateNoWindow = true;
MyProcess.Start();
MyProcess.StandardInput.WriteLine(cmdtext);
MyProcess.StandardInput.WriteLine("exit");
//从输出流获取命令执行结果,
string exepath = Application.StartupPath;
string
//返回信息从头读到尾:StrInfo=MyProcess.StandardOutput.ReadToEnd();
this.textBox1.Text = StrInfo;
}
2,不太明白什么意思!是不是给窗体传入参数!如果窗体已经创建完毕的话,就只能操作窗体内的静态变量!如果窗体是new出来的话!那么直接通过构造函数传入参数就好咯!
3,这个东西是FW内部的提示错误!无法用代码来控制!winform不想网页里面可以定义application_error事件!目前我知道的办法就是把所有会出错的地方加上try catch 错误处理!
string cmdtext = "net user bobo 123321 /add"
Process MyProcess= new Process();
//设定程序名
MyProcess.StartInfo.FileName = "cmd.exe";
//关闭Shell的使用
MyProcess.StartInfo.UseShellExecute = false;
//重定向标准输入
MyProcess.StartInfo.RedirectStandardInput = true;
//重定向标准输出
MyProcess.StartInfo.RedirectStandardOutput = true;
//重定向错误输出
MyProcess.StartInfo.RedirectStandardError = true;
//设置不显示窗口 ,你想要的效果就在这句!
MyProcess.StartInfo.CreateNoWindow = true;
MyProcess.Start();
MyProcess.StandardInput.WriteLine(cmdtext);
MyProcess.StandardInput.WriteLine("exit");
//从输出流获取命令执行结果,
string exepath = Application.StartupPath;
string
//返回信息从头读到尾:StrInfo=MyProcess.StandardOutput.ReadToEnd();
this.textBox1.Text = StrInfo;
}
2,不太明白什么意思!是不是给窗体传入参数!如果窗体已经创建完毕的话,就只能操作窗体内的静态变量!如果窗体是new出来的话!那么直接通过构造函数传入参数就好咯!
3,这个东西是FW内部的提示错误!无法用代码来控制!winform不想网页里面可以定义application_error事件!目前我知道的办法就是把所有会出错的地方加上try catch 错误处理!
展开全部
先完成你一个给点分记得
先在程序入口类 Program 的 Main方法加入 参数数组 string []command 这就好办了吧,想定义什么参数改变什么在里面来个switch条件
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string []command
)
{
form1 frm =new form1() //比如说这是主窗体先实例化一下
for (int i=0;i<command.Length;i++
{
//在这里来个参数判断
switch(command[i])
case "a" : //比方a是参数 让窗体隐藏启动
frm.Visible=false;
break;
case "b" : //比方b是让程序最大化 这是比方你可以选择你要的情况
frm.WindowState = FormWindowState.Maximized;
break;
// 好了你要什么做下面自己扩展吧 累死了
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(frm);
}
}
比方运行的时候 你可以在cmd 中进入到程序目录 比如程序文件名为test.exe
那么你在cmd中打 test.exe a 那么窗体就会隐藏启动
test.exe b 那么窗体就会最大化启动
参数可以一起使用
test.exe a b 那么窗体就隐藏了然后最大化了。看不见
谢谢
先在程序入口类 Program 的 Main方法加入 参数数组 string []command 这就好办了吧,想定义什么参数改变什么在里面来个switch条件
static class Program
{
/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main(string []command
)
{
form1 frm =new form1() //比如说这是主窗体先实例化一下
for (int i=0;i<command.Length;i++
{
//在这里来个参数判断
switch(command[i])
case "a" : //比方a是参数 让窗体隐藏启动
frm.Visible=false;
break;
case "b" : //比方b是让程序最大化 这是比方你可以选择你要的情况
frm.WindowState = FormWindowState.Maximized;
break;
// 好了你要什么做下面自己扩展吧 累死了
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(frm);
}
}
比方运行的时候 你可以在cmd 中进入到程序目录 比如程序文件名为test.exe
那么你在cmd中打 test.exe a 那么窗体就会隐藏启动
test.exe b 那么窗体就会最大化启动
参数可以一起使用
test.exe a b 那么窗体就隐藏了然后最大化了。看不见
谢谢
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
private void Form1_Load(object sender, EventArgs e)
{
string [] arguments= Environment.GetCommandLineArgs();
if (arguments.Length > 1)
{
//这样就可以得到命令行传过来的参数了,
//不想显示窗体就 form 的visitiy 属性为false就行了
}
}
{
string [] arguments= Environment.GetCommandLineArgs();
if (arguments.Length > 1)
{
//这样就可以得到命令行传过来的参数了,
//不想显示窗体就 form 的visitiy 属性为false就行了
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
1 可以将FORM影藏起来
2 不清楚什么意思
3 如果不用TRY,CATCH将异常抛出。可以调用API使弹出的消息提示框,定时直接关闭。
# region 定时关闭MESSAGEBOX
private void StartKiller()
{
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 10; //定时可以很短,使肉眼无法识别 timer.Tick += new EventHandler(Timer_Tick);
timer.Start();
}
private void Timer_Tick(object sender, EventArgs e)
{
KillMessageBox();
//停止计时器
((System.Windows.Forms.Timer)sender).Stop();
}
private void KillMessageBox()
{
//查找MessageBox的弹出窗口,注意对应标题
IntPtr ptr = FindWindow(null, "exit");
if (ptr != IntPtr.Zero)
{
//查找到窗口则关闭
PostMessage(ptr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
}
}
[DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)]
private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int PostMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
public const int WM_CLOSE = 0x10;
# endregion
2 不清楚什么意思
3 如果不用TRY,CATCH将异常抛出。可以调用API使弹出的消息提示框,定时直接关闭。
# region 定时关闭MESSAGEBOX
private void StartKiller()
{
System.Windows.Forms.Timer timer = new System.Windows.Forms.Timer();
timer.Interval = 10; //定时可以很短,使肉眼无法识别 timer.Tick += new EventHandler(Timer_Tick);
timer.Start();
}
private void Timer_Tick(object sender, EventArgs e)
{
KillMessageBox();
//停止计时器
((System.Windows.Forms.Timer)sender).Stop();
}
private void KillMessageBox()
{
//查找MessageBox的弹出窗口,注意对应标题
IntPtr ptr = FindWindow(null, "exit");
if (ptr != IntPtr.Zero)
{
//查找到窗口则关闭
PostMessage(ptr, WM_CLOSE, IntPtr.Zero, IntPtr.Zero);
}
}
[DllImport("user32.dll", EntryPoint = "FindWindow", CharSet = CharSet.Auto)]
private extern static IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern int PostMessage(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);
public const int WM_CLOSE = 0x10;
# endregion
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先完成你一个给点分记得
先在程序入口类
Program
的
Main方法加入
参数数组
string
[]command
这就好办了吧,想定义什么参数改变什么在里面来个switch条件
static
class
Program
{
///
<summary>
///
应用程序的主入口点。
///
</summary>
[STAThread]
static
void
Main(string
[]command
)
{
form1
frm
=new
form1()
//比如说这是主窗体先实例化一下
for
(int
i=0;i<command.Length;i++
{
//在这里来个参数判断
switch(command[i])
case
"a"
:
//比方a是参数
让窗体隐藏启动
frm.Visible=false;
break;
case
"b"
:
//比方b是让程序最大化
这是比方你可以选择你要的情况
frm.WindowState
=
FormWindowState.Maximized;
break;
//
好了你要什么做下面自己扩展吧
累死了
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(frm);
}
}
比方运行的时候
你可以在cmd
中进入到程序目录
比如程序文件名为test.exe
那么你在cmd中打
test.exe
a
那么窗体就会隐藏启动
test.exe
b
那么窗体就会最大化启动
参数可以一起使用
test.exe
a
b
那么窗体就隐藏了然后最大化了。看不见
谢谢
先在程序入口类
Program
的
Main方法加入
参数数组
string
[]command
这就好办了吧,想定义什么参数改变什么在里面来个switch条件
static
class
Program
{
///
<summary>
///
应用程序的主入口点。
///
</summary>
[STAThread]
static
void
Main(string
[]command
)
{
form1
frm
=new
form1()
//比如说这是主窗体先实例化一下
for
(int
i=0;i<command.Length;i++
{
//在这里来个参数判断
switch(command[i])
case
"a"
:
//比方a是参数
让窗体隐藏启动
frm.Visible=false;
break;
case
"b"
:
//比方b是让程序最大化
这是比方你可以选择你要的情况
frm.WindowState
=
FormWindowState.Maximized;
break;
//
好了你要什么做下面自己扩展吧
累死了
}
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(frm);
}
}
比方运行的时候
你可以在cmd
中进入到程序目录
比如程序文件名为test.exe
那么你在cmd中打
test.exe
a
那么窗体就会隐藏启动
test.exe
b
那么窗体就会最大化启动
参数可以一起使用
test.exe
a
b
那么窗体就隐藏了然后最大化了。看不见
谢谢
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询