কোন কনসোল অ্যাপ্লিকেশন চালানোর সময় কনসোল উইন্ডোটি লুকানোর কোনও উপায় আছে?
কনসোল প্রক্রিয়া শুরু করার জন্য আমি বর্তমানে একটি উইন্ডোজ ফর্ম অ্যাপ্লিকেশন ব্যবহার করছি, তবে আমি চাই না যে টাস্কটি চলাকালীন কনসোল উইন্ডো প্রদর্শিত হবে।
কোন কনসোল অ্যাপ্লিকেশন চালানোর সময় কনসোল উইন্ডোটি লুকানোর কোনও উপায় আছে?
কনসোল প্রক্রিয়া শুরু করার জন্য আমি বর্তমানে একটি উইন্ডোজ ফর্ম অ্যাপ্লিকেশন ব্যবহার করছি, তবে আমি চাই না যে টাস্কটি চলাকালীন কনসোল উইন্ডো প্রদর্শিত হবে।
উত্তর:
আপনি যদি ProcessStartInfo
ক্লাসটি ব্যবহার করে থাকেন তবে আপনি উইন্ডো স্টাইলটি গোপনে সেট করতে পারেন - কনসোলের (জিইউআই নয়) অ্যাপ্লিকেশনগুলির ক্ষেত্রে আপনাকে ক্রিয়েটনিও উইন্ডোটি সেট করতে হবে true
:
System.Diagnostics.ProcessStartInfo start =
new System.Diagnostics.ProcessStartInfo();
start.FileName = dir + @"\Myprocesstostart.exe";
start.WindowStyle = System.Diagnostics.ProcessWindowStyle.Hidden; //Hides GUI
start.CreateNoWindow = true; //Hides console
আপনি যদি কনসোল অ্যাপ্লিকেশন লিখে থাকেন তবে আপনি এটি ডিফল্টরূপে গোপন করতে পারেন।
একটি নতুন কনসোল অ্যাপ্লিকেশন তৈরি করুন তারপরে "আউটপুট ধরণ" প্রকারটিকে "উইন্ডোজ অ্যাপ্লিকেশন" তে পরিবর্তন করুন (প্রকল্পের বৈশিষ্ট্যে সম্পন্ন)
আপনি যদি প্রসেস ক্লাস ব্যবহার করেন তবে লিখতে পারেন
yourprocess.StartInfo.UseShellExecute = false;
yourprocess.StartInfo.CreateNoWindow = true;
আগে yourprocess.start();
এবং প্রক্রিয়া লুকানো হবে
সহজ উত্তরটি হ'ল: আপনার কনসোল অ্যাপের বৈশিষ্ট্যগুলিতে (প্রকল্পের বৈশিষ্ট্য) যান "" অ্যাপ্লিকেশন "ট্যাবটিতে, কেবল" আউটপুট ধরণ "টিকে "উইন্ডোজ অ্যাপ্লিকেশন" এ পরিবর্তন করুন। এখানেই শেষ.
প্রক্রিয়াটি থেকে কনসোলকে আলাদা করতে আপনি ফ্রি কনসোল এপিআই ব্যবহার করতে পারেন :
[DllImport("kernel32.dll")]
static extern bool FreeConsole();
(অবশ্যই আপনার যদি কনসোল অ্যাপ্লিকেশনটির উত্স কোড অ্যাক্সেস থাকে তবে এটি প্রযোজ্য)
FreeConsole
চাপলে কি হবে তার নাম বলছেন, এটা কনসোল দেখানোর আগে এটা বলা হয় থেকে Windows বাধা দেয় না।
[DllImport("kernel32.dll")] static extern bool AllocConsole();
আপনাকে একটি স্ট্যান্ডার্ড উইন
আপনি যদি আউটপুটটিতে আগ্রহী হন তবে আপনি এই ফাংশনটি ব্যবহার করতে পারেন:
private static string ExecCommand(string filename, string arguments)
{
Process process = new Process();
ProcessStartInfo psi = new ProcessStartInfo(filename);
psi.Arguments = arguments;
psi.CreateNoWindow = true;
psi.RedirectStandardOutput = true;
psi.RedirectStandardError = true;
psi.UseShellExecute = false;
process.StartInfo = psi;
StringBuilder output = new StringBuilder();
process.OutputDataReceived += (sender, e) => { output.AppendLine(e.Data); };
process.ErrorDataReceived += (sender, e) => { output.AppendLine(e.Data); };
// run the process
process.Start();
// start reading output to events
process.BeginOutputReadLine();
process.BeginErrorReadLine();
// wait for process to exit
process.WaitForExit();
if (process.ExitCode != 0)
throw new Exception("Command " + psi.FileName + " returned exit code " + process.ExitCode);
return output.ToString();
}
এটি প্রদত্ত কমান্ড লাইন প্রোগ্রামটি চালায়, এটি শেষ হওয়ার জন্য অপেক্ষা করে এবং আউটপুটটিকে স্ট্রিং হিসাবে ফিরিয়ে দেয়।
যদি আপনি এমন একটি প্রোগ্রাম তৈরি করেন যা ব্যবহারকারীর ইনপুটটির প্রয়োজন হয় না তবে আপনি সর্বদা এটি পরিষেবা হিসাবে তৈরি করতে পারেন। কোনও পরিষেবা কোনও প্রকারের ইউআই প্রদর্শন করবে না।
ডিএলএল ফাইল আমদানি করতে এটি আপনার শ্রেণিতে যুক্ত করুন:
[DllImport("user32.dll")]
static extern bool ShowWindow(IntPtr hWnd, int nCmdShow);
[DllImport("kernel32.dll")]
static extern IntPtr GetConsoleWindow();
const int SW_HIDE = 0;
const int SW_SHOW = 5;
এবং তারপরে আপনি যদি এটি আড়াল করতে চান তবে এই কমান্ডটি ব্যবহার করুন:
var handle = GetConsoleWindow();
ShowWindow(handle, SW_HIDE);
এবং আপনি যদি কনসোলটি দেখাতে চান:
var handle = GetConsoleWindow();
ShowWindow(handle, SW_SHOW);
আমি জানি আপনি যা চান ঠিক তার উত্তর দিচ্ছি না, তবে আপনি যদি সঠিক প্রশ্ন জিজ্ঞাসা করছেন তবে আমি ভাবছি।
আপনি কেন ব্যবহার করবেন না:
আপনার শব্দগুলি যদি কোনও প্রক্রিয়া চালাতে চায় তবে আরও ভাল বিকল্পগুলির মতো সেই শব্দগুলি।
যদিও এখানে অন্যান্য উত্তরগুলি বলেছে আপনি "আউটপুট ধরণ" কে "উইন্ডোজ অ্যাপ্লিকেশন" এ পরিবর্তন করতে পারেন তবে দয়া করে সচেতন হন যে এর অর্থ হ'ল আপনি ব্যবহার করতে পারবেন না Console.In
হ'ল আপনি এটি যেহেতু এটি নল স্ট্রিমরেডার হয়ে যাবে।
Console.Out
এবং Console.Error
এখনও ঠিক কাজ করা বলে মনে হচ্ছে।
Console.In
কোনও কিছু ইনপুট করার জন্য কনসোল না থাকলে কেউ কেন ব্যবহার করবে ? যেখান থেকে কিছু আসা উচিত সেখানে দিয়ে অ্যাক্সেস করা যেতে পারে Console.In
? এটি মোটেই কোনও মানে করে না। অন্য কথায়: এটা যে সম্পূর্ণই সুস্পষ্ট এবং যৌক্তিক Console.In
একটি হল NullStreamReader
এই ক্ষেত্রে।
উপরের অ্যাডাম মার্কোভিটসের উত্তরের ভিত্তিতে, নিম্নলিখিতগুলি আমার পক্ষে কাজ করেছে:
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();
আমি ভাগ করার একটি সাধারণ সমাধান পেয়েছি:
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();
।
আপনি যখন ক্লিক করে প্রোগ্রামটি শুরু করবেন তখন একটি কনসোল ফ্ল্যাশ হবে। কমান্ড প্রম্পট থেকে কার্যকর করার সময়, কমান্ড প্রম্পট কার্যকর হওয়ার খুব শীঘ্রই অদৃশ্য হয়ে যায়।
আমি এটি একটি ডিসকর্ড বটের জন্য করি যা আমার কম্পিউটারের পটভূমিতে একটি অদৃশ্য প্রক্রিয়া হিসাবে চিরকাল চলে। আমার পক্ষে টপশেলফ কাজ করার চেয়ে সহজ ছিল। একটি দম্পতি টপসেল্ফ টিউটোরিয়াল আমাকে ব্যর্থ করেছিল অন্য কোথাও খুঁজে পাওয়া কোডের সাহায্যে এটি লেখার আগে। ; p
আমি কনসোল অ্যাপ্লিকেশনটির পরিবর্তে উইন্ডোজ অ্যাপ্লিকেশন হিসাবে চালু করার জন্য ভিজ্যুয়াল স্টুডিও> প্রকল্প> বৈশিষ্ট্য> অ্যাপ্লিকেশন এর সেটিংস পরিবর্তন করার চেষ্টা করেছি এবং আমার প্রকল্প সম্পর্কে কিছু এটিকে আমার কনসোলটি আড়াল করা থেকে বিরত করেছিল - কারণ ডিএসআরপপ্লাস স্টার্টআপে কনসোল চালু করার দাবি করেছে । আমি জানি না। কারণ যাই হোক না কেন, এই শ্রেণিটি পপ আপ হওয়ার পরে সহজেই কনসোলটি মেরে ফেলার অনুমতি দেয়।
আশা করি এই যাদুকর কাউকে সাহায্য করবে। ;)