Code: Alles auswählen
Procedure PowerManagement(Command: Pchar);
Const
HAL_DBUS_SERVICE = 'org.freedesktop.Hal';
HAL_ROOT_COMPUTER = '/org/freedesktop/Hal/devices/computer';
HAL_DBUS_INTERFACE_POWER = 'org.freedesktop.Hal.Device.SystemPowerManagement';
Var
connection: PDBusConnection;
mess, reply: PDBusMessage;
error: DBusError;
exit_code: integer;
Begin
dbus_error_init(@error);
connection := dbus_bus_get(DBUS_BUS_SYSTEM, @error);
If (dbus_error_is_set(@error) <> 0) Then Begin
//printf("Unable to connect to the daemon bus: %s",error.message);
dbus_error_free(@error);
exit;
End;
mess := dbus_message_new_method_call(HAL_DBUS_SERVICE,
HAL_ROOT_COMPUTER,
HAL_DBUS_INTERFACE_POWER,
Command);
If (mess = Nil) Then Begin
//printf("Out of memory");
exit;
End;
reply := dbus_connection_send_with_reply_and_block(connection,
mess,
-1, // Default DBus timeout
@error);
dbus_message_unref(mess);
If (dbus_error_is_set(@error) <> 0) Then Begin
//printf("Error occured while trying to hibernate: %s", error.message);
dbus_error_free(@error);
exit;
End;
If (reply = Nil) Then Begin
//printf("Message hibernate didn't get a reply");
exit;
End;
// If we have received a reply then there is a return code from the util that HAL executed
Case (dbus_message_get_type(reply)) Of
DBUS_MESSAGE_TYPE_METHOD_RETURN: Begin
dbus_message_get_args(reply, Nil,
DBUS_TYPE_INT32,
[@exit_code,
DBUS_TYPE_INVALID]);
dbus_message_unref(reply);
exit;
End;
DBUS_MESSAGE_TYPE_ERROR: Begin
dbus_message_unref(reply);
//printf("Error occured while trying to hibernate");
End;
End;
dbus_connection_unref(connection);
End;
Aufruf mit
PowerManagement('Hibernate');
PowerManagement('Shutdown');
Aber wenn ich das richtig Lese was du da schriebst, muss ich dich um deinen Code bitten, noch bin ich unter Kubuntu 10.4 aber morgen wird Kubuntu 10.10 released ...