আল্ট-ট্যাব প্রোগ্রামের স্যুইচার থেকে উইন্ডোটি লুকানোর সর্বোত্তম উপায়?


101

আমি বেশ কয়েক বছর ধরে একটি নেট নেট বিকাশকারী হয়েছি এবং এটি এখনও ঠিক এইভাবে করা জিনিসগুলির মধ্যে একটি is উইন্ডোজ ফর্ম এবং ডাব্লুপিএফ উভয়েরই একটি সম্পত্তির মাধ্যমে টাস্কবার থেকে উইন্ডোটি আড়াল করা সহজ, তবে আমি যতদূর বলতে পারি, এটি Alt+ ↹Tabডায়ালগ থেকে আড়াল হওয়ার গ্যারান্টি দেয় না (বা অগত্যা এমনকি এটি প্রভাবিতও করে) doesn't আমি অদৃশ্য উইন্ডোগুলিকে Alt+ এ দেখাতে দেখেছি ↹Tabএবং আমি কেবল ভাবছি যে উইন্ডোটি গ্যারান্টি দেওয়ার সর্বোত্তম উপায় হ'ল + ডায়ালগটিতে কখনই প্রদর্শিত হবে না (দৃশ্যমান হবে না) guaranteeAlt↹Tab

আপডেট: নীচে আমার পোস্ট সমাধান দেখুন। আমার নিজের উত্তরগুলি সমাধান হিসাবে চিহ্নিত করার অনুমতি নেই তবে এখনও অবধি এটিই কাজ করে।

আপডেট 2: ফ্রেঞ্চি পেনভের এখন একটি উপযুক্ত সমাধান রয়েছে যা দেখতে বেশ সুন্দর দেখাচ্ছে, কিন্তু আমি নিজে চেষ্টা করে দেখিনি। কিছু উইন 32 জড়িত, তবে অফ-স্ক্রিন উইন্ডোগুলির লম্পট সৃষ্টি এড়ায়।


13
সিস্টেম ট্রে অ্যাপ্লিকেশনগুলি দুর্দান্ত উদাহরণ
ট্র্যাভিসো

3
আমি এটি একটি কারণেই করতে চাই কারণ আমার অ্যাপ্লিকেশন কোনও মডেল ইন্টারফেস প্রদর্শন করছে এমন ধরণের ইউএসি ডায়ালগের মতো যখন একটি "ম্লান" প্রভাব সরবরাহ করতে আমি একটি পূর্ণ-স্ক্রিন সেমিট্রান্সপারেন্টেন্ট ব্ল্যাক উইন্ডো ব্যবহার করি। যেহেতু এটি একটি ইন্টারেক্টিভ উইন্ডো নয় এটি আল্ট-ট্যাব সংলাপে এটি দেখানোর কোনও বিন্দু নেই।
ডিভিওস 1

8
আমি যখন আপনার অ্যাপ্লিকেশনটির নিজস্ব মডেল ডায়ালগ দেখায় তখন পুরো ডেস্কটপটিকে ম্লান করার বিরুদ্ধে পরামর্শ দেব। ডেস্কটপটি ডিম্পিং করা একটি ওএস স্তরের ক্রিয়াকলাপের পরামর্শ দেয়। এটি নিরাপদ ডেস্কটপ নয় এটি বুঝতে সক্ষম হওয়ার জন্য বেশিরভাগ লোকেরা যথেষ্ট পরিমাণ জ্ঞানকে নমনীয় হতে পারে না।
ফ্রেঞ্চি পেনভ

3
"কোনও সম্পত্তির মাধ্যমে টাস্কবার থেকে উইন্ডোটি লুকানো সহজ" easy এই সম্পত্তিটি শোইনটাস্কবার (কেবলমাত্র রেকর্ডের জন্য)।
গ্রীনল্ডম্যান

প্রশ্নটি টাস্কবার থেকে নয়, আলটি-ট্যাব থেকে উইন্ডোটি আড়াল করার বিষয়ে।
আলেকজান্দ্রু ডিকু

উত্তর:


93

হালনাগাদ:

