Rob L's approccio è un po 'pericoloso in quanto invierà un Invio per la finestra attiva. Un approccio migliore è quello di inviare effettivamente l'Invio al processo corretto (console).
ecco come
internal static class NativeMethods
{
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool AllocConsole();
[DllImport("kernel32.dll", SetLastError = true)]
internal static extern bool FreeConsole();
[DllImport("kernel32", SetLastError = true)]
internal static extern bool AttachConsole(int dwProcessId);
[DllImport("user32.dll")]
internal static extern IntPtr GetForegroundWindow();
[DllImport("user32.dll", SetLastError = true)]
internal static extern uint GetWindowThreadProcessId(IntPtr hWnd, out int lpdwProcessId);
[DllImport("User32.Dll", EntryPoint = "PostMessageA")]
internal static extern bool PostMessage(IntPtr hWnd, uint msg, int wParam, int lParam);
internal const int VK_RETURN = 0x0D;
internal const int WM_KEYDOWN = 0x100;
}
--snip--
bool attached = false;
// Get uppermost window process
IntPtr ptr = NativeMethods.GetForegroundWindow();
int u;
NativeMethods.GetWindowThreadProcessId(ptr, out u);
Process process = Process.GetProcessById(u);
if (string.Compare(process.ProcessName, "cmd", StringComparison.InvariantCultureIgnoreCase) == 0)
{
// attach to the current active console
NativeMethods.AttachConsole(process.Id);
attached = true;
}
else
{
// create new console
NativeMethods.AllocConsole();
}
Console.Write("your output");
NativeMethods.FreeConsole();
if (attached)
{
var hWnd = process.MainWindowHandle;
NativeMethods.PostMessage(hWnd, NativeMethods.WM_KEYDOWN, NativeMethods.VK_RETURN, 0);
}
Questa soluzione è costruire sul codice che si trova qui:
http://www.jankowskimichal.pl/en/2011/12/wpf-hybrid-application-with-parameters/
Avete mai capito questo? Ho la stessa cosa e sarei interessato a sapere se c'è un lavoro in giro. – cgyDeveloper
No, non l'ho fatto. Scusate. – Clangon
Lo stesso problema qui. L'utente si trova su una riga di comando standard, ma il prompt non viene visualizzato (finché non si preme Invio, per visualizzarlo di nuovo) –