الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مساعدة في الحصول على عنوان النافذة

بدأه خالد باشنتوف في 8 نوفمبر 2013 · 12 رد · 711 مشاهدة · في Microsoft Visual C#.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

 

ممكن كود يجلب أو يعطينا عنوان النافذة النشطة في الوندوز مثل ( Google - موزيلا فَيَرفُكس )

 

يعني عند النقر على Button يطبع عنوان النافدة النشطة في الوندوز في textbox

 

مثل برنامج AutoIt Window Info

 

مع اني استخدمة الكود 

 

GetWindowText

 

GetForegroundWindow()

 

المشكله أنه يعطينا عنوان برنامجي !

#2

السلام عليكم

 

الحمد لله وجدت في هذا المنتدى المميز برنامج مشابة للفكرة

 

أخذت الكود المطلوب منه  وأختصرته في برنامج

 

المثال يعرض لي جميع اسماء النوافذ التي تعمل حالياً

 

فأرجوا من من لديه خبره أن يعدل في هذا المثال ليجعلة يعرض لي ( اسم القائمة النشطة أوبمعنى آخر  المختار بالنقر عليها  أوبمعنى آخر الامامية )

 

في التكست بكس عند النفر على الزر

 

نتمنالكم التوفيق

مثال قابل للتعديل.rar

#3

لا افهم ممكن توضح اكثر

#4

هلا

 

تلاحظ العنوان الموجود أعلى المتصفح ( عنوان الفورم كما في الشي شارب ) مكتوب أسم المتصفح - اسم الموقع وغيره حيث ان هذا العنوان يتغير من صفحة الى صفحة يعني

 

 - Microsoft Visual C#.NET - منتديات الفريق العربي للبرمجة - موزيلا فَيَرفُكس

 

هذا عنوان الصفحة الحالية يتغير اسم المنتدى واسم الصفحة

 

اريد كود يرجع لي هذا العنوان ( عنوان الصفحة النشطة في الوندوز )

 

 

حمل البرنامج السابق سوف يوضح لك الفكره أكثر الكود موجود في البرنامج لكن يرجع لي عناوين جميع النوافذ المفتوحه والمطلوب عنوان واحد فقط حاول التعديل في الكود ليرجع عنوان النافذه النشطة ( الامامية ) على حسب خبرتك

 

هذه الميزه موجود في برنامج AutoIt Window Info  انظر إلى الصور اريد ان استخدم هذا العنوان في برنامجي لانه لايعمل الا بوجود العنوان الصحيح للنافذة النشطة حيث ان العنوان غير ثابت 

 

جزاك الله خير

TufhG.png

#5

