⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 win32.c

📁 系统任务管理器
💻 C
📖 第 1 页 / 共 5 页
字号:
            gkrellm_fs_assign_fsusage_data(fs, totalClusters * secPerCluster, freeClusters * secPerCluster, freeClusters * secPerCluster, bytesPerSector);
        }
    }

}

void gkrellm_sys_fs_get_mounts_list(void)
{
    char buf[1024];
    char* drive;

    GetLogicalDriveStrings(1024, buf);
    for (drive = buf; *drive != 0; drive += lstrlen(drive) + 1) {
        // dir, dev, type
        if (strcmp("A:\\", drive) != 0 && strcmp("a:\\", drive) != 0 && strcmp("B:\\", drive) != 0 && strcmp("b:\\", drive) != 0) {
    	    gkrellm_fs_add_to_mounts_list(drive, drive, "");
        }
    }    
}

void gkrellm_sys_fs_get_fstab_list(void)
{
    char buf[1024];
    char* drive;

    GetLogicalDriveStrings(1024, buf);
    for (drive = buf; *drive != 0; drive += lstrlen(drive) + 1) {
        // dir, dev, type, opt
        if (strcmp("A:\\", drive) != 0 && strcmp("a:\\", drive) != 0 && strcmp("B:\\", drive) != 0 && strcmp("b:\\", drive) != 0) {
            if (_GK.debug_level & DEBUG_SYSDEP)
                printf("Adding fstab %s\n", drive);
            gkrellm_fs_add_to_fstab_list(drive, drive, "", "");
        }
    }    
}

/* ================================================ */
/* INET monitor interfaces */
/* ===================================================================== */

gboolean gkrellm_sys_inet_init(void)
{
    //return TRUE;
    return FALSE;
}

void gkrellm_sys_inet_read_tcp_data(void)
{
//    FILE		*f;
//	ActiveTCP	tcp;
//	gchar		buf[512];
//	gint		tcp_status;
//	gulong		addr;

    //what address should this be?
    // this is an in_addr
    // what ports?
//    tcp.remote_addr.s_addr = inet_addr("127.0.0.1");
//    tcp.family = AF_INET;
//    tcp.remote_port = 80;
//    tcp.local_port = 80;

//    gkrellm_inet_log_tcp_port_data(&tcp);

/*	if ((f = fopen(PROC_NET_TCP_FILE, "r")) != NULL)
		{
		fgets(buf, sizeof(buf), f);		

		while (fgets(buf, sizeof(buf), f))
			{
			sscanf(buf, "%*d: %*x:%x %lx:%x %x", &tcp.local_port,
						&addr, &tcp.remote_port, &tcp_status);
			tcp.remote_addr.s_addr = (uint32_t) addr;
			tcp.family = AF_INET;
			if (tcp_status != TCP_ALIVE)
				continue;
			gkrellm_inet_log_tcp_port_data(&tcp);
			}
		fclose(f);
		}
*/
}



/* ===================================================================== */
/* Uptime monitor interface */
/* ===================================================================== */

time_t gkrellm_sys_uptime_read_uptime(void)
{
#if defined(USE_PDH)
    DWORD type;
    PDH_FMT_COUNTERVALUE value;
#endif
    long l = 0;

    win32_read_proc_stat();

#if defined(USE_PDH)
    if (winVer > 0 && query != 0) {
        status = PdhGetFormattedCounterValue(uptimeCounter, PDH_FMT_LONG, &type, &value);
        l = value.longValue;
    }
#else
    l = GetTickCount() / 1000;
#endif

    return (time_t) l;
    }

gboolean gkrellm_sys_uptime_init(void)
{
#if defined(USE_PDH)
    if (_GK.debug_level & DEBUG_SYSDEP)
        printf("Initializing uptime monitor.\n");

    if (winVer > 0 && query != 0) {
        status = PdhAddCounter(query, perfKeys[4], 0, &uptimeCounter);
    }
#endif

    return TRUE;
    }

/* ===================================================================== */
/* hostname interface */
/* ===================================================================== */

