Yo ya gnomers, c'est ce que vous obtenez en utilisant des bêtises CORBA.
Rien de mieux pour votre logiciel que d'utiliser des outils qui ne sont pas installés par défaut.
Si vous aviez utilisé un environnement de bureau approprié, comme KDE-plasma, vous n'auriez pas ce problème, car vous pourriez simplement utiliser dbus, à partir de n'importe quel logiciel que vous aimez, par exemple, la console :
qdbus org.kde.klipper /klipper setClipboardContents "NiHao"
qdbus org.kde.klipper /klipper getClipboardContents
Personnellement, je me connecte directement à dbus avec C#, ce qui signifie que je n'ai pas besoin de qdbus.
Cela ne vous sera probablement pas utile, puisque vous n'avez pas klipper, mais je me suis dit que je mentionnerais quand même, juste pour vous ennuyer avec la manière dont cela se fait correctement.
PS: Ne copiez pas ce code C#, Task.Result pourrait provoquer un blocage.
private static async System.Threading.Tasks.Task GetClipboardContentsAsync()
{
string clipboardContents = null;
Tmds.DBus.ObjectPath objectPath = new Tmds.DBus.ObjectPath("/klipper");
string service = "org.kde.klipper";
using (Tmds.DBus.Connection connection = new Tmds.DBus.Connection(Tmds.DBus.Address.Session))
{
await connection.ConnectAsync();
IKlipper klipper = connection.CreateProxy(service, objectPath);
clipboardContents = await klipper.getClipboardContentsAsync();
} // Fin Using connection
return clipboardContents;
}
private static string GetClipboardContents()
{
return GetClipboardContentsAsync().Result;
}
private static async System.Threading.Tasks.Task SetClipboardContentsAsync(string texte)
{
Tmds.DBus.ObjectPath objectPath = new Tmds.DBus.ObjectPath("/klipper");
string service = "org.kde.klipper";
using (Tmds.DBus.Connection connection = new Tmds.DBus.Connection(Tmds.DBus.Address.Session))
{
await connection.ConnectAsync();
IKlipper klipper = connection.CreateProxy(service, objectPath);
await klipper.setClipboardContentsAsync(texte);
} // Fin using connection
}
private static void SetClipboardContents(string texte)
{
SetClipboardContentsAsync(texte).Wait();
}