1
0
mirror of https://github.com/moparisthebest/hexchat synced 2025-02-12 13:20:11 -05:00

sysinfo: Add display resolution

This commit is contained in:
TingPing 2015-03-02 18:34:03 -05:00
parent 36a8ba126c
commit 4f891e21b3
3 changed files with 56 additions and 0 deletions

View File

@ -26,6 +26,7 @@ char *sysinfo_backend_get_disk(void);
char *sysinfo_backend_get_memory(void); char *sysinfo_backend_get_memory(void);
char *sysinfo_backend_get_cpu(void); char *sysinfo_backend_get_cpu(void);
char *sysinfo_backend_get_gpu(void); char *sysinfo_backend_get_gpu(void);
char *sysinfo_backend_get_resolution (void);
char *sysinfo_backend_get_sound(void); char *sysinfo_backend_get_sound(void);
char *sysinfo_backend_get_uptime(void); char *sysinfo_backend_get_uptime(void);
char *sysinfo_backend_get_network(void); char *sysinfo_backend_get_network(void);

View File

@ -64,6 +64,7 @@ static hwinfo hwinfos[] = {
{"memory", "Memory", sysinfo_backend_get_memory}, {"memory", "Memory", sysinfo_backend_get_memory},
{"storage", "Storage", sysinfo_backend_get_disk}, {"storage", "Storage", sysinfo_backend_get_disk},
{"vga", "VGA", sysinfo_backend_get_gpu}, {"vga", "VGA", sysinfo_backend_get_gpu},
{"display", "Display", sysinfo_backend_get_resolution, TRUE},
{"sound", "Sound", sysinfo_backend_get_sound, TRUE}, {"sound", "Sound", sysinfo_backend_get_sound, TRUE},
{"ethernet", "Ethernet", sysinfo_backend_get_network, TRUE}, {"ethernet", "Ethernet", sysinfo_backend_get_network, TRUE},
{"uptime", "Uptime", sysinfo_backend_get_uptime}, {"uptime", "Uptime", sysinfo_backend_get_uptime},

View File

@ -42,6 +42,7 @@ typedef enum
QUERY_WMI_CPU, QUERY_WMI_CPU,
QUERY_WMI_VGA, QUERY_WMI_VGA,
QUERY_WMI_HDD, QUERY_WMI_HDD,
QUERY_WMI_RES,
} QueryWmiType; } QueryWmiType;
void print_info (void); void print_info (void);
@ -49,6 +50,7 @@ int get_cpu_arch (void);
char *query_wmi (QueryWmiType mode); char *query_wmi (QueryWmiType mode);
char *read_os_name (IWbemClassObject *object); char *read_os_name (IWbemClassObject *object);
char *read_cpu_info (IWbemClassObject *object); char *read_cpu_info (IWbemClassObject *object);
char *read_res_info (IWbemClassObject *object);
char *read_vga_name (IWbemClassObject *object); char *read_vga_name (IWbemClassObject *object);
guint64 hdd_capacity; guint64 hdd_capacity;
@ -117,6 +119,12 @@ sysinfo_backend_get_gpu (void)
return g_strdup (vga_name); return g_strdup (vga_name);
} }
char *
sysinfo_backend_get_resolution (void)
{
return query_wmi (QUERY_WMI_RES);
}
char * char *
sysinfo_backend_get_os (void) sysinfo_backend_get_os (void)
{ {
@ -203,6 +211,9 @@ static char *query_wmi (QueryWmiType type)
case QUERY_WMI_HDD: case QUERY_WMI_HDD:
query = SysAllocString (L"SELECT Name, Capacity, FreeSpace FROM Win32_Volume"); query = SysAllocString (L"SELECT Name, Capacity, FreeSpace FROM Win32_Volume");
break; break;
case QUERY_WMI_RES:
query = SysAllocString (L"SELECT CurrentHorizontalResolution, CurrentVerticalResolution, CurrentRefreshRate FROM Win32_VideoController");
break;
default: default:
goto release_queryLanguageName; goto release_queryLanguageName;
} }
@ -245,6 +256,10 @@ static char *query_wmi (QueryWmiType type)
line = read_hdd_info (object); line = read_hdd_info (object);
break; break;
case QUERY_WMI_RES:
line = read_res_info (object);
break;
default: default:
break; break;
} }
@ -393,6 +408,42 @@ static char *read_vga_name (IWbemClassObject *object)
return name_utf8; return name_utf8;
} }
static char *read_res_info (IWbemClassObject *object)
{
HRESULT hr;
VARIANT variant;
guint64 xres, yres, rate;
hr = object->lpVtbl->Get (object, L"CurrentHorizontalResolution", 0, &variant, NULL, NULL);
if (FAILED (hr))
{
return NULL;
}
xres = variant_to_uint64 (&variant);
VariantClear (&variant);
hr = object->lpVtbl->Get (object, L"CurrentVerticalResolution", 0, &variant, NULL, NULL);
if (FAILED (hr))
{
return NULL;
}
yres = variant_to_uint64 (&variant);
VariantClear (&variant);
hr = object->lpVtbl->Get (object, L"CurrentRefreshRate", 0, &variant, NULL, NULL);
if (FAILED (hr))
{
return NULL;
}
rate = variant_to_uint64 (&variant);
VariantClear (&variant);
return g_strdup_printf ("%"G_GUINT64_FORMAT"x%"G_GUINT64_FORMAT" (%"G_GUINT64_FORMAT"Hz)", xres, yres, rate);
}
static char *read_hdd_info (IWbemClassObject *object) static char *read_hdd_info (IWbemClassObject *object)
{ {
HRESULT hr; HRESULT hr;
@ -481,6 +532,9 @@ static guint64 variant_to_uint64 (VARIANT *variant)
{ {
switch (V_VT (variant)) switch (V_VT (variant))
{ {
case VT_I4:
return (guint64)MAX(variant->intVal, 0);
case VT_UI8: case VT_UI8:
return variant->ullVal; return variant->ullVal;