gchar *gkrellm_sys_get_host_name(void)
{
	static gboolean	have_it = FALSE;
    char buf2[128];
    int err;

    if (!have_it) {
        err = gethostname(buf2, 128);

        if (err != 0) {
            hostname = g_strdup("Unknown");
        }
        else {
            hostname = g_strdup(buf2);
        }

        if (_GK.debug_level & DEBUG_SYSDEP)
            printf("Retrieving host name.\n");

        have_it = TRUE;
    }

	return hostname;
}

/* ===================================================================== */
/* System name interface */
/* ===================================================================== */

gchar *gkrellm_sys_get_system_name(void)
{
	static gboolean	have_it = FALSE;
    char osName[255];
    char build[255];

    if (_GK.debug_level & DEBUG_SYSDEP)
        printf("Retrieving system name.\n");

    if (!have_it) {
        strcpy(osName, "Unknown");
        strcpy(build, "");

        if (info.dwPlatformId == VER_PLATFORM_WIN32_WINDOWS) {
            if (info.dwMinorVersion == 0) {
                strcpy(osName, "Win 95");
            }
            if (info.dwMinorVersion == 10) {
                strcpy(osName, "Win 98");
            }
            if (info.dwMinorVersion == 90) {
                strcpy(osName, "Win Me");
            }
    //        ss << " (" << LOWORD(build) << ")";
    //        if (CSDVersion.size() > 0) {
    //            ss << CSDVersion[0];
    //        }
        }
        else {
            if (info.dwPlatformId == VER_PLATFORM_WIN32_NT) {
                if (info.dwMinorVersion == 0) {
                    if (info.dwMajorVersion == 5) {
                        strcpy(osName, "Win 2000");
                    }
                    if (info.dwMajorVersion == 4) {
                        strcpy(osName, "Win NT 4.0");
                    }
                }
                if (info.dwMinorVersion == 51) {
                    strcpy(osName, "Win NT 3.51");
                }
                if (info.dwMinorVersion == 1) {
                    strcpy(osName, "Win XP");
                }
    //            ss << " (" << build << ")";
            }
        }

        sname = g_strdup(osName);
        have_it = TRUE;
    	//sname = g_strdup_printf("%s %s", osName, "");
    }


    return sname;
}

/* ===================================================================== */
/* Misc functions */
/* ===================================================================== */

void readPerfKeyFile(void)
{
    FILE* fp;
    gchar *fileName;
    TCHAR buf[1024];
    TCHAR key[1024];
    TCHAR* s;
    int pos;

    // load defaults in case file is not there or missing entries
    if (_GK.debug_level & DEBUG_SYSDEP)
        printf("Beginning read of perfkey.dat\n");
#if defined(USE_PDH)
    // \\Processor(0)
    placePerfKey("processor_time", _T(")\\% Processor Time"));
    placePerfKey("privileged_time", _T(")\\% Privileged Time"));
    placePerfKey("processes", _T("\\System\\Processes"));
    placePerfKey("forks", _T("\\System\\Threads"));
    placePerfKey("uptime", _T("\\System\\System Up Time"));
    placePerfKey("netpart1", _T("\\Network Interface("));
    placePerfKey("netreceive", _T(")\\Bytes Received/sec"));
    placePerfKey("netsend", _T(")\\Bytes Sent/sec"));
    placePerfKey("diskpart1", _T("\\PhysicalDisk("));
    placePerfKey("diskread", _T(")\\Disk Read Bytes/sec"));
    placePerfKey("diskwrite", _T(")\\Disk Write Bytes/sec"));
    placePerfKey("processor_start", _T("\\Processor("));
#else
    placePerfKey("cpuusage", _T("KERNEL\\CPUUsage"));
    placePerfKey("threads", _T("KERNEL\\Threads"));
    placePerfKey("breads", _T("VFAT\\BReadsSec"));
    placePerfKey("bwrites", _T("VFAT\\BWritesSec"));
    placePerfKey("bnetwork", _T("Network Monitor\\0000 - Ethernet bytes/second"));
    placePerfKey("netname", _T("Ether"));
#endif

    // now try to read translated keys from file
    fileName = g_strdup_printf("%s\\%s\\perfkey.dat", gkrellm_homedir(), GKRELLM_DIR);
    if (_GK.debug_level & DEBUG_SYSDEP)
        printf("Looking for perfkey.dat at %s\n", fileName);

    fp = fopen(fileName, "r");
    if (fp) {
		while ((fgets(buf, sizeof(buf), fp)) != NULL) {
			if ((s = _tcschr(buf, _T('\n'))) != NULL)
				*s = _T('\0');

            if (_tcsclen(buf) > 0 && buf[0] != _T(';')) {
                if ((s = _tcschr(buf, _T(' '))) != NULL) {
                    if (_tcsclen(s) > 0) {
                        ++s;
                        pos = s - buf - 1;

                        if (pos > 0) {
                            _tcsncpy(key, buf, pos);
                            key[pos] = _T('\0');

                            placePerfKey(key, s);
                        }
                    }
                }
            }
        }
        fclose(fp);
    }
    else {
        if (_GK.debug_level & DEBUG_SYSDEP)
            printf("Opening perfkey.dat failed, using English defaults.\n");
    }

    g_free(fileName);
}

