Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ windows-sys = { version = "0.61.2", features = [
"Win32_System_Performance",
"Win32_System_Registry",
"Win32_System_RemoteDesktop",
"Win32_System_Services",
"Win32_System_Shutdown",
"Win32_System_StationsAndDesktops",
"Win32_System_SystemInformation",
Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@ This is not a copy of the modern Task Manager. CPU and GPU details come from sys
- **CPU** shows the processor name, effective frequency, topology, caches, virtualization, ISA features, system rates, and a 60-second utilization graph.
- **GPU** handles multiple adapters and engines, dedicated and shared memory, temperature, driver details, and DirectX information.
- **Networking and Users** show adapter throughput history and Windows session state.
- **Services** lists Win32 services with description, status, startup type, and the owning process. Start, stop, and Go to Process run only when the current row allows them. Go to Process requires a process id plus creation time.

## Download

Expand Down Expand Up @@ -163,7 +164,7 @@ The project remains one Rust crate. Directories follow ownership boundaries rath
- `src/ui` contains reusable chart, dialog, menu, drawing, resource, and localization code.
- `src/config` owns the versioned registry options format.

Workers publish complete snapshots from one source at a time. The UI rejects stale generations and keeps the last valid snapshot when a refresh fails. Expensive Win32, PDH, DXGI, WMI, WTS, and icon work stays off the UI thread.
Workers publish complete snapshots from one source at a time. The UI rejects stale generations and keeps the last valid snapshot when a refresh fails. Expensive Win32, PDH, DXGI, WMI, WTS, Service Control Manager, and icon work stays off the UI thread.

## Image resources

Expand Down
3 changes: 2 additions & 1 deletion README.zh-CN.md
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
- **CPU**:处理器型号、有效频率、拓扑、缓存、虚拟化、ISA、系统速率计数和 60 秒总利用率历史。
- **GPU**:多适配器、多引擎、专用/共享显存、温度、驱动和 DirectX 信息。
- **网络与用户**:网卡吞吐历史、会话状态和常用会话操作。
- **服务**:列出 Win32 服务的名称、描述、状态、启动类型和所属进程。启动、停止和转到进程只在当前行允许时可用。转到进程同时要求进程 ID 和创建时间。

## 下载

Expand Down Expand Up @@ -154,7 +155,7 @@ CPU 拓扑来自 `GetLogicalProcessorInformationEx`,动态频率和系统速
- `src/ui` 放图表、对话框、菜单、绘制、资源和本地化等通用 UI 代码。
- `src/config` 负责带版本的注册表配置格式。

后台 worker 每次只提交一个来源的完整快照。UI 会拒绝过期 generation;刷新失败时保留上一份有效结果。Win32、PDH、DXGI、WMI、WTS 和图标采集等可能阻塞的工作不会放到 UI 线程。
后台 worker 每次只提交一个来源的完整快照。UI 会拒绝过期 generation;刷新失败时保留上一份有效结果。Win32、PDH、DXGI、WMI、WTS、服务控制管理器和图标采集等可能阻塞的工作不会放到 UI 线程。

## 图像资源

Expand Down
12 changes: 12 additions & 0 deletions build_support/localization.rs
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,18 @@ const MENU_STATUS_HELP_KEYS: &[(&str, &str)] = &[
"IDM_TASK_BRINGTOFRONT",
"crate::ui::resource_ids::IDM_TASK_BRINGTOFRONT",
),
(
"IDM_SERVICE_START",
"crate::ui::resource_ids::IDM_SERVICE_START",
),
(
"IDM_SERVICE_STOP",
"crate::ui::resource_ids::IDM_SERVICE_STOP",
),
(
"IDM_SERVICE_GOTOPROCESS",
"crate::ui::resource_ids::IDM_SERVICE_GOTOPROCESS",
),
];

pub(crate) fn generate() {
Expand Down
26 changes: 26 additions & 0 deletions localization/de.toml
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,29 @@ ConfirmDisconnectSelectedUsers = "Moechten Sie die ausgewaehlten Benutzer wirkli
SelectedUserCouldNotBeLoggedOff = "Der ausgewaehlte Benutzer konnte nicht abgemeldet werden."
SelectedUserCouldNotBeDisconnected = "Der ausgewaehlte Benutzer konnte nicht getrennt werden."
Win32ErrorPrefix = "Win32-Fehler:"
ServicesPageTitle = "Dienste"
ServicesMenu = "&Dienste"
ServiceStart = "&Starten"
ServiceStop = "S&toppen"
ServiceColumnName = "Name"
ServiceColumnDescription = "Beschreibung"
ServiceColumnStartupType = "Starttyp"
ServiceColumnProcess = "Prozess"
ServiceStatusStopped = "Beendet"
ServiceStatusStartPending = "Wird gestartet"
ServiceStatusStopPending = "Wird beendet"
ServiceStatusContinuePending = "Wird fortgesetzt"
ServiceStatusPausePending = "Wird angehalten"
ServiceStatusPaused = "Angehalten"
ServiceStartupBoot = "Boot"
ServiceStartupSystem = "System"
ServiceStartupAutomatic = "Automatisch"
ServiceStartupManual = "Manuell"
ServiceStartupDisabled = "Deaktiviert"
ServiceStartFailed = "Der Dienst konnte nicht gestartet werden."
ServiceStopFailed = "Der Dienst konnte nicht beendet werden."
ServiceStateUnchanged = "Der Dienst hat den angeforderten Zustand nicht erreicht."
ServiceProcessPid = "PID"

[menu_status_help]
IDM_RUN = "Runs a new program"
Expand Down Expand Up @@ -326,3 +349,6 @@ IDM_TASK_CASCADE = "Cascades the windows diagonally on the desktop"
IDM_TASK_TILEHORZ = "Tiles the windows horizontally on the desktop"
IDM_TASK_TILEVERT = "Tiles the windows vertically on the desktop"
IDM_TASK_BRINGTOFRONT = "Brings the window front, but does not switch to it"
IDM_SERVICE_START = "Startet den ausgewählten Dienst"
IDM_SERVICE_STOP = "Beendet den ausgewählten Dienst"
IDM_SERVICE_GOTOPROCESS = "Wählt den Prozess des Diensts auf der Seite Prozesse aus"
26 changes: 26 additions & 0 deletions localization/en_us.toml
Original file line number Diff line number Diff line change
Expand Up @@ -301,6 +301,29 @@ ConfirmDisconnectSelectedUsers = "Are you sure you want to disconnect the select
SelectedUserCouldNotBeLoggedOff = "The selected user could not be logged off."
SelectedUserCouldNotBeDisconnected = "The selected user could not be disconnected."
Win32ErrorPrefix = "Win32 error:"
ServicesPageTitle = "Services"
ServicesMenu = "&Services"
ServiceStart = "&Start"
ServiceStop = "&Stop"
ServiceColumnName = "Name"
ServiceColumnDescription = "Description"
ServiceColumnStartupType = "Startup Type"
ServiceColumnProcess = "Process"
ServiceStatusStopped = "Stopped"
ServiceStatusStartPending = "Start Pending"
ServiceStatusStopPending = "Stop Pending"
ServiceStatusContinuePending = "Continue Pending"
ServiceStatusPausePending = "Pause Pending"
ServiceStatusPaused = "Paused"
ServiceStartupBoot = "Boot"
ServiceStartupSystem = "System"
ServiceStartupAutomatic = "Automatic"
ServiceStartupManual = "Manual"
ServiceStartupDisabled = "Disabled"
ServiceStartFailed = "Unable to start the service."
ServiceStopFailed = "Unable to stop the service."
ServiceStateUnchanged = "The service did not enter the requested state."
ServiceProcessPid = "PID"

[menu_status_help]
IDM_RUN = "Runs a new program"
Expand Down Expand Up @@ -333,3 +356,6 @@ IDM_TASK_CASCADE = "Cascades the windows diagonally on the desktop"
IDM_TASK_TILEHORZ = "Tiles the windows horizontally on the desktop"
IDM_TASK_TILEVERT = "Tiles the windows vertically on the desktop"
IDM_TASK_BRINGTOFRONT = "Brings the window front, but does not switch to it"
IDM_SERVICE_START = "Starts the selected service"
IDM_SERVICE_STOP = "Stops the selected service"
IDM_SERVICE_GOTOPROCESS = "Selects the service process on the Processes page"
26 changes: 26 additions & 0 deletions localization/es.toml
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,29 @@ ConfirmDisconnectSelectedUsers = "¿Seguro que desea desconectar a los usuarios
SelectedUserCouldNotBeLoggedOff = "No se pudo cerrar la sesion del usuario seleccionado."
SelectedUserCouldNotBeDisconnected = "No se pudo desconectar al usuario seleccionado."
Win32ErrorPrefix = "Error de Win32:"
ServicesPageTitle = "Servicios"
ServicesMenu = "&Servicios"
ServiceStart = "&Iniciar"
ServiceStop = "&Detener"
ServiceColumnName = "Nombre"
ServiceColumnDescription = "Descripción"
ServiceColumnStartupType = "Tipo de inicio"
ServiceColumnProcess = "Proceso"
ServiceStatusStopped = "Detenido"
ServiceStatusStartPending = "Inicio pendiente"
ServiceStatusStopPending = "Detención pendiente"
ServiceStatusContinuePending = "Reanudación pendiente"
ServiceStatusPausePending = "Pausa pendiente"
ServiceStatusPaused = "En pausa"
ServiceStartupBoot = "Arranque"
ServiceStartupSystem = "Sistema"
ServiceStartupAutomatic = "Automático"
ServiceStartupManual = "Manual"
ServiceStartupDisabled = "Deshabilitado"
ServiceStartFailed = "No se pudo iniciar el servicio."
ServiceStopFailed = "No se pudo detener el servicio."
ServiceStateUnchanged = "El servicio no entró en el estado solicitado."
ServiceProcessPid = "PID"

[menu_status_help]
IDM_RUN = "Runs a new program"
Expand Down Expand Up @@ -326,3 +349,6 @@ IDM_TASK_CASCADE = "Cascades the windows diagonally on the desktop"
IDM_TASK_TILEHORZ = "Tiles the windows horizontally on the desktop"
IDM_TASK_TILEVERT = "Tiles the windows vertically on the desktop"
IDM_TASK_BRINGTOFRONT = "Brings the window front, but does not switch to it"
IDM_SERVICE_START = "Inicia el servicio seleccionado"
IDM_SERVICE_STOP = "Detiene el servicio seleccionado"
IDM_SERVICE_GOTOPROCESS = "Selecciona el proceso del servicio en la página Procesos"
26 changes: 26 additions & 0 deletions localization/fr.toml
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,29 @@ ConfirmDisconnectSelectedUsers = "Voulez-vous vraiment deconnecter les utilisate
SelectedUserCouldNotBeLoggedOff = "Impossible de fermer la session de l'utilisateur selectionne."
SelectedUserCouldNotBeDisconnected = "Impossible de deconnecter l'utilisateur selectionne."
Win32ErrorPrefix = "Erreur Win32 :"
ServicesPageTitle = "Services"
ServicesMenu = "&Services"
ServiceStart = "&Démarrer"
ServiceStop = "&Arrêter"
ServiceColumnName = "Nom"
ServiceColumnDescription = "Description"
ServiceColumnStartupType = "Type de démarrage"
ServiceColumnProcess = "Processus"
ServiceStatusStopped = "Arrêté"
ServiceStatusStartPending = "Démarrage en cours"
ServiceStatusStopPending = "Arrêt en cours"
ServiceStatusContinuePending = "Reprise en cours"
ServiceStatusPausePending = "Mise en pause"
ServiceStatusPaused = "Suspendu"
ServiceStartupBoot = "Démarrage"
ServiceStartupSystem = "Système"
ServiceStartupAutomatic = "Automatique"
ServiceStartupManual = "Manuel"
ServiceStartupDisabled = "Désactivé"
ServiceStartFailed = "Impossible de démarrer le service."
ServiceStopFailed = "Impossible d'arrêter le service."
ServiceStateUnchanged = "Le service n'a pas atteint l'état demandé."
ServiceProcessPid = "PID"

[menu_status_help]
IDM_RUN = "Runs a new program"
Expand Down Expand Up @@ -326,3 +349,6 @@ IDM_TASK_CASCADE = "Cascades the windows diagonally on the desktop"
IDM_TASK_TILEHORZ = "Tiles the windows horizontally on the desktop"
IDM_TASK_TILEVERT = "Tiles the windows vertically on the desktop"
IDM_TASK_BRINGTOFRONT = "Brings the window front, but does not switch to it"
IDM_SERVICE_START = "Démarre le service sélectionné"
IDM_SERVICE_STOP = "Arrête le service sélectionné"
IDM_SERVICE_GOTOPROCESS = "Sélectionne le processus du service dans la page Processus"
26 changes: 26 additions & 0 deletions localization/pt.toml
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,29 @@ ConfirmDisconnectSelectedUsers = "Tem certeza de que deseja desconectar os usuar
SelectedUserCouldNotBeLoggedOff = "Nao foi possivel fazer logoff do usuario selecionado."
SelectedUserCouldNotBeDisconnected = "Nao foi possivel desconectar o usuario selecionado."
Win32ErrorPrefix = "Erro do Win32:"
ServicesPageTitle = "Serviços"
ServicesMenu = "&Serviços"
ServiceStart = "&Iniciar"
ServiceStop = "&Parar"
ServiceColumnName = "Nome"
ServiceColumnDescription = "Descrição"
ServiceColumnStartupType = "Tipo de inicialização"
ServiceColumnProcess = "Processo"
ServiceStatusStopped = "Parado"
ServiceStatusStartPending = "Iniciando"
ServiceStatusStopPending = "Parando"
ServiceStatusContinuePending = "Continuando"
ServiceStatusPausePending = "Pausando"
ServiceStatusPaused = "Pausado"
ServiceStartupBoot = "Inicialização"
ServiceStartupSystem = "Sistema"
ServiceStartupAutomatic = "Automático"
ServiceStartupManual = "Manual"
ServiceStartupDisabled = "Desativado"
ServiceStartFailed = "Não foi possível iniciar o serviço."
ServiceStopFailed = "Não foi possível parar o serviço."
ServiceStateUnchanged = "O serviço não entrou no estado solicitado."
ServiceProcessPid = "PID"

[menu_status_help]
IDM_RUN = "Runs a new program"
Expand Down Expand Up @@ -326,3 +349,6 @@ IDM_TASK_CASCADE = "Cascades the windows diagonally on the desktop"
IDM_TASK_TILEHORZ = "Tiles the windows horizontally on the desktop"
IDM_TASK_TILEVERT = "Tiles the windows vertically on the desktop"
IDM_TASK_BRINGTOFRONT = "Brings the window front, but does not switch to it"
IDM_SERVICE_START = "Inicia o serviço selecionado"
IDM_SERVICE_STOP = "Para o serviço selecionado"
IDM_SERVICE_GOTOPROCESS = "Seleciona o processo do serviço na página Processos"
26 changes: 26 additions & 0 deletions localization/ru.toml
Original file line number Diff line number Diff line change
Expand Up @@ -294,6 +294,29 @@ ConfirmDisconnectSelectedUsers = "Вы действительно хотите
SelectedUserCouldNotBeLoggedOff = "Не удалось завершить сеанс выбранного пользователя."
SelectedUserCouldNotBeDisconnected = "Не удалось отключить выбранного пользователя."
Win32ErrorPrefix = "Ошибка Win32:"
ServicesPageTitle = "Службы"
ServicesMenu = "&Службы"
ServiceStart = "&Запустить"
ServiceStop = "&Остановить"
ServiceColumnName = "Имя"
ServiceColumnDescription = "Описание"
ServiceColumnStartupType = "Тип запуска"
ServiceColumnProcess = "Процесс"
ServiceStatusStopped = "Остановлена"
ServiceStatusStartPending = "Запускается"
ServiceStatusStopPending = "Останавливается"
ServiceStatusContinuePending = "Продолжается"
ServiceStatusPausePending = "Приостанавливается"
ServiceStatusPaused = "Приостановлена"
ServiceStartupBoot = "Загрузка"
ServiceStartupSystem = "Система"
ServiceStartupAutomatic = "Авто"
ServiceStartupManual = "Вручную"
ServiceStartupDisabled = "Отключена"
ServiceStartFailed = "Не удалось запустить службу."
ServiceStopFailed = "Не удалось остановить службу."
ServiceStateUnchanged = "Служба не перешла в запрошенное состояние."
ServiceProcessPid = "PID"

[menu_status_help]
IDM_RUN = "Runs a new program"
Expand Down Expand Up @@ -326,3 +349,6 @@ IDM_TASK_CASCADE = "Cascades the windows diagonally on the desktop"
IDM_TASK_TILEHORZ = "Tiles the windows horizontally on the desktop"
IDM_TASK_TILEVERT = "Tiles the windows vertically on the desktop"
IDM_TASK_BRINGTOFRONT = "Brings the window front, but does not switch to it"
IDM_SERVICE_START = "Запускает выбранную службу"
IDM_SERVICE_STOP = "Останавливает выбранную службу"
IDM_SERVICE_GOTOPROCESS = "Выбирает процесс службы на странице процессов"
26 changes: 26 additions & 0 deletions localization/zh_cn.toml
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,29 @@ ConfirmDisconnectSelectedUsers = "确实要断开所选用户吗?"
SelectedUserCouldNotBeLoggedOff = "无法注销所选用户。"
SelectedUserCouldNotBeDisconnected = "无法断开所选用户。"
Win32ErrorPrefix = "Win32 错误:"
ServicesPageTitle = "服务"
ServicesMenu = "服务(&S)"
ServiceStart = "启动(&S)"
ServiceStop = "停止(&T)"
ServiceColumnName = "名称"
ServiceColumnDescription = "描述"
ServiceColumnStartupType = "启动类型"
ServiceColumnProcess = "进程"
ServiceStatusStopped = "已停止"
ServiceStatusStartPending = "正在启动"
ServiceStatusStopPending = "正在停止"
ServiceStatusContinuePending = "正在继续"
ServiceStatusPausePending = "正在暂停"
ServiceStatusPaused = "已暂停"
ServiceStartupBoot = "引导"
ServiceStartupSystem = "系统"
ServiceStartupAutomatic = "自动"
ServiceStartupManual = "手动"
ServiceStartupDisabled = "禁用"
ServiceStartFailed = "无法启动该服务。"
ServiceStopFailed = "无法停止该服务。"
ServiceStateUnchanged = "该服务没有进入请求的状态。"
ServiceProcessPid = "PID"

[menu_status_help]
IDM_RUN = "Runs a new program"
Expand Down Expand Up @@ -323,3 +346,6 @@ IDM_TASK_CASCADE = "Cascades the windows diagonally on the desktop"
IDM_TASK_TILEHORZ = "Tiles the windows horizontally on the desktop"
IDM_TASK_TILEVERT = "Tiles the windows vertically on the desktop"
IDM_TASK_BRINGTOFRONT = "Brings the window front, but does not switch to it"
IDM_SERVICE_START = "启动所选服务"
IDM_SERVICE_STOP = "停止所选服务"
IDM_SERVICE_GOTOPROCESS = "在进程页选中该服务的进程"
26 changes: 26 additions & 0 deletions localization/zh_tw.toml
Original file line number Diff line number Diff line change
Expand Up @@ -291,6 +291,29 @@ ConfirmDisconnectSelectedUsers = "確定要中斷選取的使用者嗎?"
SelectedUserCouldNotBeLoggedOff = "無法將選取的使用者登出。"
SelectedUserCouldNotBeDisconnected = "無法中斷選取的使用者。"
Win32ErrorPrefix = "Win32 錯誤:"
ServicesPageTitle = "服務"
ServicesMenu = "服務(&S)"
ServiceStart = "啟動(&S)"
ServiceStop = "停止(&T)"
ServiceColumnName = "名稱"
ServiceColumnDescription = "描述"
ServiceColumnStartupType = "啟動類型"
ServiceColumnProcess = "處理程序"
ServiceStatusStopped = "已停止"
ServiceStatusStartPending = "正在啟動"
ServiceStatusStopPending = "正在停止"
ServiceStatusContinuePending = "正在繼續"
ServiceStatusPausePending = "正在暫停"
ServiceStatusPaused = "已暫停"
ServiceStartupBoot = "開機"
ServiceStartupSystem = "系統"
ServiceStartupAutomatic = "自動"
ServiceStartupManual = "手動"
ServiceStartupDisabled = "已停用"
ServiceStartFailed = "無法啟動服務。"
ServiceStopFailed = "無法停止服務。"
ServiceStateUnchanged = "服務沒有進入要求的狀態。"
ServiceProcessPid = "PID"

[menu_status_help]
IDM_RUN = "Runs a new program"
Expand Down Expand Up @@ -323,3 +346,6 @@ IDM_TASK_CASCADE = "Cascades the windows diagonally on the desktop"
IDM_TASK_TILEHORZ = "Tiles the windows horizontally on the desktop"
IDM_TASK_TILEVERT = "Tiles the windows vertically on the desktop"
IDM_TASK_BRINGTOFRONT = "Brings the window front, but does not switch to it"
IDM_SERVICE_START = "啟動選取的服務"
IDM_SERVICE_STOP = "停止選取的服務"
IDM_SERVICE_GOTOPROCESS = "在處理程序頁選取該服務的處理程序"
Loading