ฉันต้องการทราบวิธีคว้าชื่อหน้าต่างของหน้าต่างที่ใช้งานอยู่ปัจจุบัน (เช่นหน้าต่างที่มีโฟกัส) โดยใช้ C #
ฉันต้องการทราบวิธีคว้าชื่อหน้าต่างของหน้าต่างที่ใช้งานอยู่ปัจจุบัน (เช่นหน้าต่างที่มีโฟกัส) โดยใช้ C #
คำตอบ:
ดูตัวอย่างวิธีดำเนินการกับซอร์สโค้ดแบบเต็มได้ที่นี่:
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 เพื่อความถูกต้องที่ดีขึ้น
using System.Runtime.InteropServices;
และตำแหน่งที่จะใส่ dll import และ static extern lines วางไว้ในชั้นเรียน
หากคุณกำลังพูดถึง WPF ให้ใช้:
Application.Current.Windows.OfType<Window>().SingleOrDefault(w => w.IsActive);
ห่วงมากกว่าและหาหนึ่งที่มีApplication.Current.Windows[]
IsActive == true
ใช้ Windows API โทรGetForegroundWindow()
.
GetForegroundWindow()
จะให้ที่จับ (ชื่อhWnd
) แก่คุณไปยังหน้าต่างที่ใช้งานอยู่
เอกสารประกอบ: ฟังก์ชัน GetForegroundWindow | Microsoft Docs
ขึ้นอยู่กับฟังก์ชัน GetForegroundWindow | Microsoft Docs :
[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
หากเกิดกรณีที่คุณต้องการCurrent Active Form จากแอปพลิเคชัน MDI ของคุณ : (MDI- Multi Document Interface)
Form activForm;
activForm = Form.ActiveForm.ActiveMdiChild;
คุณสามารถใช้คลาสกระบวนการได้ง่ายมาก ใช้เนมสเปซนี้
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.
}