Differenze tra le versioni di "Individuare l'ID ed il nome della finestra attiva mediante le funzioni del API di X11"
Da Gambas-it.org - Wikipedia.
Riga 1: | Riga 1: | ||
La libreria '''X11''' ci consente anche di individuare il numero identificativo (''ID'') ed il nome della finestra attualmente attiva. | La libreria '''X11''' ci consente anche di individuare il numero identificativo (''ID'') ed il nome della finestra attualmente attiva. | ||
− | Sarà necessario richiamare la libreria del sistema X11: "''libX11.so.6. | + | Sarà necessario richiamare la libreria del sistema X11: "''libX11.so.6.4.0'' ". |
Riga 8: | Riga 8: | ||
− | Library "libX11:6. | + | Library "libX11:6.4.0" |
Private Const XA_WINDOW As Integer = 33 | Private Const XA_WINDOW As Integer = 33 |
Versione delle 16:04, 1 mag 2023
La libreria X11 ci consente anche di individuare il numero identificativo (ID) ed il nome della finestra attualmente attiva.
Sarà necessario richiamare la libreria del sistema X11: "libX11.so.6.4.0 ".
Mostriamo di seguito un possibile breve codice al riguardo:
Private Const MAX_PROPERTY_VALUE_LEN As Integer = 4096 Library "libX11:6.4.0" Private Const XA_WINDOW As Integer = 33 ' Display *XOpenDisplay(char *display_name) ' Opens a connection to the X server that controls a display. Private Extern XOpenDisplay(display_name As Pointer) As Pointer ' XCloseDisplay (Display *display) ' Closes a display or disconnect from the X server. Private Extern XCloseDisplay(display As Pointer) ' Window XDefaultRootWindow(Display *display) ' Return the root window for the default screen. Private Extern XDefaultRootWindow(display As Pointer) As Integer ' Atom XInternAtom(Display *display, char *atom_name, Bool only_if_exists) ' Returns the atom identifier associated with the specified atom_name string. Private Extern XInternAtom(display As Pointer, atom_name As String, only_if_exists As Boolean) As Integer ' int XGetWindowProperty(Display *display, Window w, Atom property, long long_offset, long long_length, Bool delete, Atom req_type, Atom *actual_type_return, int *actual_format_return, unsigned long *nitems_return, unsigned long *bytes_after_return, unsigned char **prop_return) ' Returns the actual type of the property; the actual format of the property. Private Extern XGetWindowProperty(display As Pointer, w As Long, property_ As Integer, long_offset As Long, long_length As Long, delete As Boolean, req_type As Integer, actual_type_return As Pointer, actual_format_return As Pointer, nitems_return As Pointer, bytes_after_return As Pointer, prop_return As Pointer) As Integer ' Status XGetWMName(Display *display, Window w, XTextProperty *text_prop_return) ' Calls XGetTextProperty() to obtain the WM_NAME property. Private Extern XGetWMName(display As Pointer, w As Long, text_prop_return As Pointer) As Integer Public Sub Main() Dim disp, dati, p As Pointer Dim x_num_Atom, tipo, formato As Integer Dim err, n_fin, bytes_succ, i As Integer Dim rootW As Long Dim st As Stream disp = XOpenDisplay(0) If disp == 0 Then Error.Raise("Impossibile aprire lo schermo !") rootW = XDefaultRootWindow(disp) x_num_Atom = XInternAtom(disp, "_NET_ACTIVE_WINDOW", 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("Impossibile ottenere dati dalla funzione 'XGetWindowProperty' !") If XA_WINDOW <> tipo Then Error.Raise("Tipo invalido di proprietà '_NET_ACTIVE_WINDOW' !") Print "Id", Null, "Nome della finestra attiva\n" p = Alloc(SizeOf(gb.Byte), 32) st = Memory dati For Read Read #st, i XGetWMName(disp, i, p) Print Hex(i), Null, String@(Pointer@(p)) ' Va in chiusura: st.Close Free(p) XCloseDisplay(disp)
End