Differenze tra le versioni di "Ottenere informazioni sugli schermi disponibili mediante le funzioni del API di X11"
Da Gambas-it.org - Wikipedia.
Riga 1: | Riga 1: | ||
La libreria '''Xlib''' dello ''X Window System Standard'', versione 11, consente - fra l'altro - anche di ottenere alcune informazioni in ordine agli schermi disponibili. | La libreria '''Xlib''' dello ''X Window System Standard'', versione 11, consente - fra l'altro - anche di ottenere alcune informazioni in ordine agli schermi disponibili. | ||
− | Si richiamerà l'attuale libreria condivisa di | + | Si richiamerà l'attuale libreria condivisa di X11: "''libX11.so.6.3.0''". |
Riga 8: | Riga 8: | ||
<FONT color=gray>' ''Display *XOpenDisplay(char *display_name)'' | <FONT color=gray>' ''Display *XOpenDisplay(char *display_name)'' | ||
− | ' '' | + | ' ''Opens a connection to the X server that controls a display.''</font> |
− | + | Private Extern XOpenDisplay(display As Pointer) As Pointer | |
<FONT color=gray>' ''int XDefaultScreen (Display *display)'' | <FONT color=gray>' ''int XDefaultScreen (Display *display)'' | ||
− | ' '' | + | ' ''Returns the default screen number referenced by the XOpenDisplay function.''</font> |
− | + | Private Extern XDefaultScreen(display As Pointer) As Integer | |
<FONT color=gray>' ''int XDefaultDepth (Display *display, int screen_number)'' | <FONT color=gray>' ''int XDefaultDepth (Display *display, int screen_number)'' | ||
− | ' '' | + | ' ''Returns the depth (number of planes) of the default root window for the specified screen.''</font> |
− | + | Private Extern XDefaultDepth(display As Pointer, screen_number As Integer) As Integer | |
<FONT color=gray>' ''int XConnectionNumber(Display *display)'' | <FONT color=gray>' ''int XConnectionNumber(Display *display)'' | ||
− | ' '' | + | ' ''Returns a connection number for the specified display.''</font> |
− | + | Private Extern XConnectionNumber(display As Pointer) As Integer | |
<FONT color=gray>' ''char *XDisplayName(char *string)'' | <FONT color=gray>' ''char *XDisplayName(char *string)'' | ||
− | ' '' | + | ' ''Returns the name of the display that XOpenDisplay would attempt to use.''</font> |
− | + | Private Extern XDisplayName(disp_string As Pointer) As Pointer | |
<FONT color=gray>' ''int XDisplayWidth (Display *display, int screen_number)'' | <FONT color=gray>' ''int XDisplayWidth (Display *display, int screen_number)'' | ||
' ''Returns the width of the screen in pixels.''</font> | ' ''Returns the width of the screen in pixels.''</font> | ||
− | + | Private Extern XDisplayWidth(display As Pointer, screen_number As Integer) As Integer | |
<FONT color=gray>' ''int XDisplayHeight(Display *display, int screen_number)'' | <FONT color=gray>' ''int XDisplayHeight(Display *display, int screen_number)'' | ||
' ''Returns an integer that describes the height of the screen in pixels.''</font> | ' ''Returns an integer that describes the height of the screen in pixels.''</font> | ||
− | + | Private Extern XDisplayHeight(display As Pointer, screen_number As Integer) As Integer | |
<FONT color=gray>' ''int XDisplayWidthMM (Display *display, int screen_number)'' | <FONT color=gray>' ''int XDisplayWidthMM (Display *display, int screen_number)'' | ||
− | ' '' | + | ' ''Returns the width of the specified screen in millimeters.''</font> |
− | + | Private Extern XDisplayWidthMM(display As Pointer, screen_number As Integer) As Integer | |
<FONT color=gray>' ''unsigned long XBlackPixel (Display *display, int screen_number)'' | <FONT color=gray>' ''unsigned long XBlackPixel (Display *display, int screen_number)'' | ||
− | ' '' | + | ' ''Returns the black pixel value for the specified screen.''</font> |
− | + | Private Extern XBlackPixel(display As Pointer, screen_number As Integer) As Long | |
<FONT color=gray>' ''unsigned long XWhitePixel (Display *display, int screen_number)'' | <FONT color=gray>' ''unsigned long XWhitePixel (Display *display, int screen_number)'' | ||
− | ' '' | + | ' ''Returns the white pixel value for the specified screen.''</font> |
− | + | Private Extern XWhitePixel(display As Pointer, screen_number As Integer) As Long | |
<FONT color=gray>' ''int *XListDepths(Display *display, int screen_number, int count_return)'' | <FONT color=gray>' ''int *XListDepths(Display *display, int screen_number, int count_return)'' | ||
− | ' '' | + | ' ''Returns the array of depths that are available on the specified screen.''</font> |
− | + | Private Extern XListDepths(display As Pointer, screen_number As Integer, count_return As Pointer) As Pointer | |
<FONT color=gray>' ''int XScreenCount(Display *display)'' | <FONT color=gray>' ''int XScreenCount(Display *display)'' | ||
− | ' '' | + | ' ''Returns the number of available screens.''</font> |
− | + | Private Extern XScreenCount(display As Pointer) As Integer | |
<FONT color=gray>' ''XCloseDisplay (Display *display)'' | <FONT color=gray>' ''XCloseDisplay (Display *display)'' | ||
− | ' '' | + | ' ''Closes a display or disconnect from the X server.''</font> |
− | + | Private Extern XCloseDisplay(display As Pointer) | |
'''Public''' Sub Main() | '''Public''' Sub Main() | ||
− | Dim | + | Dim disp, lista, lista_prof As Pointer |
Dim depth, screen, connection As Integer | Dim depth, screen, connection As Integer | ||
− | Dim | + | Dim st As Stream |
Dim j, b As Byte | Dim j, b As Byte | ||
− | <FONT color=gray>' '' | + | <FONT color=gray>' ''Connessione al Server X e sua impostazione predefinita:''</font> |
− | + | disp = XOpenDisplay(0) | |
+ | If disp = 0 Then Error.Raise("Impossibile connettersi al Server X !") | ||
− | screen = XDefaultScreen( | + | screen = XDefaultScreen(disp) |
− | depth = XDefaultDepth( | + | depth = XDefaultDepth(disp, screen) |
If depth = 1 Then | If depth = 1 Then | ||
Print "E' evidente che hai uno schermo preistorico !" | Print "E' evidente che hai uno schermo preistorico !" | ||
Riga 80: | Riga 81: | ||
Endif | Endif | ||
− | connection = XConnectionNumber( | + | connection = XConnectionNumber(disp) |
Print "Il numero di connessione è "; connection | Print "Il numero di connessione è "; connection | ||
<FONT color=gray>' ''Mostra le informazioni relative allo schermo:''</font> | <FONT color=gray>' ''Mostra le informazioni relative allo schermo:''</font> | ||
− | Print "Lo schermo è: " & String@(XDisplayName( | + | Print "Lo schermo è: " & String@(XDisplayName(disp)) |
− | Print "La larghezza dello schermo è: "; XDisplayWidth( | + | Print "La larghezza dello schermo è: "; XDisplayWidth(disp, screen) |
− | Print "L'altezza dello schermo è: "; XDisplayHeight( | + | Print "L'altezza dello schermo è: "; XDisplayHeight(disp, screen) |
− | Print "La larghezza dello schermo è di " & XDisplayWidthMM( | + | Print "La larghezza dello schermo è di " & XDisplayWidthMM(disp, screen) & " millimetri" |
− | Print "Valore dei pixel neri dello schermo: " & XBlackPixel( | + | Print "Valore dei pixel neri dello schermo: " & XBlackPixel(disp, screen) |
− | Print "Valore dei pixel bianchi dello schermo: " & XWhitePixel( | + | Print "Valore dei pixel bianchi dello schermo: " & XWhitePixel(disp, screen) |
lista = Alloc(SizeOf(gb.Integer)) | lista = Alloc(SizeOf(gb.Integer)) | ||
− | lista_prof = XListDepths( | + | lista_prof = XListDepths(disp, screen, lista) |
Print "Numero di valori disponibili della profondità dello schermo: "; Int@(lista) | Print "Numero di valori disponibili della profondità dello schermo: "; Int@(lista) | ||
<FONT color=gray>' ''Dereferenziamo la variabile di tipo "puntatore" mediante i "Memory-Stream":''</font> | <FONT color=gray>' ''Dereferenziamo la variabile di tipo "puntatore" mediante i "Memory-Stream":''</font> | ||
− | + | st = Memory lista_prof For Read | |
For j = 0 To (Int@(lista) - 1) * 4 Step 4 | For j = 0 To (Int@(lista) - 1) * 4 Step 4 | ||
− | Seek # | + | Seek #st, j |
− | Read # | + | Read #st, b |
Print "Valore profondità disponibile: "; b | Print "Valore profondità disponibile: "; b | ||
Next | Next | ||
− | + | st.Close | |
− | Print "Schermi disponibili = "; XScreenCount( | + | |
+ | Print "Schermi disponibili = "; XScreenCount(disp) | ||
<FONT color=gray>' ''Chiude la libreria:''</font> | <FONT color=gray>' ''Chiude la libreria:''</font> | ||
− | XCloseDisplay( | + | XCloseDisplay(disp) |
<FONT color=gray>' ''Libera la memoria allocata:''</font> | <FONT color=gray>' ''Libera la memoria allocata:''</font> |
Versione delle 17:12, 29 apr 2016
La libreria Xlib dello X Window System Standard, versione 11, consente - fra l'altro - anche di ottenere alcune informazioni in ordine agli schermi disponibili.
Si richiamerà l'attuale libreria condivisa di X11: "libX11.so.6.3.0".
Mostriamo di seguito un breve codice esemplificativo:
Library "libX11:6.3.0" ' Display *XOpenDisplay(char *display_name) ' Opens a connection to the X server that controls a display. Private Extern XOpenDisplay(display As Pointer) As Pointer ' int XDefaultScreen (Display *display) ' Returns the default screen number referenced by the XOpenDisplay function. Private Extern XDefaultScreen(display As Pointer) As Integer ' int XDefaultDepth (Display *display, int screen_number) ' Returns the depth (number of planes) of the default root window for the specified screen. Private Extern XDefaultDepth(display As Pointer, screen_number As Integer) As Integer ' int XConnectionNumber(Display *display) ' Returns a connection number for the specified display. Private Extern XConnectionNumber(display As Pointer) As Integer ' char *XDisplayName(char *string) ' Returns the name of the display that XOpenDisplay would attempt to use. Private Extern XDisplayName(disp_string As Pointer) As Pointer ' int XDisplayWidth (Display *display, int screen_number) ' Returns the width of the screen in pixels. Private Extern XDisplayWidth(display As Pointer, screen_number As Integer) As Integer ' int XDisplayHeight(Display *display, int screen_number) ' Returns an integer that describes the height of the screen in pixels. Private Extern XDisplayHeight(display As Pointer, screen_number As Integer) As Integer ' int XDisplayWidthMM (Display *display, int screen_number) ' Returns the width of the specified screen in millimeters. Private Extern XDisplayWidthMM(display As Pointer, screen_number As Integer) As Integer ' unsigned long XBlackPixel (Display *display, int screen_number) ' Returns the black pixel value for the specified screen. Private Extern XBlackPixel(display As Pointer, screen_number As Integer) As Long ' unsigned long XWhitePixel (Display *display, int screen_number) ' Returns the white pixel value for the specified screen. Private Extern XWhitePixel(display As Pointer, screen_number As Integer) As Long ' int *XListDepths(Display *display, int screen_number, int count_return) ' Returns the array of depths that are available on the specified screen. Private Extern XListDepths(display As Pointer, screen_number As Integer, count_return As Pointer) As Pointer ' int XScreenCount(Display *display) ' Returns the number of available screens. Private Extern XScreenCount(display As Pointer) As Integer ' XCloseDisplay (Display *display) ' Closes a display or disconnect from the X server. Private Extern XCloseDisplay(display As Pointer) Public Sub Main() Dim disp, lista, lista_prof As Pointer Dim depth, screen, connection As Integer Dim st As Stream Dim j, b As Byte ' Connessione al Server X e sua impostazione predefinita: disp = XOpenDisplay(0) If disp = 0 Then Error.Raise("Impossibile connettersi al Server X !") screen = XDefaultScreen(disp) depth = XDefaultDepth(disp, screen) If depth = 1 Then Print "E' evidente che hai uno schermo preistorico !" Else Print "Stai utilizzando uno schermo a colori con profondità: " & depth Endif connection = XConnectionNumber(disp) Print "Il numero di connessione è "; connection ' Mostra le informazioni relative allo schermo: Print "Lo schermo è: " & String@(XDisplayName(disp)) Print "La larghezza dello schermo è: "; XDisplayWidth(disp, screen) Print "L'altezza dello schermo è: "; XDisplayHeight(disp, screen) Print "La larghezza dello schermo è di " & XDisplayWidthMM(disp, screen) & " millimetri" Print "Valore dei pixel neri dello schermo: " & XBlackPixel(disp, screen) Print "Valore dei pixel bianchi dello schermo: " & XWhitePixel(disp, screen) lista = Alloc(SizeOf(gb.Integer)) lista_prof = XListDepths(disp, screen, lista) Print "Numero di valori disponibili della profondità dello schermo: "; Int@(lista) ' Dereferenziamo la variabile di tipo "puntatore" mediante i "Memory-Stream": st = Memory lista_prof For Read For j = 0 To (Int@(lista) - 1) * 4 Step 4 Seek #st, j Read #st, b Print "Valore profondità disponibile: "; b Next st.Close Print "Schermi disponibili = "; XScreenCount(disp) ' Chiude la libreria: XCloseDisplay(disp) ' Libera la memoria allocata: Free(lista) End