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

فتح ملف و استخراج النص الموجود في شريط عنوان نافذته

بدأه moon3000 في 12 نوفمبر 2008 · 6 رد · 720 مشاهدة · في لغة Ms Visual Basic 6 وما قبلها من إصدارات
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بســم الله الـرحمــن الرحيــم

السلام عليكــم ورحمـة الله وبركاتــه

الاساتذة المبرمجين الفضلاء...

هل توجد طريقة لفتح ملف(مستند نص مثلا) و استجراج الاسم الموجود في شريط عنوان نافذة ذلك الملف...مثلا لدي ملف اسمه Document1 و عندما افتحه يكون النص الموجود في شريط عنوان نافذته Microsoft Word-Document1 فهل توجد طريقة لاستخراج العبارة الموجودة في شريط عنوان نافذته!!

مع العلم اني بحثت في المنتدى فلم تقع عيني الا على مثال لفتح برنامج الحاسبة و استخراج النص الموجود في شريط عنةان نافذته باستخدام الدالة الشهيرةShell

اتمنى ان اجد لدى حضرتدم الاجابة الشافية ...ودمتم في رعاية الله و حفظه...

#3

يمكنك استعمال دالة الAPI التي تقوم بالبحث وهي

FindWindow

بتمرير اسم الكلاس الموجود فيه الDocument1 فهنا الامر يختلف قليلا عن الNotepad لان البحث كان يستعمل اسم التطبيق

أظن أن اسم الكلاس للوورد هو OpusApp

FindWindow("OpusApp", vbNullString)
#4

غير عملي لسببين:

1. افرض عدم معرفته بالتطبيق المستخدم لفتح الملف.

2. افرض وجود أكثر من نافذة مفتوحة للـ Word

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#5

:wacko:

ربما نتخلى عن فكرة جلب المقبض باستعمال FindWindow في هذه الحالة فقط

ونقوم باستخدام الPID المنشئ من Shell ونجلب المقبض للتطبيق المفتوح باستعمال OpenProcess

بعدها يكون لدينا المقبض بعد فتح الملف في البرنامج المكتوب في سطر الاوامر المضمن في Shell

ومن هنا يمكننا الوصول لاستخراج عنوان النافذة باستخدام الدالة GetWindowText

الكلام نظري لكن فيه بعض المنطق :)

#6

عظيم، ما رأيك بمثال سريع؟ ;)

Do as I say, not as I do

We are Anonymous. We are Legion. We don't forgive. We don't forget

#7

في الحقيقة هناك فرق كبير بين الكلام النظري والتطبيق :)

الدالة OpenProcess لم ترجع لي المقبض الصحيح للبرنامج الذي تم تشغيله

لذلك وجب علينا الالتفاف للوصول إلى المقبض الصحيح

دائما باستعمال الPID المنشئ من الدالة Shell نقوم بمقارنة هذا الPID بالنوافذ المفتوحة والتي تكون ليست نوافذ فرعية

وقد وجدت مثال عن دالة تقوم بالعمل هذا بقليل من التعديل

Function InstanceToWnd(ByVal lPid As Long) As String
 Dim aHwnd As Long
 Dim Tpid As Long
 Dim thread_id As Long
 Dim MyStr As String
 aHwnd = FindWindow(vbNullString, vbNullString)
 Do While aHwnd <> 0
 ' جلب الPID للنافذة
   thread_id = GetWindowThreadProcessId(aHwnd, Tpid)
 'التأكد من أنها ليست نافذة فرعية
   If GetParent(aHwnd) = 0 Then
 'المقارنة بين الرقمين
	If Tpid = lPid Then
	InstanceToWnd = aHwnd
	 Exit Do
	 End If
   End If
 'جلب المقبض للنافذة التالية
	aHwnd = GetWindow(aHwnd, GW_HWNDNEXT)
 Loop
 End Function

طبعا عملية استرجاع المقبض هنا مهمة لانها ستستعمل لاستخراج عنوان النافذة

Pid = Shell(cmd, vbNormalFocus)
 aHandle = InstanceToWnd(Pid)

يمكن المقارنة بين المقبض المرجع بهذه الطريقة والمرجع باستعمال الطريقة التي ذكرتها أولا

aHandle = FindWindow("OpusApp", vbNullString)

المثال مرفق

66.zip

تم تعديل هذه المشاركة بواسطة DreamNet في 15 نوفمبر 2008 في 08:51

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…