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

تحويل كود من Vb6 ألى Vb.net

بدأه الغانمي في 7 يناير 2008 · 4 رد · 2,871 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

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

تحية طيبة إلى جميع أعضاء أجمل منتدى .

لدي كود مبني بالفيجوال بيسك 6 وهو يقوم بإحضار عناصر اي ListView ألى ListBox .

وفي الحقيقة قبل أن أفكر أني أطلب المساعدة منكم أخوتي حاولت كثيراً في تعديل الكود ولكن لم تفلح المحاولات.

Private Const PROCESS_QUERY_INFORMATION = 1024
Private Const PROCESS_VM_OPERATION = &H8
Private Const PROCESS_VM_READ = &H10
Private Const PROCESS_VM_WRITE = &H20
Private Const STANDARD_RIGHTS_REQUIRED = &HF0000
Private Const MAX_LVMSTRING As Long = 255
Private Const MEM_COMMIT = &H1000
Private Const PAGE_READWRITE = &H4
Private Const LVIF_TEXT As Long = &H1
Private Const MEM_RELEASE = &H8000
Private Const LVM_FIRST = &H1000&
Private Const LVM_GETITEMCOUNT = LVM_FIRST + 4
Private Const LVM_GETITEMTEXT As Long = (LVM_FIRST + 45)
Private Type LV_ITEMA
   mask		 As Long
   iItem		As Long
   iSubItem	 As Long
   state		As Long
   stateMask	As Long
   pszText	  As Long
   cchTextMax   As Long
   iImage	   As Long
   lParam	   As Long
   iIndent	  As Long
End Type
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcId As Long) As Long
Private Declare Function VirtualAllocEx Lib "kernel32" (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal flAllocationType As Long, ByVal flProtect As Long) As Long
Private Declare Function VirtualFreeEx Lib "kernel32" (ByVal hProcess As Long, ByVal lpAddress As Long, ByVal dwSize As Long, ByVal dwFreeType As Long) As Long
Private Declare Function WriteProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByRef lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function ReadProcessMemory Lib "kernel32" (ByVal hProcess As Long, ByVal lpBaseAddress As Any, ByRef lpBuffer As Any, ByVal nSize As Long, lpNumberOfBytesWritten As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByRef lParam As Any) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Dim mywindowclass As Long, wtlsplitterwindow As Long, atldd As Long
Dim syslistview As Long
Public Function GetListviewItem(ByVal lstviewhwnd As Long) As String
	Dim result			  As Long
	Dim myItem			  As LV_ITEMA
	Dim pHandle			 As Long
	Dim pStrBufferMemory	As Long
	Dim pMyItemMemory	   As Long
	Dim strBuffer()		 As Byte
	Dim index			   As Long
	Dim tmpString, tmp2		  As String
	Dim strLength		   As Long
	Dim ProcessID As Long
	Dim ItemCount, i As Long

	'init the string buffer
	ReDim strBuffer(MAX_LVMSTRING)

	'open a handle to the process and allocate the string buffer
	Call GetWindowThreadProcessId(lstviewhwnd, ProcessID)
	pHandle = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, False, ProcessID)
	pStrBufferMemory = VirtualAllocEx(pHandle, 0, MAX_LVMSTRING, MEM_COMMIT, PAGE_READWRITE)

	'initialize the local LV_ITEM structure
	'The myItem.iSubItem member is set to the index of the column that is being retrieved
	myItem.mask = LVIF_TEXT
	myItem.iSubItem = 2  'for paltalk only if other else change to 0 because 0 and 1 (hand,mic icon) 2 for nick list
	myItem.pszText = pStrBufferMemory
	myItem.cchTextMax = MAX_LVMSTRING

	'write the structure into the remote process's memory space
	pMyItemMemory = VirtualAllocEx(pHandle, 0, Len(myItem), MEM_COMMIT, PAGE_READWRITE)
	ItemCount = SendMessage(lstviewhwnd, LVM_GETITEMCOUNT, 0&, 0&)

	For i = 0 To ItemCount - 1
		result = WriteProcessMemory(pHandle, pMyItemMemory, myItem, Len(myItem), 0)

		'send the get the item message and write back the memory space
		result = SendMessage(lstviewhwnd, LVM_GETITEMTEXT, i, ByVal pMyItemMemory)
		result = ReadProcessMemory(pHandle, pStrBufferMemory, strBuffer(0), MAX_LVMSTRING, 0)
		result = ReadProcessMemory(pHandle, pMyItemMemory, myItem, Len(myItem), 0)

		'turn the byte array into a string and send it back
		For index = LBound(strBuffer) To UBound(strBuffer)
			If Chr(strBuffer(index)) = vbNullChar Then Exit For
			tmpString = tmpString & Chr(strBuffer(index))
			tmp2 = tmp2 & Chr(strBuffer(index))
		Next index

		MsgBox tmp2
	tmp2 = ""
		tmpString = Trim(tmpString) & vbCr

	Next
   '
	'deallocate the memory and close the process handle
	result = VirtualFreeEx(pHandle, pStrBufferMemory, 0, MEM_RELEASE)
	result = VirtualFreeEx(pHandle, pMyItemMemory, 0, MEM_RELEASE)

	result = CloseHandle(pHandle)

	If Len(tmpString) > 0 Then GetListviewItem = tmpString
End Function

Private Sub Command1_Click()
mywindowclass = FindWindow("my window class", vbNullString)
wtlsplitterwindow = FindWindowEx(mywindowclass, 0&, "wtl_splitterwindow", vbNullString)
wtlsplitterwindow = FindWindowEx(wtlsplitterwindow, 0&, "wtl_splitterwindow", vbNullString)
wtlsplitterwindow = FindWindowEx(wtlsplitterwindow, 0&, "wtl_splitterwindow", vbNullString)
atldd = FindWindowEx(wtlsplitterwindow, 0&, "ATL:0053C8D0", vbNullString)
syslistview = FindWindowEx(atldd, 0&, "syslistview32", vbNullString)

Call GetListviewItem(syslistview)
End Sub

getexternalListviewItem.rar

#2

اخي الحبيب طريقة تحويل الكود بسيطة جدا فقط افتح على نافذة الكود في فيجوال بيسك نت ومن ثم اختر tools ثم upgrade visual code ومن ثم ادخل الكود وسوف يقوم المعالج بتحويله إلى كود فيجوال بيسك نت

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

لوكنت وغلاً في الرجال لضرني**** حسن جرائتي ومقتدي

منتديات طريق الهداية

#3

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

أنا اول مرة أشوف هذي الآداة معلومة جديدة . ولكن هناك مشكلة .

عندما حاولت احول الكود طلع لي استثناء

Cannot start upgrade engine.‏‏تعذر الربط بالمصدر (Exception from HRESULT: 0x8004000A (OLE_E_CANT_BINDTOSOURCE))

و

Error while canceling: ‏‏قام الخادم بتحديد استثناء. (Exception from HRESULT: 0x80010105 (RPC_E_SERVERFAULT))

فياليت تعطي شرح لطريقة استخدامها بارك الله فيك

#4

من اجل الخطأ حاول الحلول الموجودة في موضوعي هل تعاني من مشكلة في معالج تحديث الكود من VB6 إلى VB2005

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

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

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

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

#5

أرجـــــــــــــــــــــــــــــــــــــوكم ســـــــــــــــــــــــــــــــاعدوني

أنا جربت upgrade visual code ولكن ما زال في الكود مشاكل كثيرة

هذا بريدي للذي ريد ساعدني في تحويل الكود من VB6 الى VB.net بارك الله فيكم abuna3eem@hotmail.com

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