void placePerfKey(const TCHAR* key, const TCHAR* item)
{
    int place = -1;
    int size;

#if defined(USE_PDH)
    if (_tcscmp(key, _T("processor_time")) == 0)
        place = 0;
    if (_tcscmp(key, _T("privileged_time")) == 0)
        place = 1;
    if (_tcscmp(key, _T("processes")) == 0)
        place = 2;
    if (_tcscmp(key, _T("forks")) == 0)
        place = 3;
    if (_tcscmp(key, _T("uptime")) == 0)
        place = 4;
    if (_tcscmp(key, _T("netpart1")) == 0)
        place = 5;
    if (_tcscmp(key, _T("netreceive")) == 0)
        place = 6;
    if (_tcscmp(key, _T("netsend")) == 0)
        place = 7;
    if (_tcscmp(key, _T("diskpart1")) == 0)
        place = 8;
    if (_tcscmp(key, _T("diskread")) == 0)
        place = 9;
    if (_tcscmp(key, _T("diskwrite")) == 0)
        place = 10;
    if (_tcscmp(key, _T("processor_start")) == 0)
        place = 11;
#else
    if (_tcscmp(key, _T("cpuusage")) == 0)
        place = 0;
    if (_tcscmp(key, _T("threads")) == 0)
        place = 1;
    if (_tcscmp(key, _T("breads")) == 0)
        place = 2;
    if (_tcscmp(key, _T("bwrites")) == 0)
        place = 3;
    if (_tcscmp(key, _T("bnetwork")) == 0)
        place = 4;
    if (_tcscmp(key, _T("netname")) == 0)
        place = 5;
#endif

    if (_GK.debug_level & DEBUG_SYSDEP)
        printf("Found place %i for key %s\n", place, key);

    if (place != -1 && place < numPerfKeys) {
        free(perfKeys[place]);
        size = _tcsclen(item);
        perfKeys[place] = malloc(sizeof(TCHAR) * size + 1);
        _tcscpy(perfKeys[place], item);
        
        if (_GK.debug_level & DEBUG_SYSDEP)
            printf("Putting item %s in key %s\n", item, key);
    }
    else {
        if (_GK.debug_level & DEBUG_SYSDEP)
            printf("Invalid placement for key %s and item %s\n", key, item);
    }
}

int getuid()
{
    // gets user id - doesn't exist for Windows
    return 0;
}

void fcntl(int fd, int cmd, ...)
{
    // Windows can't lock files that I know of
}

void fchmod(int fd, mode_t mode)
{
    // no way to set permissions on Windows
}

//int getpid()
//{
//    return 0;
//}