@ ডোনোভানের মতে, আধুনিক দিনগুলি ডাব্লুপিএফ সেটআপ ShowInTaskbar="False"এবং Visibility="Hidden"এক্সএএমএল-এর মাধ্যমে এটিকে স্থানীয়ভাবে সমর্থন করে। (আমি এটি এখনও পরীক্ষা করে দেখিনি, তবে তবুও মন্তব্যটির দৃশ্যমানতাকে টুকরো টুকরো করার সিদ্ধান্ত নিয়েছি)

আসল উত্তর:

উইন 32 এপিআইতে টাস্ক সুইচার থেকে উইন্ডোটি আড়াল করার দুটি উপায় রয়েছে:

  1. যোগ করার জন্য WS_EX_TOOLWINDOWসঠিক পন্থা যে - বর্ধিত জানালা শৈলী।
  2. এটিকে অন্য উইন্ডোর চাইল্ড উইন্ডো তৈরি করতে।

দুর্ভাগ্যক্রমে, ডাব্লুপিএফ উইন্ডো স্টাইলের উপর উইন 32 এর মতো নমনীয় নিয়ন্ত্রণ সমর্থন করে না, এইভাবে একটি উইন্ডোটি WindowStyle=ToolWindowডিফল্ট WS_CAPTIONএবং WS_SYSMENUশৈলীর সমাপ্ত হয় , যার ফলে এটি একটি ক্যাপশন এবং একটি বন্ধ বোতাম রাখে to অন্যদিকে, আপনি সেট করে এই দুটি শৈলী মুছে ফেলতে পারেন WindowStyle=None, তবে এটি WS_EX_TOOLWINDOWপ্রসারিত শৈলী সেট করবে না এবং উইন্ডোটি কার্য স্যুইচার থেকে গোপন করা হবে না।

এটির সাথে ডাব্লুপিএফ উইন্ডোটি WindowStyle=Noneটাস্ক স্যুইচার থেকেও গোপন রাখা, দুটি উপায়ের মাধ্যমে যে কোনও একটি হতে পারে:

  • উপরের নমুনা কোডটি নিয়ে যান এবং উইন্ডোটিকে একটি ছোট লুকানো সরঞ্জাম উইন্ডোর একটি শিশু উইন্ডো করুন
  • WS_EX_TOOLWINDOWবর্ধিত শৈলী অন্তর্ভুক্ত করতে উইন্ডো শৈলীটি পরিবর্তন করুন ।

আমি ব্যক্তিগতভাবে দ্বিতীয় পদ্ধতির পছন্দ করি। তারপরে আবার আমি ক্লায়েন্ট এরিয়ায় কাঁচ বাড়ানো এবং যেভাবেই ক্যাপশনে ডাব্লুপিএফ অঙ্কন সক্ষম করে দেওয়া উচিত তাই কিছুটা আন্তঃব্যবস্থা বড় সমস্যা নয় inter

উইন 32 ইন্টারপ সমাধান পদ্ধতির জন্য নমুনা কোডটি এখানে। প্রথম, এক্সএএমএল অংশ:

<Window x:Class="WpfApplication1.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Height="300" Width="300"
    ShowInTaskbar="False" WindowStyle="None"
    Loaded="Window_Loaded" >

এখানে খুব বেশি অভিনব কিছু নয়, আমরা কেবল WindowStyle=Noneএবং সাথে একটি উইন্ডো ঘোষণা করি ShowInTaskbar=False। আমরা লোড ইভেন্টে একটি হ্যান্ডলারও যুক্ত করি যেখানে আমরা বর্ধিত উইন্ডো স্টাইলটি সংশোধন করব। আমরা কনস্ট্রাক্টরে সেই কাজটি করতে পারি না, কারণ এখনও পর্যন্ত সেই মুহুর্তে কোনও উইন্ডো হ্যান্ডেল নেই। ইভেন্ট হ্যান্ডলারটি নিজেই খুব সাধারণ:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    WindowInteropHelper wndHelper = new WindowInteropHelper(this);

    int exStyle = (int)GetWindowLong(wndHelper.Handle, (int)GetWindowLongFields.GWL_EXSTYLE);

    exStyle |= (int)ExtendedWindowStyles.WS_EX_TOOLWINDOW;
    SetWindowLong(wndHelper.Handle, (int)GetWindowLongFields.GWL_EXSTYLE, (IntPtr)exStyle);
}

