Inhaltsverzeichnis

24.9.7 DBusProxy

Die Klasse DBusProxy (gb.dbus) realisiert einen Proxy (Stellvertreter) für ein D-Bus-Objekt, das von einer d-bus-fähigen Anwendung bereits am D-Bus registriert wurde. Diese Klasse kann erzeugt werden und besitzt nur die Eigenschaft Children.

Wenn Sie eine Methode aufrufen oder eine Eigenschaft lesen oder diese setzen, so gilt das nur für das Proxy-Objekt – aber nicht für das Original. Beachten Sie die Groß- und Kleinschreibung bei den Namen der Methoden oder Eigenschaften!

24.9.7.1 New DBusProxy (gb.dbus)

So erzeugen Sie zum Beispiel mit folgendem Quelltext einen Proxy für das existierende DBus-Objekt mit dem absoluten Pfad: „/org/freedesktop/NetworkManager“. Die Eigenschaft Children gibt die Namen aller aktuellen Objekt-Kinder in einem String-Array zurück. Sie erhalten den absoluten Pfad eines Kindes, indem Sie den absoluten Pfad des aktuellen Objekts mit dem Kind-Namen verketten. Dabei gilt:

  Dim i As Integer
  Dim hDBusApplication As DBusApplication
  Dim hConnection As DBusConnection
  Dim hDBusProxy As DBusProxy
  Dim sDBusName, sDBusObjectPath, sDBusInterface As String
  Dim aChildren As New String[]

  sDBusName = "org.freedesktop.NetworkManager"
  hConnection = DBus.System
  hDBusApplication = New DBusApplication(hConnection, sDBusName)

  sDBusObjectPath = "/org/freedesktop/NetworkManager"
  sDBusInterface = "org.freedesktop.NetworkManager"
  hDBusProxy = New DBusProxy(hDBusApplication, sDBusObjectPath, sDBusInterface)

  aChildren = hDBusProxy.Children

  txaReport.Insert(gb.NewLine)
  For i = 0 To aChildren.Max
    txaReport.Insert(sDBusObjectPath &/ aChildren[i] & gb.NewLine)
  Next

Diese Ausgabe wird mit der vorletzten Zeile erzeugt:

B1

Abbildung 24.9.7.1.1: Ausgabe

Das Projekt DBusNMChildren finden Sie als Projekt-Archiv im Download-Bereich.

Hinweis: Verwenden Sie alternativ DBus[Application][ObjectPath] als aktiven Proxy, denn DBus[Application][ObjectPath] erzeugt auch einen D-Bus-Proxy.

Ist das Argument für den optionalen Parameter Interface nicht angegeben, so haben Sie Zugriff auf jede Methode und alle Eigenschaften des (exportierten) Objekts. Sonst haben Sie nur Zugriff auf Methoden und Eigenschaften des angegebenen Interfaces.

24.9.7.2 Beispiele

Die folgenden Proxy-Beispiele wurden aus der Gambas-Dokumentation übernommen und verwenden konsequent die Syntax DBus[Application][ObjectPath]:

' The lock() method call locks the screen.
DBus["org.kde.krunner"]["/ScreenSaver"].lock()
' A method call is used to check whether compositing is active.
If DBus["org.kde.kwin"]["/KWin"].compositingActive() Then Print "Compositing is active!"
' Get a password from KDE wallet
Dim sLocalWallet As String = DBus["org.kde.kwalletd"]["/modules/kwalletd"].localWallet()
Dim sWalletId As String=DBus["org.kde.kwalletd"]["/modules/kwalletd"].open(sLocalWallet, Application.Title)
Dim sPassword As String = DBus["org.kde.kwalletd"]["/modules/kwalletd"].readPassword(Application.Name, sWalletId, "login", Application.Title)
' Sets the geometry property of the KMail window.
DBus["org.kde.kmail"]["/kmail/kmail_mainwindow_1"].geometry = [0, 24, 1024, 768]
 

Download