void win32_init_callbacks(void)
{
#if defined(WIN32_CLIENT)
      // Data structure allocation
    plugin_callbacks.gkrellm_chart_new0 = gkrellm_chart_new0;
    plugin_callbacks.gkrellm_chartconfig_new0 = gkrellm_chartconfig_new0;
    plugin_callbacks.gkrellm_panel_new0 = gkrellm_panel_new0;
    plugin_callbacks.gkrellm_krell_new0 = gkrellm_krell_new0;
    plugin_callbacks.gkrellm_decal_new0 = gkrellm_decal_new0;
    plugin_callbacks.gkrellm_label_new0 = gkrellm_label_new0;
    plugin_callbacks.gkrellm_style_new0 = gkrellm_style_new0;
    plugin_callbacks.gkrellm_copy_style = gkrellm_copy_style;
    plugin_callbacks.gkrellm_copy_style_values = gkrellm_copy_style_values;
    plugin_callbacks.gkrellm_textstyle_new0 = gkrellm_textstyle_new0;
    plugin_callbacks.gkrellm_copy_textstyle = gkrellm_copy_textstyle;

    // Chart functions
    plugin_callbacks.gkrellm_chart_create = gkrellm_chart_create;
    plugin_callbacks.gkrellm_chart_destroy = gkrellm_chart_destroy;
    plugin_callbacks.gkrellm_chart_hide = gkrellm_chart_hide;
    plugin_callbacks.gkrellm_chart_show = gkrellm_chart_show;
    plugin_callbacks.gkrellm_chart_enable_visibility = gkrellm_chart_enable_visibility;
    plugin_callbacks.gkrellm_is_chart_visible = gkrellm_is_chart_visible;
    plugin_callbacks.gkrellm_set_draw_chart_function = gkrellm_set_draw_chart_function;
    plugin_callbacks.gkrellm_draw_chart_to_screen = gkrellm_draw_chart_to_screen;
    plugin_callbacks.gkrellm_draw_chart_label = gkrellm_draw_chart_label;
    plugin_callbacks.gkrellm_draw_chart_text = gkrellm_draw_chart_text;
    plugin_callbacks.gkrellm_reset_chart = gkrellm_reset_chart;
    plugin_callbacks.gkrellm_reset_and_draw_chart = gkrellm_reset_and_draw_chart;
    plugin_callbacks.gkrellm_refresh_chart = gkrellm_refresh_chart;
    plugin_callbacks.gkrellm_rescale_chart = gkrellm_rescale_chart;
    plugin_callbacks.gkrellm_clear_chart = gkrellm_clear_chart;
    plugin_callbacks.gkrellm_clear_chart_pixmap = gkrellm_clear_chart_pixmap;
    plugin_callbacks.gkrellm_clean_bg_src_pixmap = gkrellm_clean_bg_src_pixmap;
    plugin_callbacks.gkrellm_draw_chart_grid_line = gkrellm_draw_chart_grid_line;
    plugin_callbacks.gkrellm_chart_bg_piximage_override = gkrellm_chart_bg_piximage_override;
    plugin_callbacks.gkrellm_chart_width = gkrellm_chart_width;
    plugin_callbacks.gkrellm_set_chart_height_default = gkrellm_set_chart_height_default;
    plugin_callbacks.gkrellm_set_chart_height = gkrellm_set_chart_height;
    plugin_callbacks.gkrellm_get_chart_scalemax = gkrellm_get_chart_scalemax;
    plugin_callbacks.gkrellm_render_data_pixmap = gkrellm_render_data_pixmap;
    plugin_callbacks.gkrellm_render_data_grid_pixmap = gkrellm_render_data_grid_pixmap;

      // ChartData functions
    plugin_callbacks.gkrellm_add_chartdata = gkrellm_add_chartdata;
    plugin_callbacks.gkrellm_add_default_chartdata = gkrellm_add_default_chartdata;
    plugin_callbacks.gkrellm_alloc_chartdata = gkrellm_alloc_chartdata;
    plugin_callbacks.gkrellm_store_chartdata = gkrellm_store_chartdata;
    plugin_callbacks.gkrellm_draw_chartdata = gkrellm_draw_chartdata;
    plugin_callbacks.gkrellm_monotonic_chartdata = gkrellm_monotonic_chartdata;
    plugin_callbacks.gkrellm_get_chartdata_hide = gkrellm_get_chartdata_hide;
    plugin_callbacks.gkrellm_get_current_chartdata = gkrellm_get_current_chartdata;
    plugin_callbacks

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -