سؤال

لقد رأيت طريقة تسمى Control.Fromhandle Wich (يجب) تمنحك الوصول إليها. الآن ، أردت أن أجربه باستخدام هذا الرمز

    [DllImport("user32.dll", SetLastError = true)]
    static extern IntPtr FindWindow(string lpClassName, string lpWindowName);

    // Find window by Caption only. Note you must pass IntPtr.Zero as the first parameter.

    [DllImport("user32.dll", EntryPoint = "FindWindow", SetLastError = true)]
    static extern IntPtr FindWindowByCaption(IntPtr ZeroOnly, string lpWindowName);

    [DllImport("user32.dll")]
    private static extern IntPtr GetDC(IntPtr hwnd);
    [DllImport("user32.dll")]
    private static extern bool ReleaseDC(IntPtr hwnd, IntPtr hdc);

    public Form1()
    {
        InitializeComponent();
    }

    private void Form1_Load(object sender, EventArgs e)
    {
        IntPtr ptr = FindWindowByCaption(IntPtr.Zero, "Download");
        Control f = Control.FromHandle(ptr);
        f.Text = "Something";
    }

لكن من الواضح أنه لن يعمل. لقد راجعت شخصيًا أن المقبض صحيح ... لكن الطريقة تُرجع عنصر تحكم فارغ. أي شرح؟

هل كانت مفيدة؟

المحلول

هذه الطريقة تعمل فقط إذا كان المقبض الذي تمر فيه في الواقع هو Control في طلبك.

نصائح أخرى

في حالتك الخاصة ، نظرًا لأنك تريد فقط تعيين النص ، اتصل setWindowText من user32.dll

لأي شخص آخر googling وجد هذه الإجابة وتساءل لماذا هذا السلوك هو الحال http://www.codeguru.com/forum/showthread.php؟t=443191 تنوير بشكل خاص ، وتحديدا آخر مشاركة من "Madhatter":

حسنًا فقط من النظر إلى ما يدور في السيطرة. غير مدرج في طاولاتها. قد يكون هناك بعض الاختراق الذي قد يسمح لك بتسجيل النافذة من خلال جميع الأنظمة الفرعية التي يتم استخدامها عند إنشاء Windows من داخل تطبيق .NET ، ولكن من المحتمل أن يكون أفضل / أكثر اتساقًا في لف أي وظيفة تحتاجها مباشرة من خلال واجهة برمجة تطبيقات Windows ثم حاول اختراق Control.fromhandle للسماح لك بالوصول / معالجة نافذة عملية أخرى.

قراءة المزيد في سؤالك يبدو أنك تحاول القيام ببعض الأتمتة أو على الأقل معالجة النافذة بطريقة ما. قد أوصي بالنظر إلى إدارة Windows API مشروع على SourceForge. إنه مكتوب بشكل جيد وقد استخدمناه للأغراض التي تصفها.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top