এবং Win32 ইন্টারপ ঘোষণা। আমি এখানে নমুনা কোডটি ছোট রাখার জন্য এনামগুলি থেকে সমস্ত অপ্রয়োজনীয় শৈলী সরিয়েছি। এছাড়াও, দুর্ভাগ্যক্রমে SetWindowLongPtrউইন্ডোজ এক্সপিতে ব্যবহারকারীর 32.dll এন্ট্রি পয়েন্টটি খুঁজে পাওয়া যায় নি, এর SetWindowLongপরিবর্তে কলটি রাউটিং করার কৌশল ।

#region Window styles
[Flags]
public enum ExtendedWindowStyles
{
    // ...
    WS_EX_TOOLWINDOW = 0x00000080,
    // ...
}

public enum GetWindowLongFields
{
    // ...
    GWL_EXSTYLE = (-20),
    // ...
}

[DllImport("user32.dll")]
public static extern IntPtr GetWindowLong(IntPtr hWnd, int nIndex);

public static IntPtr SetWindowLong(IntPtr hWnd, int nIndex, IntPtr dwNewLong)
{
    int error = 0;
    IntPtr result = IntPtr.Zero;
    // Win32 SetWindowLong doesn't clear error on success
    SetLastError(0);

    if (IntPtr.Size == 4)
    {
        // use SetWindowLong
        Int32 tempResult = IntSetWindowLong(hWnd, nIndex, IntPtrToInt32(dwNewLong));
        error = Marshal.GetLastWin32Error();
        result = new IntPtr(tempResult);
    }
    else
    {
        // use SetWindowLongPtr
        result = IntSetWindowLongPtr(hWnd, nIndex, dwNewLong);
        error = Marshal.GetLastWin32Error();
    }

    if ((result == IntPtr.Zero) && (error != 0))
    {
        throw new System.ComponentModel.Win32Exception(error);
    }

    return result;
}

[DllImport("user32.dll", EntryPoint = "SetWindowLongPtr", SetLastError = true)]
private static extern IntPtr IntSetWindowLongPtr(IntPtr hWnd, int nIndex, IntPtr dwNewLong);

[DllImport("user32.dll", EntryPoint = "SetWindowLong", SetLastError = true)]
private static extern Int32 IntSetWindowLong(IntPtr hWnd, int nIndex, Int32 dwNewLong);

private static int IntPtrToInt32(IntPtr intPtr)
{
    return unchecked((int)intPtr.ToInt64());
}

[DllImport("kernel32.dll", EntryPoint = "SetLastError")]
public static extern void SetLastError(int dwErrorCode);
#endregion

2
এটি যাচাই করা হয়নি তবে মনে হচ্ছে আপনি কী জানেন আপনি কি জানেন। :) আমি যদি আবার এটি করার দরকার হয় তবে আমি এটি মনে রাখব, তবে যেহেতু আমার অন্যান্য সমাধানটি ঠিকঠাক কাজ করছে (এবং এটির পরে আমি বইটি বন্ধ করে ফেলেছি) আমি কিছুটা ভাঙ্গতে এবং কিছু ভাঙতে চাই না । ধন্যবাদ!
ডিভাইস 1

1
পুরোপুরি কাজ করে! ধন্যবাদ!
অ্যান্টনি ব্রায়েন

আমার জন্য ভাল কাজ করে। তবে আমি এই জাতীয় dll আমদানি করতে পছন্দ করি না: পি
জে

8
@ J4N - আছে হরদম পি / ডাকা একটি বিট সঙ্গে :-) কিছুই ভুল
Franci Penov

1
এটি ডাব্লুপিএফ-এ আমার পক্ষে কাজ করেনি। তবে চারপাশে খেলার পরে আমি খুঁজে পেলাম এক্সএএমএল-তে শোআইনটাস্কবার = "মিথ্যা" এবং দৃশ্যমানতা = "লুকানো" সেট করা থেকে আরও সহজ সমাধান। কোনও বিশেষ পিনভোকের প্রয়োজন নেই।
donovan

40

