通过一些示例代码的工作后,我实现了一个后台工作人员,做到了这一点。欲了解更多信息,请致电From msdn - How to: Use a Background Worker。
我试图找到一种更可靠的方法来确保应用程序处理F11命令,但现在我已将Send.Seep之前放入了一个Thread.Sleep。
请随时留下意见或问题。
[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool SetForegroundWindow(IntPtr hWnd);
Process p;
//Process p is initialized: p = Process.Start(@"<path\application.exe>");
Form2 oForm;
private void transition()
{
BackgroundWorker bw = new BackgroundWorker();
oForm = new Form2();
bw.DoWork += new DoWorkEventHandler(bw_DoWork);
bw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bw_RunWorkerCompleted);
oForm.Show();
if (bw.IsBusy != true)
{
bw.RunWorkerAsync();
}
}
private void bw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
oForm.closethis();
}
private void bw_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
if ((worker.CancellationPending == true))
{
e.Cancel = true;
}
else
{
SetForegroundWindow(p.MainWindowHandle);
p.WaitForInputIdle(3000);
System.Threading.Thread.Sleep(500);
SendKeys.SendWait("{F11}");
//Sends the application into full screen mode
}
}
而且对于进出淡出形式代码..
public partial class Form2 : Form
{
public Form2()
{
this.Visible = false;
this.Opacity = 0;
InitializeComponent();
this.TopMost = true;
this.Visible = true;
while (this.Opacity < 1)
{
this.Opacity += .05;
Thread.Sleep(5);
this.TopMost = true;
}
}
private void closefade()
{
while (this.Opacity > 0)
{
this.Opacity -= .05;
Thread.Sleep(5);
this.TopMost = true;
}
this.Close();
}
delegate void CloseBack();
public void closethis()
{
if (this.InvokeRequired)
{
CloseBack b = new CloseBack(closethis);
}
else
closefade();
}
}
谢谢你的想法。我正在寻找一名后台工作人员加载可能会减少加载时间的演示文稿。 但是为了澄清,我只有一个简报演示文稿,我已经设法通过使用shell主机将其嵌入到winform中来处理它。另一个程序显示有效的CNC机床,不能通过COM接口进行控制。在我等待进程闲置后,我必须使用SetForegroundWindow和SendKeys,才能启用全屏模式。 转换工作正常,但用户可以观看应用程序切换和窗口随时洗牌并调整大小。 – 2011-05-17 18:58:53