using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Diagnostics;
namespace hide
{
class Program
{
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
const int SW_HIDE = 0;
const int SW_SHOW = 5;
static void Main(string[] args)
{
var handle = GetConsoleWindow();
ShowWindow(handle, SW_HIDE);
Console.Read();
}
}
}
Но он у меня почему то не работает, хотя ошибок нет
Василий Банников, Консольное приложение. Например в питоне, это делаться с помощью расширения .pyw, мне нужна альтернатива для с#. А сама программа, считывает запущенные программы на пк.
flexpc, а почему она должна быть скрыта от глаз?
Консольное приложение оно же на то и консольное, что в консоль должен выводиться результат его работы.
Обычно их запускают из командной строки
flexpc, ну он же должен же как-то понять, что программа работает и выполняет какую-то полезную работу?
Повторюсь - в этом и есть суть консольных утилит, что они запускаются в командной строке и выводят свой результат в виде текста.
На всех "нормальных" ОС никто их даблкликом не запускает, а специально заранее открывает "чёрное" окно и вводит его название.
Это кстати одна из причин, почему Console.ReadLine в конце - антипаттерн.
Если нужно что-то что постоянно работает в фоне - делают службу/фоновых процесс/итд.
В крайнем случае - прячут окно и загоняют в трей.
flexpc, вот что кстати сделает попытка скрыть окно консоли на Win 11, если используется Windows Terminal:
Так что лучше забить и сделать нормальное консольное приложение, которое пишет полезную информацию.
Либо сделать нормальный фоновый сервис, который будет, например, автоматически запускаться с системой.
Либо делать UI приложение без UI (на winforms и прячешь все UI окна) и загнать в трей.