আপনার ফর্ম শ্রেণীর অভ্যন্তরে এটি যুক্ত করুন:

protected override CreateParams CreateParams
{
    get
    {
        var Params = base.CreateParams;
        Params.ExStyle |= 0x80;

        return Params;
    }
}

তার যে হিসাবে হিসাবে সহজ; একটি কবজ কাজ করে!


3
এটি কাজ করার জন্য শোআইএনটাস্কবারকে মিথ্যাতে সেট করতে হবে।
নিক স্প্রেইটিজার

20

আমি একটি সমাধান খুঁজে পেয়েছি, তবে এটি সুন্দর নয়। এ পর্যন্ত এই হল শুধুমাত্র জিনিস আমি চেষ্টা করেছি যে আসলে কাজ করে:

Window w = new Window(); // Create helper window
w.Top = -100; // Location of new window is outside of visible part of screen
w.Left = -100;
w.Width = 1; // size of window is enough small to avoid its appearance at the beginning
w.Height = 1;
w.WindowStyle = WindowStyle.ToolWindow; // Set window style as ToolWindow to avoid its icon in AltTab 
w.Show(); // We need to show window before set is as owner to our main window
this.Owner = w; // Okey, this will result to disappear icon for main window.
w.Hide(); // Hide helper window just in case

এটি এখানে খুঁজে পেয়েছি ।

আরও সাধারণ, পুনরায় ব্যবহারযোগ্য সমাধানটি দুর্দান্ত। আমি মনে করি আপনি একটি ডাবল উইন্ডো 'ডাব্লু' তৈরি করতে পারেন এবং এটি আপনার অ্যাপ্লিকেশনের সমস্ত উইন্ডোর জন্য পুনরায় ব্যবহার করতে পারেন যা Alt+ থেকে গোপন করা দরকার ↹Tab

আপডেট: ঠিক আছে তাই আমি যা করেছি তা ছিল আমার অ্যাপ্লিকেশনটির কনস্ট্রাক্টরের উপরের কোডটি, বিয়োগ this.Owner = wবিট (এবং w.Hide()অবিলম্বে সরানো w.Show(), যা ভাল কাজ করে) Windowডেকে আনা একটি সার্বজনীন স্ট্যাটিক তৈরি করে OwnerWindow। যখনই আমি এই আচরণটি প্রদর্শন করার জন্য একটি উইন্ডো চাই, আমি কেবল সেট করি this.Owner = App.OwnerWindow। দুর্দান্ত কাজ করে এবং কেবলমাত্র একটি অতিরিক্ত (এবং অদৃশ্য) উইন্ডো তৈরি করা জড়িত। এমনকি this.Owner = nullআপনি উইন্ডোটি Alt+ ↹Tabডায়ালগটিতে আবার প্রদর্শিত হতে চাইলে সেট করতে পারেন ।

সমাধানের জন্য এমএসডিএন ফোরামে ইভান ওনুচিনকে ধন্যবাদ জানাই।

আপডেট 2: আপনি টাস্কবারে সংক্ষিপ্তভাবে ঝলকানি থেকে বাধা দেওয়ার জন্য এটিকে সেট ShowInTaskBar=falseকরা উচিত wshown


সেই সমস্যাটির জন্য উইন 32 ইন্টারপ সমাধানও রয়েছে।
ফ্রেঞ্চি পেনভ

আকর্ষণীয়, আমি এই পদ্ধতিটি করছি তবে লুকানো উইন্ডোটি এড়ানো (মালিক হিসাবে মূল অ্যাপ উইন্ডো ব্যবহার করে), এবং এটি আল্ট-ট্যাবে প্রদর্শিত হচ্ছে না ...
ডেভ

1
আমি দ্বৈত-মনিটরের কনফিগারেশনগুলিতে মনে করি, দ্বিতীয় স্ক্রিনে নেতিবাচক স্থানাঙ্কও থাকতে পারে।
থমাস ওয়েলার

@ThomasW। তুমি সম্ভবত সঠিক. পছন্দ মতো অফসেট ব্যবহার -100000করা আরও ভাল।
ডিভাইস 1

এটি এই সমস্যার জন্য সত্যই একটি খারাপ হ্যাক।
আলেকজান্দ্রু ডিকু

