PDA

View Full Version : به دست آوردن پنجره ی فعال ویندوز



sirvan-me
جمعه 13 مرداد 1391, 11:32 صبح
سلام به همه ی دوستان . می خواستم بدونم چطور و با چه توابع API می تونم عنوان پنجره ی فعال ویندوز رو به دست بیارم ... یعنی به محض اینکه به طور مثال برنامه ی Notepad اجرا شد عنوان پنجره ی این برنامه نمایش داده بشه ...

مهرداد صفا
جمعه 13 مرداد 1391, 13:03 عصر
سلام
از توابع GetActiveWindow و GetWindowText در user32 استفاده کنید. تابع اول handle مربوط به پنجره فعال را بر میگرداند و تابع دوم با گرفتن handle و یک رشته و یک عدد به عنوان طول رشته عنوان پنجره را در رشته ارسالی بر میگرداند. به این صورت:

//in the name of god
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
namespace WindowsFormsApplication2
{
class User32
{
[System.Runtime.InteropServices.DllImport("user32.DLL", EntryPoint = "GetActiveWindow", SetLastError = true, CharSet = CharSet.Unicode, ThrowOnUnmappableChar = true)]
public static extern Int32 GetActiveWindow();
[System.Runtime.InteropServices.DllImport("user32.DLL", EntryPoint = "GetWindowText", SetLastError = true, CharSet = CharSet.Unicode, ThrowOnUnmappableChar = true)]
public static extern Int32 GetWindowText(Int32 hwnd, string lpString, Int32 cch);

public static String GetActiveWindowText()
{
string ActiveWindowText = "";
GetWindowText(GetActiveWindow(), ActiveWindowText, 200);
return ActiveWindowText;
}
}
}

موفق باشید.

sirvan-me
جمعه 13 مرداد 1391, 15:16 عصر
دوست من این کدی که شما قرار دادین فقط زمانی که پنجره ی برنامه ی خودمون فعال باشه عنوان پنجرهی فرممون رو نشون میده ... تو بقیه موارد و برنامه های دیگه ( یعنی زمانی که کنترل از برناممون گرفته میشه ) رشته ی خالی برمی گردونه ... میشه راهنمایی کنید !!!!!!

sirvan-me
جمعه 13 مرداد 1391, 15:21 عصر
ممنون از راهنماییت در رابطه با کد اول خودم به جواب رسیدم .... این طور بنویسیم درست میشه ...

[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;
IntPtr handle = IntPtr.Zero;
StringBuilder Buff = new StringBuilder(nChars);
handle = GetForegroundWindow();

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