模块文件依然参照 http://expert.csdn.net/Expert/topic/2728/2728920.xml?temp=.9317743 里的,然后把里面的窗体代码部分改为下面这样就行了Option ExplicitPrivate Sub Command1_Click() Dim mhwnd As Long mhwnd = 1705642 '这是我的句柄 ^_^ Dim i As Long, s As String Dim dwProcessId As Long, hProcess As Long Dim dwBytesRead As Long, dwBytesWrite As Long Dim bSuccess As Long Call GetWindowThreadProcessId(mhwnd, dwProcessId) Dim lpListItemRemote As Long, lpTextRemote As Long Dim nMaxLen As Long nMaxLen = 1023 Dim szBuf() As Byte ReDim szBuf(nMaxLen) Dim lvItemLocal As LV_ITEM Dim bWriteOK As Long
Dim lItemCount As Long, lItemIndex As Long, lSubItemIndex As Long Dim asItemText() As String lItemCount = ListView_GetItemCount(mhwnd) If lItemCount > 0 Then ReDim asItemText(lItemCount - 1) End If lSubItemIndex = 1 '取得第几栏的文本 For lItemIndex = 0 To lItemCount - 1 lvItemLocal.iItem = lItemIndex lvItemLocal.iSubItem = lSubItemIndex - 1 lvItemLocal.mask = LVIF_TEXT lvItemLocal.cchTextMax = nMaxLen lvItemLocal.pszText = lpTextRemote dwBytesWrite = 0 bWriteOK = WriteProcessMemory(ByVal hProcess, ByVal lpListItemRemote, ByVal VarPtr(lvItemLocal), Len(lvItemLocal), dwBytesWrite) i = SendMessage(mhwnd, LVM_GETITEMTEXT, lItemIndex, ByVal lpListItemRemote) bSuccess = ReadProcessMemory(ByVal hProcess, ByVal lpTextRemote, szBuf(0), nMaxLen + 1, dwBytesRead)
asItemText(lItemIndex) = StrConv(LeftB(szBuf, InStrB(szBuf, ChrB(0)) - 1), vbUnicode) Next
Call VirtualFreeEx(hProcess, ByVal lpListItemRemote, 0, MEM_DECOMMIT) Call VirtualFreeEx(hProcess, ByVal lpListItemRemote, 0, MEM_DECOMMIT) SaveToFile asItemText() End If CloseHandle hProcess
End Sub Sub SaveToFile(asItemText() As String) Dim lFreeFile As Long, i As Long lFreeFile = FreeFile
Open "c:\ip.txt" For Output As #lFreeFile For i = 0 To UBound(asItemText) Print #lFreeFile, asItemText(i) Next Close #lFreeFile End Sub Function ListView_GetItemCount(ByVal hWnd As Long) As Long ListView_GetItemCount = SendMessage(hWnd, LVM_GETITEMCOUNT, 0, ByVal 0&) End Function
to supergreenbean(超级绿豆) : 你的代码和我的代码主要区别在什么地方?现在我没有时间细看了,或者说说我的代码哪里有问题也可
for i = 1 to ListView1.ListItems.count
? ListView1.ListItems(i).text
next i
保存就用open语句
http://expert.csdn.net/Expert/topic/2728/2728920.xml?temp=.9317743
我贴了一段有问题的代码,你可以看看,顺便也帮我找找哪里错了
把listview里面的值读出,然后保存到txt文件里面 strPath = GetPath(gMDBPath) & gOutFileName
gFileNum = FreeFile
Open strPath For Output As #gFileNum
For i = 0 To UBound(DataString) - 1
Print #gFileNum, DataString(i)
Next
各位:
举例来说:我从数据库中读取了10人的姓名和地址,现在我希望根据他们的姓名、地址能够在Word中自动生成信封。前提我已经有了一个信封模板,就是将客户的姓名和地址替换在模板中的相应位置。并且每个信封为一页(如果有是个客户要求生成的文档有十页)。比如格式如下:
---------------------------------------------------------------------
xx省1xx市1xx
姓名1
---------------------------------------------------------------------
xx省2xx市2xx
姓名2
--------------------------------------------------------------------- xx省3xx市3xx
姓名3
---------------------------------------------------------------------
..........
为何晕?
不是你的要求?
您没有看到我在3楼写的什么吗??再次声明:gigilee,我要取得是第三方程序中Listview得值。不是我自己程序中的。晕死。
////////////////////
不是沒有回復你,是因為實在沒有時間去研究word。
http://expert.csdn.net/Expert/topic/2728/2728920.xml?temp=.9317743
里的,然后把里面的窗体代码部分改为下面这样就行了Option ExplicitPrivate Sub Command1_Click()
Dim mhwnd As Long
mhwnd = 1705642 '这是我的句柄 ^_^
Dim i As Long, s As String
Dim dwProcessId As Long, hProcess As Long
Dim dwBytesRead As Long, dwBytesWrite As Long
Dim bSuccess As Long
Call GetWindowThreadProcessId(mhwnd, dwProcessId)
Dim lpListItemRemote As Long, lpTextRemote As Long
Dim nMaxLen As Long
nMaxLen = 1023
Dim szBuf() As Byte
ReDim szBuf(nMaxLen)
Dim lvItemLocal As LV_ITEM
Dim bWriteOK As Long
hProcess = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, 0&, dwProcessId)
If hProcess <> 0 Then
lpTextRemote = VirtualAllocEx(ByVal hProcess, ByVal 0&, nMaxLen + 1, MEM_COMMIT, PAGE_READWRITE)
lpListItemRemote = VirtualAllocEx(ByVal hProcess, ByVal 0&, Len(lvItemLocal), MEM_COMMIT, PAGE_READWRITE)
bWriteOK = WriteProcessMemory(ByVal hProcess, ByVal lpTextRemote, szBuf(0), nMaxLen + 1, dwBytesWrite)
Dim lItemCount As Long, lItemIndex As Long, lSubItemIndex As Long
Dim asItemText() As String
lItemCount = ListView_GetItemCount(mhwnd)
If lItemCount > 0 Then
ReDim asItemText(lItemCount - 1)
End If
lSubItemIndex = 1 '取得第几栏的文本
For lItemIndex = 0 To lItemCount - 1
lvItemLocal.iItem = lItemIndex
lvItemLocal.iSubItem = lSubItemIndex - 1
lvItemLocal.mask = LVIF_TEXT
lvItemLocal.cchTextMax = nMaxLen
lvItemLocal.pszText = lpTextRemote
dwBytesWrite = 0
bWriteOK = WriteProcessMemory(ByVal hProcess, ByVal lpListItemRemote, ByVal VarPtr(lvItemLocal), Len(lvItemLocal), dwBytesWrite)
i = SendMessage(mhwnd, LVM_GETITEMTEXT, lItemIndex, ByVal lpListItemRemote)
bSuccess = ReadProcessMemory(ByVal hProcess, ByVal lpTextRemote, szBuf(0), nMaxLen + 1, dwBytesRead)
asItemText(lItemIndex) = StrConv(LeftB(szBuf, InStrB(szBuf, ChrB(0)) - 1), vbUnicode)
Next
Call VirtualFreeEx(hProcess, ByVal lpListItemRemote, 0, MEM_DECOMMIT)
Call VirtualFreeEx(hProcess, ByVal lpListItemRemote, 0, MEM_DECOMMIT)
SaveToFile asItemText()
End If
CloseHandle hProcess
End Sub
Sub SaveToFile(asItemText() As String)
Dim lFreeFile As Long, i As Long
lFreeFile = FreeFile
Open "c:\ip.txt" For Output As #lFreeFile
For i = 0 To UBound(asItemText)
Print #lFreeFile, asItemText(i)
Next
Close #lFreeFile
End Sub
Function ListView_GetItemCount(ByVal hWnd As Long) As Long
ListView_GetItemCount = SendMessage(hWnd, LVM_GETITEMCOUNT, 0, ByVal 0&)
End Function
你的代码和我的代码主要区别在什么地方?现在我没有时间细看了,或者说说我的代码哪里有问题也可
Call VirtualFreeEx(hProcess, ByVal lpListItemRemote, 0, MEM_DECOMMIT)
改成
Call VirtualFreeEx(hProcess, ByVal lpTextRemote, 0, MEM_DECOMMIT)