10

এত জটিল কেন? এটা চেষ্টা কর:

me.FormBorderStyle = FormBorderStyle.SizableToolWindow
me.ShowInTaskbar = false

ধারণাটি এখান থেকে নেওয়া হয়েছে: http://www.csharp411.com/hide-form-from-alttab/


আমার জন্য কাজ কর. অবদানের জন্য ধন্যবাদ!
MiBol

তবে একটি সরঞ্জাম উইন্ডো সর্বোচ্চ বা সংক্ষিপ্ত করা যায় না। একটি সরঞ্জাম উইন্ডো সর্বদা একটি পছন্দসই বিকল্প নয়।
আলেকজান্দ্রু ডিকু

10

আপনি যে উইন্ডোটি Alt+ থেকে আড়াল করার চেষ্টা করছেন তা নির্বিশেষে কৌশলটি কী করে তা এখানে ↹Tab

আপনার ফর্মটির নির্মাণকারীর মধ্যে নিম্নলিখিতটি রাখুন:

// Keep this program out of the Alt-Tab menu

ShowInTaskbar = false;

Form form1 = new Form ( );

form1.FormBorderStyle = FormBorderStyle.FixedToolWindow;
form1.ShowInTaskbar = false;

Owner = form1;

মূলত, আপনি নিজের ফর্মটিকে একটি অদৃশ্য উইন্ডোর একটি শিশু হিসাবে পরিণত করেন যা আল্ট-ট্যাব তালিকার বাইরে রাখতে সঠিক স্টাইল এবং শোআইএনটাস্কবার সেটিংস রাখে। আপনাকে অবশ্যই নিজের ফর্মের শোআইএন টাস্কবার সম্পত্তিটি মিথ্যাতে সেট করতে হবে। সর্বোপরি, আপনার মূল ফর্মটি কী স্টাইল করে তা কেবল বিবেচ্য নয় এবং লুকানো সম্পন্ন করার জন্য সমস্ত টুইটগুলি কনস্ট্রাক্টর কোডের কয়েকটি লাইন।


অপেক্ষা করুন ... এই এক সি # বা সি বা সি ++ ??? আমি সি পরিবারে বা যাই হোক না কেন সত্যিই একটি n00b ...
শ্রীনিকেতন আমি

3

এত কোড কেন চেষ্টা করছেন? শুধু FormBorderStyleপ্রপ্টি সেট করুন FixedToolWindow। আশা করি এটা সাহায্য করবে.


2

এটি দেখুন: ( http://bytes.com/topic/c-sharp/answers/442047-hide-alt-tab-list#post1683880 থেকে )

[DllImport("user32.dll")]
public static extern int SetWindowLong( IntPtr window, int index, int
value);
[DllImport("user32.dll")]
public static extern int GetWindowLong( IntPtr window, int index);


const int GWL_EXSTYLE = -20;
const int WS_EX_TOOLWINDOW = 0x00000080;
const int WS_EX_APPWINDOW = 0x00040000;

private System.Windows.Forms.NotifyIcon notifyIcon1;


// I use two icons depending of the status of the app
normalIcon = new Icon(this.GetType(),"Normal.ico");
alertIcon = new Icon(this.GetType(),"Alert.ico");
notifyIcon1.Icon = normalIcon;

this.WindowState = System.Windows.Forms.FormWindowState.Minimized;
this.Visible = false;
this.ShowInTaskbar = false;
iconTimer.Start();

//Make it gone frmo the ALT+TAB
int windowStyle = GetWindowLong(Handle, GWL_EXSTYLE);
SetWindowLong(Handle, GWL_EXSTYLE, windowStyle | WS_EX_TOOLWINDOW);

আমি এখানে যুক্ত করব যে 'হ্যান্ডেল' ভার হ্যান্ডেল = নতুন উইন্ডোআইন্টার্পেহেল্পার (এটি) দ্বারা জোগানো যেতে পারে and
আলেকজান্দ্রু ডিকু

1

এক্সএএমএল-তে শোআইএনটাস্কবার = "মিথ্যা" সেট করুন:

<Window x:Class="WpfApplication5.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    ShowInTaskbar="False"    
    Title="Window1" Height="300" Width="300">
    <Grid>

    </Grid>
</Window>

সম্পাদনা করুন: এটি এখনও টাস্কবারে নয়, আমার ধারনা Alt + ট্যাবে এটি এখনও প্রদর্শন করে।


হ্যাঁ এটিই সমস্যা: শো-ইনটাস্কবারটি আপনার পছন্দ মতো Alt + ট্যাব ডায়ালগটিকে প্রভাবিত করে না।
ডিভাইস 1

1

মূল ফর্মটির দৃশ্যমানতাটিকে মিথ্যাতে সেট করার চেষ্টা করেছি যখনই এটি স্বয়ংক্রিয়ভাবে সত্য হয়ে যায়:

private void Form1_VisibleChanged(object sender, EventArgs e)
{
    if (this.Visible)
    {
        this.Visible = false;
    }
}

এটি পুরোপুরি কাজ করে :)


