0
我有一個外部應用程序,它生成一些數據並在運行時存儲它(它是一個窗口應用程序 - 而不是控制檯應用程序)。現在我正在創建自己的應用程序來分析這些數據。問題是外部軟件必須同時運行。隱藏另一個應用程序,同時保持它活動
當用戶打開我的應用程序時,我希望它自動啓動外部應用程序並隱藏它。我在這個話題上搜索了很多,並嘗試了一些我發現的建議。首先我試過:
Process p = new Process();
p.StartInfo.FileName = @"c:\app.exe";
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.UseShellExecute = false;
p.StartInfo.WorkingDirectory = @"c:\";
p.StartInfo.CreateNoWindow = true;
p.Start();
這會啓動外部應用程序,但不會隱藏它。 我再讀取該命令PROMT可以隱藏應用程序:
ProcessStartInfo psi = new ProcessStartInfo("cmd.exe", "/c \""c:\app.exe\"");
psi.UseShellExecute = false;
psi.CreateNoWindow = true;
psi.WindowStyle = ProcessWindowStyle.Hidden;
Process.Start(psi);
這再次啓動該應用程序非隱藏。
然後我想到啓動應用程序,然後隱藏它。我發現以下內容:
[DllImport("user32.dll")]
public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
var Handle = FindWindow(null, "Application Caption");
ShowWindow(Handle, 0);
這會隱藏窗口。問題是應用程序在此狀態下處於非活動狀態,並且不會生成任何數據。
編輯:我更接近一個可接受的解決方案(最小化而不是隱藏)。由於外部應用程序是有點慢啓動,我做到以下幾點:
Process p = new Process();
p.StartInfo.FileName = @"c:\app.exe";
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.UseShellExecute = false;
p.StartInfo.WorkingDirectory = @"c:\";
p.StartInfo.CreateNoWindow = true;
p.Start();
while (true)
{
int style = GetWindowLong(psi.MainWindowHandle, -16); // -16 = GWL_STYLE
if ((style & 0x10000000) != 0) // 0x10000000 = WS_VISIBLE
{
ShowWindow(psi.MainWindowHandle, 0x06);
break;
}
Thread.Sleep(200);
}
這也不管用,但我相信這是正確的方向邁出的一步。
有沒有辦法啓動和隱藏外部應用程序,同時保持它的活動?
問候
由於禁用窗口時隱藏應用程序不規範的行爲,似乎不太可能任何人都可以幫助你不瞭解具體的應用程序。 –