Как скрыть чужое приложение в панели задач?
Мне надо скрыть приложение из панели задач на python. Причем приложение не написанное мной, а абсолютно любое.
import subprocess
def startProgramHidden():
SW_HIDE = 0
info = subprocess.STARTUPINFO()
info.dwFlags = subprocess.STARTF_USESHOWWINDOW
info.wShowWindow = SW_HIDE
subprocess.Popen(r"D:\Program Files\CrystalDiskMark8\DiskMark64.exe", startupinfo=info)
startProgramHidden()
Ответы (2 шт):
Любое приложение на Питоне - это хорошо, упрощает задачу. Нужно написать пусковое приложение, которое запускает интерпретатор Питона с нужной программой.
Решение для Windows (отредактированный скопилоченный код c# демонстрирует идею решения):
// pys.cs
// csc /t:winexe pys.cs
using System;
using System.Diagnostics;
using System.Windows.Forms;
namespace HiddenTaskbarApp {
public class MainForm : Form {
static string proga;
public MainForm() {
Text = "Hidden Taskbar Python Starter App";
ShowInTaskbar = false;
WindowState = FormWindowState.Minimized;
Load += MainForm_Load;
}
private void MainForm_Load(object sender, EventArgs e) {
Hide();
ProcessStartInfo startInfo = new ProcessStartInfo {
FileName = "python.exe", Arguments = "\"" + proga + "\"",
UseShellExecute = false, CreateNoWindow = true
};
using (Process process = new Process { StartInfo = startInfo }) {
process.Start(); process.WaitForExit();
}
Close();
}
[STAThread]
static void Main(string[] args){
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
proga = args[0];
Application.Run(new MainForm());
}
}
}
Имя программы задаётся в командной строке. В FileName = "python.exe"
нужно добавить путь к интерпретатору.
Способ задания питон-программы можно изменить, например, использовать для этого текстовый файл.
Проверил, всё работает.
ОБНОВЛЕНИЕ
Если задача стоит наоборот - из Питоновского приложения срыто запустить другую задачу, то этот способ прекрасно подходит. Даже если для Питона для Windows нет такой библиотеки, то можно воспользоваться Windows API. Алгоритм и значения параметров - такие же.
Есть ещё один вариант:
Файл "hiddenrun.js":
var wsc = new ActiveXObject("WScript.Shell");
wsc.Run('X:\\pathToPython\\Python\\Python310\\python.exe "X:\\pathToOrogram\\program.py"', 0, false);
Файл "hiddenrun.cmd":
wscript hiddenrun.js
Нужно запускать "hiddenrun.cmd".
ОБНОВЛЕНИЕ
Если нужно из Питона запускать, тогда...
import subprocess
def startProgramHidden():
SW_HIDE = 0
info = subprocess.STARTUPINFO()
info.dwFlags = subprocess.STARTF_USESHOWWINDOW
info.wShowWindow = SW_HIDE
subprocess.Popen(r'C:\test.exe', startupinfo=info)
def startProgramMinimized():
SW_MINIMIZE = 6
info = subprocess.STARTUPINFO()
info.dwFlags = subprocess.STARTF_USESHOWWINDOW
info.wShowWindow = SW_MINIMIZE
subprocess.Popen(r'C:\test.exe', startupinfo=info)