2
এটি কেবলমাত্র সহজ সমাধান নয়, তবে এটি আমার পক্ষে খুব সুন্দরভাবে কাজ করেছে worked
ড্যানিয়েল ম্যাককুইস্টন

1

আপনি যদি ফর্মটি সীমান্তহীন হতে চান, তবে আপনাকে ফর্মটির নির্মাতার সাথে নিম্নলিখিত বিবৃতি যুক্ত করতে হবে:

this.FormBorderStyle = FormBorderStyle.None;
this.ShowInTaskbar = false;

এবং আপনাকে অবশ্যই নিম্নলিখিত উত্সটি আপনার উদ্ভূত ফর্ম শ্রেণিতে যুক্ত করতে হবে:

protected override CreateParams CreateParams
{
    get
    {
        CreateParams cp = base.CreateParams;
        // turn on WS_EX_TOOLWINDOW style bit
        cp.ExStyle |= 0x80;
        return cp;
    }
}

আরো বিস্তারিত



0


ফর্ম 1 বৈশিষ্ট্যাবলী: ফর্মবোর্ডার স্টাইল:
আকারের উইন্ডোস্টেট: মিনিমাইজড
শো ইনটাস্কবার: মিথ্যা

private void Form1_Load(object sender, EventArgs e)
{
   // Making the window invisible forces it to not show up in the ALT+TAB
   this.Visible = false;
}>

-1

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

আপনার প্রয়োজনের উপর নির্ভর করে আপনার অ্যাপ্লিকেশন প্রসঙ্গটি একটি নোটিফাইকন (সিস্টেম ট্রে) অ্যাপ্লিকেশন হিসাবে বিকাশ করলে এটি ALT + TAB এ প্রদর্শন না করে চলমান চলবে। তবুও, আপনি যদি কোনও ফর্ম খোলেন, সেই ফর্মটি এখনও মানক কার্যকারিতা অনুসরণ করবে।

আপনি যদি চান তবে ডিফল্টরূপে কেবলমাত্র একটি বিজ্ঞপ্তি আইকন অ্যাপ্লিকেশন তৈরি সম্পর্কে আমার ব্লগ নিবন্ধটি খনন করতে পারি।


তুমি এটা বোঝাতে চাও? মিচেলসেলাররা
স্টিভেন এ। লো

আমি ইতিমধ্যে নোটিফাইকনগুলিতে পারদর্শী, ধন্যবাদ। সমস্যাটি হ'ল আমি Alt + ট্যাব থেকে খোলা (অ-ইন্টারেক্টিভ, বা শীর্ষস্থানীয়) উইন্ডোগুলি আড়াল করতে চাই। মজার বিষয় হল, আমি কেবল লক্ষ্য করেছি যে ভিস্টা সাইডবারটি Alt + ট্যাবে উপস্থিত হয় না, তাই এটি করার জন্য অবশ্যই কিছু উপায় থাকতে হবে।
ডিভাইস 1

বিভিন্ন বিট এবং টুকরোগুলি দেখে উইন্ডোর ধরণ পরিবর্তন না করে (রেডবার্ড পোস্ট করা হিসাবে), আমি এটি করার কোনও উপায় জানি না।
মিচেল বিক্রেতারা
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.