Ich habe eine Konsolenanwendung mit einem Befehlsinterpreter erstellt. Um die Dinge einfacher zu machen, musste ich Unterstützung für das Lesen der Zwischenablage hinzufügen, wenn ctrl + v gedrückt wird. Wenn ich Strg + V drücke, sehe ich das Symbol ^V in der Konsole, also ersetze ich dieses Zeichen durch den Text der Zwischenablage. Nach etwas googeln habe ich herausgefunden, dass die Zwischenablage von System.Windows.Forms.Clipboard.GetText() zugegriffen werden kann.Gibt es eine einfachere Möglichkeit, die Windows-Funktion ctrl + v (Einfügen) in einer C# -Konsolenanwendung zu verwenden?
Meine Frage ist: Gibt es eine bessere Lösung zum Hinzufügen von Zwischenablage-Unterstützung zu einer Konsolenanwendung? Möglicherweise ohne System.Windows.Forms.Clipboard? Vielleicht kann ein Interop-Anruf den Trick machen?
Einer der Nachteile dieser Lösung ist, dass die Zwischenablage nur funktioniert, wenn der Thread als [STAThread] definiert ist. Es wäre auch viel schöner, wenn ich das^V-Symbol loswerden könnte.
Dies ist der Code der aktuellen Lösung:
using System;
using System.Threading;
using System.Windows.Forms;
namespace ConsoleApplication1
{
class Program
{
public static readonly string ClipboardChar = Convert.ToChar(22).ToString();
[STAThread]
static void Main(string[] args)
{
Console.Write("Do some pastin': ");
//read
Console.ForegroundColor = ConsoleColor.White;
string result = Console.ReadLine();
Console.ResetColor();
//read keyboard
if (result.Contains(ClipboardChar))
{
result = result.Replace(ClipboardChar, Clipboard.GetText());
}
//write result
Console.WriteLine("\nResult: ");
Console.ForegroundColor = ConsoleColor.White;
Console.WriteLine(result);
Console.ResetColor();
Console.WriteLine("\nPress any key to continue...");
Console.ReadKey();
}
}
}
Warum ... möchten Sie keinen Verweis auf System.Windows.Forms? Es ist eine Standard-.NET-Bibliothek, sodass Ihre Anwendung bei der Bereitstellung nicht größer wird. Und wenn Sie eine andere Methode verwenden, wird der Start Ihrer Anwendung sowieso langsamer – Martheen
Wie wäre es langsamer? Ich habe der Frage einige Nachteile der aktuellen Lösung hinzugefügt: Einer der Nachteile dieser Lösung ist, dass die Zwischenablage nur funktioniert, wenn der Thread als [STAThread] definiert ist. Es wäre auch viel schöner, wenn ich das^V-Symbol loswerden könnte. –
zu anderen Hinweis, finden Sie diese Artikel auf Erweiterung Konsole API von .NET nützlich: http://www.devsource.com/c/a/Using-VS/Console-Input-in-NET/, http: // www.devsource.com/c/a/Using-VS/Working-with-Console-Screen-Buffers-in-NET/1/ – VinayC