问题描述
有会Delphi6的吗?能不能帮忙翻译一下成VB.NET,谢谢了或在vb.net中怎么获取别的窗体的子窗口(是SysListView32类的)的内容,现在已经知道了子窗口的句柄,就是获取不了内容(*//标题:获取其他进程中ListView的文本说明:Window2000+Delphi6调试通过设计:Zswang//*)usesCommCtrl;functionListViewColumnCount(mHandle:THandle):Integer;beginResult:=Header_GetItemCount(ListView_GetHeader(mHandle));end;{ListViewColumnCount}functionGetListViewText(mHandle:THandle;mStrings:TStrings):Boolean;varvColumnCount:Integer;vItemCount:Integer;I,J:Integer;vBuffer:array[0..255]ofChar;vProcessId:DWORD;vProcess:THandle;vPointer:Pointer;vNumberOfBytesRead:Cardinal;S:string;vItem:TLVItem;beginResult:=False;ifnotAssigned(mStrings)thenExit;vColumnCount:=ListViewColumnCount(mHandle);ifvColumnCount<=0thenExit;vItemCount:=ListView_GetItemCount(mHandle);GetWindowThreadProcessId(mHandle,@vProcessId);vProcess:=OpenProcess(PROCESS_VM_OPERATIONorPROCESS_VM_READorPROCESS_VM_WRITE,False,vProcessId);vPointer:=VirtualAllocEx(vProcess,nil,4096,MEM_RESERVEorMEM_COMMIT,PAGE_READWRITE);mStrings.BeginUpdate;trymStrings.Clear;forI:=0tovItemCount-1dobeginS:='';forJ:=0tovColumnCount-1dobeginwithvItemdobeginmask:=LVIF_TEXT;iItem:=I;iSubItem:=J;cchTextMax:=SizeOf(vBuffer);pszText:=Pointer(Cardinal(vPointer)+SizeOf(TLVItem));end;WriteProcessMemory(vProcess,vPointer,@vItem,SizeOf(TLVItem),vNumberOfBytesRead);SendMessage(mHandle,LVM_GETITEM,I,lparam(vPointer));ReadProcessMemory(vProcess,Pointer(Cardinal(vPointer)+SizeOf(TLVItem)),@vBuffer[0],SizeOf(vBuffer),vNumberOfBytesRead);S:=S+#9+vBuffer;end;Delete(S,1,1);mStrings.Add(S);end;finallyVirtualFreeEx(vProcess,vPointer,0,MEM_RELEASE);CloseHandle(vProcess);mStrings.EndUpdate;end;Result:=True;end;{GetListViewText}//ExampleprocedureTForm1.FormCreate(Sender:TObject);beginRegisterHotKey(Handle,1,MOD_WIN,VK_F2);end;procedureTForm1.FormDestroy(Sender:TObject);beginUnRegisterHotKey(Handle,1);end;procedureTForm1.WMHOTKEY(varMsg:TWMHOTKEY);begincaseMsg.HotKeyof1:GetListViewText(WindowFromPoint(Point(Mouse.CursorPos.X,Mouse.CursorPos.Y)),MemoText.Lines);end;end;
解决方案
解决方案二:
谢谢了
解决方案三:
会Delphi,不会vb,帮顶