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

كود إغلاق البرنامج لا يعمل

مغلق
بدأه moaita في 14 سبتمبر 2006 · 3 رد · 534 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم

انا عندى برنامج بيفتح أكثر من شاشة interent explorer ولكى لا يتضاعف عدد الشاشات التى نفتحها نود ان نغلق بعض هذه الشاشات طبعا انا عارف ال address لكل شاشة ...انا استخدمت هذا الكود على سبيل التجربة لكى يغلق مثلا ال notepad ولكن الكود لا يعمل...نرجو المساعدة

انا وضعت هذا الكود فى module

Declare Function FindWindow Lib "user32" Alias _
		   "FindWindowA" (ByVal lpClassName As String, _
			ByVal lpWindowName As String) As Long
	Declare Function PostMessage Lib "user32" Alias _
	   "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, _
	  ByVal wParam As Long, ByVal lParam As any) As Long
	Public Const WM_CLOSE = &H10

هذا الكود بيعطى خطأ "AS Any is not supported in declare statements" كيف نعالجه

بعد ذلك بأكتب الكود التالى

  Dim winHwnd As Long
		Dim RetVal As Long


		winHwnd = FindWindow(vbNullString, "Notepad")


		If winHwnd <> 0 Then
			RetVal = PostMessage(winHwnd, WM_CLOSE, 0&, 0&)
			If RetVal = 0 Then
				MsgBox("خطأ في عملية ارسال الرسالة")
			End If
		Else
			MsgBox("الدفتر مفتوح")
		End If

هذا الكود المفروض انه يغلق برنامج الدفتر ولكنه لا يفعل شئ

وما هو العمل اذا اردنا ان نغلق صفحة انترنت بها رابط ..وهذا الرابط معروف

نرجو المساعدة وشكرا

تم تعديل هذه المشاركة بواسطة moaita في 14 سبتمبر 2006 في 18:17

برمجة - قواعد بيانات
http://www.pmpsoft.com

#2

السبب هو أن حضرتك استخدمت As any وفي الدوت نيت As any لا يمكن استخدامها بل يجب أن تستخدم النوع المناسب للبيانات بدلا عنها إن كان نص استخدم string أو عدد صحيح Integer مثلا

يبدو أنك استخدمت التعريفات كما هي في VB6 دون تصحيح استخدم معالج ترقية الكود الموجود في القائمة Tools لترقية الكود من VB6 إلى دوت نيت فمثلا النوع Long في Vb6 يقابله Integer في الدوت نيت ثم قم باستبدال الكلمة Any بـنوع البيانات المناسب

تم تعديل هذه المشاركة بواسطة samerselo في 14 سبتمبر 2006 في 23:16

عن عائشة رضي الله عنها أن النبي صلى الله عليه وسلم قال: إن الله يحب إذا عمل أحدكم عملا أن يتقنه

نعيب زماننا والعيب فينا ... وما لزماننا عيب سوانا

ونهجو ذا الزمان بغير ذنب ... ولو نطق الزمان لنا هجانا

محمد سامر أبو سلو

#3

السلم عليكم

اذا كنت ستستخدم نوع بيانات محدد طوال البرنامج تستطيع استبدال النوع any بالنوع المستخدم long or string or int or what ever كما قال الأخ samerselo

اما اذا كنت ستمرر انواع مختلفة من البيانات استخدم <MarshalAsAttribute(UnmanagedType.AsAny)>

او اعمل دالة لكل نوع مثل التالي

Declare Function FindWindowInt32 Lib "user32" Alias _
"FindWindowA" (......,ByVal lParam As Int32)as Int32
Declare Function FindWindowString Lib "user32" Alias _
"FindWindowA" (......,ByVal lParam As String)as Int32
..
...
....

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

Declare Function FindWindow Lib "user32" Alias _
	   "FindWindowA" (ByVal lpClassName As String, _
		ByVal lpWindowName As String) As Int32
Declare Function PostMessage Lib "user32" Alias _
   "PostMessageA" (ByVal hwnd As Int32, ByVal wMsg As Int32, ByVal wParam As Int32, _
   <MarshalAsAttribute(UnmanagedType.AsAny)> ByVal lParam As Object) As Int32

او كالتالي

Imports System.Runtime.InteropServices
Module Module1
	Public Const WM_CLOSE = &H10
	<DllImport("User32")> _
		Public Function PostMessageA(ByVal hwnd As Int32, ByVal wMsg As Int32, ByVal wParam As Int32, _
				<MarshalAsAttribute(UnmanagedType.AsAny)> ByVal lParam As Object) As Int32
	End Function

	<DllImport("User32")> _
	Public Function FindWindowA(ByVal lpClassName As String, _
			ByVal lpWindowName As String) As Int32
	End Function
End Module

اما بالنسبه للجملة التالية

اقتباس
winHwnd = FindWindow(vbNullString, "Notepad")

فيجب ان تكون كالتالي

winHwnd = FindWindow( "Notepad",vbNullString)

تم تعديل هذه المشاركة بواسطة Mo7eb_Alrasool في 15 سبتمبر 2006 في 06:08

سبحانك اللهم وبحمدك أشهد ان لا اله الا أنت

أستغفرك وأتوب اليك

الهم صلي وسلم وبارك على سيدنا وحبيبنا محمد

#4

شكراً للأخوة الأعزاء

برمجة - قواعد بيانات
http://www.pmpsoft.com

هذا الموضوع مغلق.

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