Yo ya gnomers, c'est ce que vous obtenez pour utiliser la merde CORBA.
Il n'y a 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é, tel que KDE-plasma, vous n'auriez pas eu ce problème, car vous auriez pu utiliser dbus depuis n'importe quel logiciel, 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 d'aucune utilité, puisque vous n'avez pas de klipper, mais j'ai pensé le mentionner quand même, juste pour vous embêter avec la façon dont c'est fait correctement.
PS : Ne copiez pas ce code C#, Task.Result pourrait se bloquer.
private static async System.Threading.Tasks.Task<string> 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<IKlipper>(service, objectPath);
clipboardContents = await klipper.getClipboardContentsAsync();
} // End Using connection
return clipboardContents;
}
private static string GetClipboardContents()
{
return GetClipboardContentsAsync().Result;
}
private static async System.Threading.Tasks.Task SetClipboardContentsAsync(string text)
{
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<IKlipper>(service, objectPath);
await klipper.setClipboardContentsAsync(text);
} // End using connection
}
private static void SetClipboardContents(string text)
{
SetClipboardContentsAsync(text).Wait();
}