আমি কীভাবে সি # ব্যবহার করে বর্তমান সক্রিয় উইন্ডোর শিরোনাম পেতে পারি?


109

আমি জানতে চাই যে কীভাবে বর্তমান সক্রিয় উইন্ডোটির উইন্ডো শিরোনামটি দখল করতে হবে (যেমন ফোকাসযুক্ত একটি) সি # ব্যবহার করে।


2
আপনি কি আপনার অ্যাপ্লিকেশনটির মধ্যে কোন উইন্ডোটিতে ফোকাস রয়েছে বা কোনও অ্যাপ্লিকেশনটির কোন উইন্ডোতে ফোকাস রয়েছে তা নির্ধারণ করার চেষ্টা করছেন?
— পেডার রাইস

এটি প্রাসঙ্গিক স্ট্যাকওভারফ্লো / প্রশ্ন / 2423234/… তাই আপনি যদি এটি করতে কোনও বোতাম ক্লিক করতে চান তবে আপনার ফর্মটি ফোকাস না নিয়েছে তা নিশ্চিত করে নেওয়া উচিত।
— বারলপ

উত্তর:


165

আপনি এখানে সম্পূর্ণ উত্স কোড সহ এটি কীভাবে করতে পারেন তার উদাহরণ দেখুন:

http://www.csharphelp.com/2006/08/get-current-window-handle-and-caption-with-windows-api-in-c/

[DllImport("user32.dll")]
static extern IntPtr GetForegroundWindow();

[DllImport("user32.dll")]
static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);

private string GetActiveWindowTitle()
{
    const int nChars = 256;
    StringBuilder Buff = new StringBuilder(nChars);
    IntPtr handle = GetForegroundWindow();

    if (GetWindowText(handle, Buff, nChars) > 0)
    {
        return Buff.ToString();
    }
    return null;
}

আরও নির্ভুলতার জন্য @ ডাওগ ম্যাকক্লিয়েন মন্তব্যে সম্পাদিত ।


7
একটি ভাল নাগরিক হতে ভুলবেন না। ব্লগস.এমএসডন.ল্ডনেউথিং / অর্চিভ/ 2007 / 07/ 27 / 4072156. aspx এবং ব্লগস.এমএসডন.ল্ডনেউথিং / অর্ভিভ /2008/10/06/8969399.aspx এর সম্পর্কিত তথ্য রয়েছে।
— গ্রেগ ডি

3
এটি চালানোর জন্য একটি নতুন নোট, using System.Runtime.InteropServices; এবং dll আমদানি এবং স্থিতিশীল বাহ্যিক লাইনগুলি কোথায় রাখবে তা আবার। ক্লাসের মধ্যে এটি আটকানো
— বার্লোপ

1
@ সিমিং কীভাবে নির্দিষ্ট ব্যবহারকারীর জন্য সক্রিয় ফোরগ্রাউন্ড উইন্ডো পাবেন (আসুন যাক প্রক্রিয়াটি পরিষেবা হিসাবে চালিত হয়)।
— 16

আপনার সাথে লিঙ্ক করা সাইটটি উপলভ্য নয়। এটির (সম্ভবত) এর ওয়েব সংরক্ষণাগারটি এখানে রয়েছে: web.archive.org/web/20150814043810/http://www.csharphelp.com/…
— পাইট্রেইক

2
এছাড়াও, আমি চাই প্রতিবারের ফোরগ্রাউন্ড উইন্ডোটি বদলে যাবে আমার অ্যাপ্লিকেশনটিকে অবহিত করা। তার জন্য কোনও অনুষ্ঠান আছে?
— পিয়োট্রেইক

18

আপনি যদি ডাব্লুপিএফ সম্পর্কে কথা বলছিলেন তবে ব্যবহার করুন:

 Application.Current.Windows.OfType<Window>().SingleOrDefault(w => w.IsActive);

যদি পুরো অ্যাপ্লিকেশনটি সক্রিয় না থাকে (অন্য প্রোগ্রামটিতে ফোকাস রয়েছে), তবে কোনও উইন্ডোতে ইস্যাকটিভটি সত্য হিসাবে সেট করা হবে না।
— টড

আসলে এটি ভুল হতে পারে, আমার ক্ষেত্রে আমি অ-ইউআই থ্রেডে উইন্ডো অ্যারেটি অ্যাক্সেস করার চেষ্টা করছিলাম। যাইহোক, আমি এখনও ঠিক থাকলে এটি আরও দেখুন: social.msdn.microsoft.com/forums/vstudio/en-US/…
— টড

4

লুপ শেষ করুন Application.Current.Windows[]এবং এর সাথে একটিটি সন্ধান করুন IsActive == true।


11
এটি কি কেবল বর্তমান। নেট অ্যাপ্লিকেশনটিতে উইন্ডোজের জন্য কাজ করবে না? আমি মনে করি d4nt ডেস্কটপে বর্তমান সক্রিয় উইন্ডোটির শিরোনাম পেতে চায়, এটি কোনও অ্যাপ্লিকেশনই নয়।
— কোগমিয়ার


2

গেটফোরগ্রাউন্ড উইন্ডো ফাংশনের উপর ভিত্তি করে | মাইক্রোসফ্ট ডক্স :

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern IntPtr GetForegroundWindow();

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);

[DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
static extern int GetWindowTextLength(IntPtr hWnd);

private string GetCaptionOfActiveWindow()
{
    var strTitle = string.Empty;
    var handle = GetForegroundWindow();
    // Obtain the length of the text   
    var intLength = GetWindowTextLength(handle) + 1;
    var stringBuilder = new StringBuilder(intLength);
    if (GetWindowText(handle, stringBuilder, intLength) > 0)
    {
        strTitle = stringBuilder.ToString();
    }
    return strTitle;
}

এটি ইউটিএফ 8 অক্ষর সমর্থন করে।


0

যদি এটি ঘটে তবে আপনার এমডিআই অ্যাপ্লিকেশন থেকে আপনার বর্তমান সক্রিয় ফর্মটি প্রয়োজন : (এমডিআই- মাল্টি ডকুমেন্ট ইন্টারফেস)।

Form activForm;
activForm = Form.ActiveForm.ActiveMdiChild;

-3

আপনি প্রক্রিয়া শ্রেণি ব্যবহার করতে পারেন এটি খুব সহজ। এই নেমস্পেসটি ব্যবহার করুন

using System.Diagnostics;

যদি আপনি সক্রিয় উইন্ডো পেতে একটি বোতাম করতে চান।

private void button1_Click(object sender, EventArgs e)
    {            
       Process currentp = Process.GetCurrentProcess();
       TextBox1.Text = currentp.MainWindowTitle;  //this textbox will be filled with active window.
    }

2
এটা ভুল. এটি আপনার সক্রিয় শিরোনামটি বর্তমান সক্রিয় উইন্ডোর নয় show
— isHuman
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.