কিভাবে লুকানো কনসোলের সাথে একটি C#কনসোল অ্যাপ্লিকেশন চালানো যায়




console-application (9)

DLL ফাইলটি আমদানি করতে আপনার ক্লাসে এটি যোগ করুন:

[DllImport("user32.dll")]
    static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

    const int SW_HIDE = 0;
    const int SW_SHOW = 5;

এবং তারপর আপনি যদি লুকাতে চান তবে এটি এই কমান্ডটি ব্যবহার করুন:

var handle = GetConsoleWindow();
ShowWindow(handle, SW_HIDE);

এবং যদি আপনি কনসোল প্রদর্শন করতে চান:

var handle = GetConsoleWindow();
ShowWindow(handle, SW_SHOW);

কনসোল অ্যাপ্লিকেশনটি কার্যকর করার সময় কনসোল উইন্ডোটি লুকাতে কোন উপায় আছে?

আমি বর্তমানে একটি কনসোল প্রক্রিয়া শুরু করার জন্য একটি উইন্ডোজ ফরম অ্যাপ্লিকেশন ব্যবহার করছি, তবে আমি কাজটি চলাকালীন কনসোল উইন্ডোটি প্রদর্শন করতে চাই না।


অ্যাডাম মার্কোভিটস এর উত্তর উপরে ভিত্তি করে, আমার জন্য কাজ করে নিম্নলিখিত:

process = new Process();
process.StartInfo = new ProcessStartInfo("cmd.exe", "/k \"" + CmdFilePath + "\"");
process.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;
//process.StartInfo.UseShellExecute = false;
//process.StartInfo.CreateNoWindow = true;
process.Start();

আপনি এমন একটি প্রোগ্রাম তৈরি করছেন যা ব্যবহারকারীর ইনপুট প্রয়োজন না হলে আপনি সর্বদা এটি একটি পরিষেবা হিসাবে তৈরি করতে পারেন। একটি সেবা ইউআই কোন ধরনের দেখাবে না।


আপনি কনসোল অ্যাপ্লিকেশন লিখেছেন তবে আপনি ডিফল্টরূপে এটি লুকিয়ে রাখতে পারেন।

একটি নতুন কনসোল অ্যাপ্লিকেশন তৈরি করুন তারপরে "আউটপুট প্রকার" টাইপটি "উইন্ডোজ অ্যাপ্লিকেশন" এ পরিবর্তন করুন (প্রকল্প বৈশিষ্ট্যগুলিতে সম্পন্ন)


আমি জানি তুমি ঠিক যা চাও আমি উত্তর দিচ্ছি না, কিন্তু আপনি যদি সঠিক প্রশ্ন জিজ্ঞাসা করছেন তবে আমি ভাবছি।

আপনি কেন ব্যবহার করবেন না:

  1. উইন্ডোজ সেবা
  2. একটি নতুন থ্রেড তৈরি করুন এবং যে আপনার প্রক্রিয়া চালানো

আপনি যদি চান যে ভাল বিকল্প মত যারা শব্দ একটি প্রক্রিয়া চালানো হয়।


আমি শেয়ার করার জন্য একটি সাধারণ সমাধান পেয়েছি:

using System;
using System.Runtime.InteropServices;

namespace WhateverNamepaceYouAreUsing
{
    class Magician
    {
    [DllImport("kernel32.dll")]
        static extern IntPtr GetConsoleWindow();

        [DllImport("user32.dll")]
        static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);

        const int HIDE = 0;
        const int SHOW = 5;

        public static void DisappearConsole()
        {
            ShowWindow(GetConsoleWindow(), HIDE);
        }
    }
}

শুধু আপনার প্রকল্পের এই ক্লাস অন্তর্ভুক্ত করুন, এবং Magician.DisappearConsole(); কল। Magician.DisappearConsole();

আপনি এটি ক্লিক করে প্রোগ্রামটি শুরু করার সময় একটি কনসোল ফ্ল্যাশ হবে। কমান্ড প্রম্পট থেকে নির্বাহ করার সময়, কমান্ড প্রম্পট কার্যকর হওয়ার পরে খুব শীঘ্রই অদৃশ্য হয়ে যায়।

আমি একটি ডিস্কোড বোটের জন্য এটি করি যা আমার কম্পিউটারের পটভূমিতে অদৃশ্য প্রক্রিয়া হিসাবে চিরতরে চলে। TopShelf আমার জন্য কাজ করার চেয়ে এটি সহজ ছিল। আমি অন্যত্র পাওয়া কোড থেকে কিছু সাহায্যের সাথে এটি লেখার আগে একটি দম্পতি TopShelf টিউটোরিয়াল আমাকে ব্যর্থ হয়েছে। ; p

আমি ভিসুয়াল স্টুডিও> প্রোজেক্ট> প্রোপার্টি> অ্যাপ্লিকেশনটি কনসোল অ্যাপ্লিকেশন পরিবর্তে উইন্ডোজ অ্যাপ্লিকেশন হিসাবে চালু করার জন্য সেটিংস পরিবর্তন করার চেষ্টা করেছি এবং আমার প্রকল্প সম্পর্কে কিছু এটি আমার কনসোল গোপন করতে বাধা দেয় - সম্ভবতঃ DSharpPlus প্রারম্ভে কনসোল চালু করার দাবি করে । আমি জানি না। কারণ যাই হোক না কেন, এই ক্লাসটি আমাকে পপ আপ করার পরে কনসোলটি সহজেই হত্যা করতে দেয়।

আশা করি এই জাদুকর কাউকে সাহায্য করবে। ;)


যদিও এখানে অন্য উত্তরগুলি বলেছে যে আপনি "আউটপুট টাইপ" কে "উইন্ডোজ অ্যাপ্লিকেশন" এ পরিবর্তন করতে পারেন তবে দয়া করে সচেতন থাকবেন যে আপনি কনসোল ব্যবহার করতে পারবেন না। এটি একটি NullStreamReader হয়ে যাবে।

Console.Out এবং Console.Error এখনও জরিমানা কাজ বলে মনে হচ্ছে।


শুধু লেখো

ProcessStartInfo psi= new ProcessStartInfo("cmd.exe");
......

psi.CreateNoWindow = true;

আপনি যদি ProcessStartInfo ক্লাস ব্যবহার করেন ProcessStartInfo আপনি উইন্ডো শৈলীটিকে লুকিয়ে রাখতে পারেন:

System.Diagnostics.ProcessStartInfo start =
      new System.Diagnostics.ProcessStartInfo();
start.FileName = dir + @"\Myprocesstostart.exe";
start.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden;




console-application