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


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.