मुझे c # का उपयोग करके वर्तमान सक्रिय विंडो का शीर्षक कैसे मिलेगा?


109

मैं जानना चाहता हूं कि वर्तमान सक्रिय विंडो का विंडो शीर्षक कैसे पकड़ा जाए (यानी जिस पर ध्यान केंद्रित किया गया है) C # का उपयोग करना।


2
क्या आप यह निर्धारित करने की कोशिश कर रहे हैं कि आपके आवेदन में किस विंडो पर ध्यान केंद्रित किया गया है या किसी एप्लिकेशन की किस विंडो पर ध्यान केंद्रित किया गया है?
पेडर राइस

यह प्रासंगिक stackoverflow.com/questions/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;
}

बेहतर शुद्धता के लिए @Doug McClean टिप्पणियों के साथ संपादित किया गया।


7
एक अच्छा नागरिक बनने के लिए मत भूलना। blogs.msdn.com/oldnewthing/archive/2007/07/27/4072156.aspx और blogs.msdn.com/oldnewthing/archive/2008/10/06/8969399.aspx में प्रासंगिक जानकारी है।
ग्रेग डी

3
एक नया नोट, इसे चलाने के लिए प्राप्त करने के लिए, using System.Runtime.InteropServices; और डीएल आयात और स्थिर बाहरी लाइनों को फिर से रखने के लिए कहाँ। इसे कक्षा के भीतर चिपकाना
Barlop

1
@smink विशिष्ट उपयोगकर्ता के लिए सक्रिय अग्रभूमि विंडो कैसे प्राप्त करें (मान लें कि प्रक्रिया सेवा के रूप में चलती है)।
tchelidze

आपके द्वारा लिंक की गई साइट उपलब्ध नहीं है। यहाँ (संभवतः) इसका वेब संग्रह है: web.archive.org/web/20150814043810/http://www.csharphelp.com/…
Piotrek

2
इसके अलावा, मैं चाहता हूं कि मेरे ऐप को हर बार अधिसूचित किया जाए, जब भी अग्रभूमि खिड़की बदलेगी। क्या उसके लिए कोई घटना है?
पियोट्रेक

18

यदि आप WPF के बारे में बात कर रहे थे तो उपयोग करें:

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

यदि पूरा एप्लिकेशन सक्रिय नहीं है (किसी अन्य प्रोग्राम में फ़ोकस है), तो किसी भी विंडो में IsActive को सही पर सेट नहीं किया जाएगा।
टॉड

वास्तव में यह गलत हो सकता है, मेरे मामले में मैं गैर-यूआई थ्रेड पर विंडो सरणी तक पहुंचने का प्रयास कर रहा था। हालाँकि, यह भी देखें कि मैं अभी भी सही हूँ: social.msdn.microsoft.com/Forums/vstudio/en-US/…
Todd

4

ऊपर लूप Application.Current.Windows[]और एक के साथ मिल IsActive == true


11
क्या यह केवल .Net अनुप्रयोग में विंडोज़ के लिए काम नहीं करेगा? मुझे लगता है कि d4nt डेस्कटॉप पर वर्तमान सक्रिय विंडो का शीर्षक प्राप्त करना चाहता है, चाहे वह किसी भी एप्लिकेशन का हो।
क्गैमेयर


2

GetForegroundWindow फ़ंक्शन के आधार पर | Microsoft डॉक्स :

[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;
}

यह UTF8 वर्णों का समर्थन करता है।


0

यदि ऐसा होता है कि आपको अपने MDI एप्लिकेशन से वर्तमान सक्रिय प्रपत्र की आवश्यकता है : (MDI- मल्टी दस्तावेज़ इंटरफ़ेस)।

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
ये गलत है। यह आपके प्रोग्राम के शीर्षक को वर्तमान सक्रिय विंडो का नहीं दिखाएगा।
हनुमान
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.