فرق تابع GetActiveWindow با GetForegroundWindow؟ - هفت خط کد انجمن پرسش و پاسخ برنامه نویسی

فرق تابع GetActiveWindow با GetForegroundWindow؟

+2 امتیاز

سلام من برنامه زیر رو نوشتم که مشخص میکنه در هر لحظه آیا پنجره نوت پد روی تمام پنجره ها قرار داره یا نه؟ ولی بر اساس کتاب : برنامه نویسی با API ویندوز صفحه 56 هر دو تابع در تعریف یکی هستن ولی برای این برنامه که من نوشتم فقط تابع  GetForegroundWindow جواب میده کسی دلیلشو میدونه؟ 

using System;using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
 
 
namespace WindowsFormsApplication1
{
    public partial class FormMain : Form
    {
        [DllImport("user32.dll", SetLastError = true)]
        public  static extern IntPtr FindWindow(string LpClassName, string LpWindowName);
        [DllImport("user32.dll")]
        public static extern IntPtr GetForegroundWindow();
 
        public FormMain()
        {
            InitializeComponent();
        }
private void timer1_Tick(object sender, EventArgs e)
        {
            IntPtr find = FindWindow("Notepad", null);
            IntPtr act = GetForegroundWindow();
            
            if(find  == act )
            {
                label1.Text = "نوت پد روی تمام پنجره ها است";
            }
            else
            {
                label1.Text ="نوت پد روی تمام پنجره ها نیست";
   
            }
        }
}
}

 

سوال شده اردیبهشت 2, 1393  بوسیله ی daniyaltjm (امتیاز 840)   47 88 103
تگ #C هم اضافه کنید.

2 پاسخ

+3 امتیاز
 
بهترین پاسخ
سلام!

این دو تابع فرق دارن... Foreground Window پنجره ای هست که روی بقیه ی پنجره هاست اما Active Window پنجره ایه که فعاله و اصلا ممکنه روی بقیه ی پنجره ها هم نباشه! شاید دیده باشی بعضی پنجره ها همیشه رو هستن (Topmost) و وقتی داری در پنجره ی زیری می نویسی اون پنجره ی زیری پنجره ی Active ـه با این که Foreground نیست... پنجره ی Active پنجره ایه که مثلا وقتی چیزی می نویسی اطلاعات مورد نظر به اون پنجره فرستاده می شه حتی اگه یه پنجره ی دیگه رو باشه... اما خیلی وقت ها پنجره ی Active و پنجره ی Foreground یکی هستن...

بنابراین برای برنامه ی شما استفاده از GetActiveWindow مناسب هست...
پاسخ داده شده شهریور 22, 1393 بوسیله ی مسعود لپه‌چی (امتیاز 928)   11 31 50
ویرایش شده مهر 2, 1393 بوسیله ی مسعود لپه‌چی
+1 امتیاز

GetActiveWindow

این تابع هندل پنجره فعال را برمیگرداند

GetForegroundWindow

هندل فرم پنجره را بر میگرداند

 

که با هم توی برنامه های چند فرمی فرق میکنند

پاسخ داده شده اردیبهشت 2, 1393 بوسیله ی Fire360Boy (امتیاز 2,524)   6 24 43
میشه بیشتر توضیح بدی؟ چرا اگه از GetActiveWindow استفاده کنم برنامه جواب نمیده؟
بلاخره فرقشون چی شد؟ من که نفهمیدم؟
...