:( ....  هل لا يمكن ذلك .. أجيبوا  .... :(

#6

السلام عليكم،،،

لم اقراء الكود المرفق

 

ولكن يمكن الحصول على عنوان النافذه النشطه من خلال من خلال دوال API باستخدام  

 

لمعرفه مقبض النافذه النشطه وتعود بنوع int

;()GetForegroundWindow

,وهذه الداله للحصول على عنوان النافذه النشطه اول الممرات هو مقبض النافذه يحصل عليه من سابقتها

GetWindowText(int hWnd, StringBuilder text, int count);

لا تنسى  الـــ

using System.Runtime.InteropServices;

نستدعى دوال API  بالكلاس (الفورم) كالتالي:

 [DllImport("user32.dll")]
        static extern int GetForegroundWindow();
[DllImport("user32.dll")]
 static extern int GetWindowText(int hWnd, StringBuilder text, int count);

الطريقه التاليه نحصل بها على عنوان النافذه النشطه ونضعها فى textbox

private void GetWindowTitle()
        {

            const int nChars = 256;
            int handle = 0;
            StringBuilder Buff = new StringBuilder(nChars);

            handle = GetForegroundWindow();

            if (GetWindowText(handle, Buff, nChars) > 0)
            {
                txtTitle.Text=  Buff.ToString());
               
            }

        }
3

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#7

وهذا الكود مجرب

using Systemusing System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

using System.Runtime.InteropServices;

namespace ConsoleApplication2
{
    class Program
    {
        [DllImport("user32.dll")]
        private static extern IntPtr GetForegroundWindow();

        [DllImport("user32.dll")]
        private static extern int GetWindowText(IntPtr hWnd, StringBuilder text, int count);

        public static void Main()
        {
            int chars = 256;
            StringBuilder buff = new StringBuilder(chars);
            while (true)
            {
                // Obtain the handle of the active window.
                IntPtr handle = GetForegroundWindow();

                // Update the controls.
                if (GetWindowText(handle, buff, chars) > 0)
                {
                    Console.WriteLine(buff.ToString());
                    Console.WriteLine(handle.ToString());
                }
                Thread.Sleep(1000);
            }
        }
    }
}

تم تعديل هذه المشاركة بواسطة zaraki_kenpache في 11 نوفمبر 2013 في 23:20

2
#8

السلام عليكم

 

الله يزيدكم علما

 

المثالين oK  بس لدي ملاحظ

 

الناتج يرجع لي اسم نافذة لبرنامجي Form1  وانا اريده  يرجع اسم البرنامج النشط في الوندوز مثل Mozilla Firefox لانني اريد ان استخدم هذا الاسم في الدالة

IntPtr theHandle = FindWindow(null, "مرحبا بكم في الفيس بوك - موزيلا فَيَرفُكس");

لكي يتم الطباعة في أي  نافذة نشطة ولايمكنني كتابة اسم النافذة بهذه الطريقة لتغيير اسم النافذة دائما عند دخول اي صفحة في أي موقع

 

أو هل هناك طريق أخر ؟

 

- ملاحظه أخرى

 

في رد الاخوه جزاهم الله خير أمر عجيب في الكود

IntPtr handle = GetForegroundWindow();

حيث إن handle من نوع IntPtr والدالة GetForegroundWindow() من نوع int  كيف تمت المساواه

 

آسفين على الإطاله وشكراً وأعذرونا لأنني واقف على هذه الخطوه منذو فتره

#9

تقضل يا اخي هذا هو     البرنامج   WindowsFormsApplication3.rar  بعد التعديل باستخدام delegate and invoke

وال thread لا يتوقف عند الانتهاء من البرنامج ولا اعرف السبب  

وايضا لا تخرج من البرنامج قبل ان تضخط على stop  لم ارد ان يطول الكود لذا لم اتعامل مع جميع الاخطاء

وشكرا

1
#10

السلام عليكم

 

الحمدلله هذا هو المطلوب أشكركم كل الشكر على تعاونكم معي

 

الآن أستطيع أن أكمل ما بدأت به

 

أكرر الشكر لكم

 

نتمنا لكم التوفيق  :thumb_up:

#11

يمكنك استخدام تايمر وجعل interval 100 وenable true

مرفق مثال

WindowsFormsApplication4.rar

2

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#12

المثال ب VS2012 لمن لديه نسخ اقدم نفس الكود السابق بعد اضافه التايمر وتعديل خصائصه فى الحدث نضيف هذا الكود

  private void timer1_Tick(object sender, EventArgs e)
        {
            GetWindowTitle();
        }

فى الحدث Load  للفورم

    private void Form1_Load(object sender, EventArgs e)
        {
            this.TopMost = true;
            timer1.Interval = 100;
            timer1.Enabled = true;
        }

VB.NET and C# Comparison

http://www.harding.edu/fmccown/vbnet_csharp_comparison.html

002.gif

=-=-=-=-=-=-=
ذو العلم يشقى فى النعيم بعلمه .:. واخو الجهالة فى الشقاوة ينعم
=-=-=-=-=-=-=
يا من بدنياه اشتغل . قد غره طول الأمل . فالموت يأتى بغتة . والقبر صندوق العمل
=-=-=-=-=-=-=
ان لم تستطع ان تجد ما تفعله فافعل ما لم تسطع ان تجده

screen_shot_2011-05-19_at_12.44.49_pm.pn

#13

شكرا لك على تسهيل الكود

:thumbup:  

مواضيع مشابهة