1 | |
Auteur | Messages |
---|---|
vuott | #1 Posté le 2/11/2014 à 00:40:07 |
Ne cedere ineluctabili possimus | Hello, ce code permet de connaître ID, nom de la fenêtre et PID des programmes avec les fonctions extérieures de X11. Private Const MAX_PROPERTY_VALUE_LEN As Integer = 4096 Library "libX11:6.3.0" Private Const XA_CARDINAL As Integer = 6 Private Const XA_WINDOW As Integer = 33 ' Display *XOpenDisplay(display_name) ' Opens a connection to the X server that controls a display. Private Extern XOpenDisplay(displayP As Pointer) As Pointer ' XCloseDisplay (display) ' Closes a display or disconnect from the X server. Private Extern XCloseDisplay(displayP As Pointer) ' Window XDefaultRootWindow(display) ' Return the root window for the default screen. Private Extern XDefaultRootWindow(displayP As Pointer) As Integer ' Atom XInternAtom(display, atom_name, only_if_exists) ' Returns the atom identifier associated with the specified atom_name string. Private Extern XInternAtom(displayP As Pointer, atom_name As String, only_if_exists As Boolean) As Integer ' int XGetWindowProperty(display, w, property, long_offset, long_length, delete, req_type, actual_type_return, actual_format_return, nitems_return, bytes_after_return, prop_return) ' Returns the actual type of the property; the actual format of the property. Private Extern XGetWindowProperty(displayP As Pointer, wI As Integer, py As Integer, lo As Long, ll As Long, d As Boolean, rt As Integer, at As Pointer, af As Pointer, ni As Pointer, ba As Pointer, pr As Pointer) As Integer ' XGetWMName(display, w, text_prop_return) ' Calls XGetTextProperty() to obtain the WM_NAME property. Private Extern XGetWMName(displayP As Pointer, w As Integer, text_prop_return As Pointer) As Integer Public Sub Main() Dim disp, dati, p, datPID As Pointer Dim x_num_Atom, rootW, tipo, formato As Integer Dim err, n_fin, bytes_succ, i As Integer Dim stId, stPid As Stream Dim b As Byte Dim pid As Integer Dim id As String disp = XOpenDisplay(0) If IsNull(disp) Then Error.Raise("Unable open display !") rootW = XDefaultRootWindow(disp) x_num_Atom = XInternAtom(disp, "_NET_CLIENT_LIST", False) err = XGetWindowProperty(disp, rootW, x_num_Atom, 0, MAX_PROPERTY_VALUE_LEN / 4, False, XA_WINDOW, VarPtr(tipo), VarPtr(formato), VarPtr(n_fin), VarPtr(bytes_succ), VarPtr(dati)) If err <> 0 Then Error.Raise("Unable get data from 'XGetWindowProperty' function !") If XA_WINDOW <> tipo Then Error.Raise("Invalide type de propriété '_NET_CLIENT_LIST' !") Print "Id", Null, "PID", "Nom de la fenêtre\n" p = Alloc(32) stId = Memory dati For Read For b = 1 To n_fin * 2 Read #stId, i If i > 0 Then XGetWMName(disp, i, p) id = Hex(i) x_num_Atom = XInternAtom(disp, "_NET_WM_PID", False) err = XGetWindowProperty(disp, i, x_num_Atom, 0, MAX_PROPERTY_VALUE_LEN / 4, False, XA_CARDINAL, VarPtr(tipo), VarPtr(formato), VarPtr(n_fin), VarPtr(bytes_succ), VarPtr(datPID)) If err <> 0 Then Error.Raise("Unable get data from 'XGetWindowProperty' function !") If IsNull(datPID) = False Then stPid = Memory datPID For Read Read #stPid, pid Endif Print id, Null, pid, String@(Pointer@(p)) Endif Next stPid.Close stId.Close Free(p) XCloseDisplay(disp) End « Vita non suavis esse potest, nec Mors amara. » |
Redjack1964 | #2 Posté le 2/11/2014 à 16:07:10 |
Ok mais pourquoi l'avoir mis sur le forum plutôt que sur la forge? :-) « Unix est très simple. Il faut juste être un génie pour comprendre sa simplicité » Dennis Ritchie | |
1 |