vb exe和vc exe如何交换大块数据 我在vb里面用字节数组(redim方法)比方说有10M大小,怎么交给vc exe处理并且vc处理后,vb再处理概念上可行吗?如果可行,大虾们提个思路 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你可以考虑用DDE!利用TextBox的DDE功能,实现内存工享! 看看关于DDE 帮助吧!三言两语说不清楚! 把一个文件的名字作为参数传给一个外部应用程序,然后用它来打开该文件?自己修改一下。在USES 单元中加入 shellapi 就可以了。procedure TForm1.Button1Click(Sender: TObject); var pro,fname:Pchar;begin pro:=allocmem(255); fname:=allocmem(255); strPCopy(pro,'notepad.exe'); strPCopy(fname,'c:\000.txt'); shellExecute(Handle,'Open',pro,fname,nil,SW_SHOWMAXIMIZED);end; 或者发消息,读写消息就知道是那个文件这样就可以了标题:获取其他进程中ListView的文本说明:Window2000+Delphi6调试通过设计:Zswang支持:[email protected]日期:2004-03-25//*)uses CommCtrl;function ListViewColumnCount(mHandle: THandle): Integer;begin Result := Header_GetItemCount(ListView_GetHeader(mHandle));end; { ListViewColumnCount }function GetListViewText(mHandle: THandle; mStrings: TStrings): Boolean;var vColumnCount: Integer; vItemCount: Integer; I, J: Integer; vBuffer: array[0..255] of Char; vProcessId: DWORD; vProcess: THandle; vPointer: Pointer; vNumberOfBytesRead: Cardinal; S: string; vItem: TLVItem;begin Result := False; if not Assigned(mStrings) then Exit; vColumnCount := ListViewColumnCount(mHandle); if vColumnCount <= 0 then Exit; vItemCount := ListView_GetItemCount(mHandle); GetWindowThreadProcessId(mHandle, @vProcessId); vProcess := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, False, vProcessId); vPointer := VirtualAllocEx(vProcess, nil, 4096, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE); mStrings.BeginUpdate; try mStrings.Clear; for I := 0 to vItemCount - 1 do begin S := ''; for J := 0 to vColumnCount - 1 do begin with vItem do begin mask := 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; finally VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE); CloseHandle(vProcess); mStrings.EndUpdate; end; Result := True;end; { GetListViewText }//Exampleprocedure TForm1.FormCreate(Sender: TObject);begin RegisterHotKey(Handle, 1, MOD_WIN, VK_F2);end;procedure TForm1.FormDestroy(Sender: TObject);begin UnRegisterHotKey(Handle, 1);end;procedure TForm1.WMHOTKEY(var Msg: TWMHOTKEY);begin case Msg.HotKey of 1: GetListViewText( WindowFromPoint(Point(Mouse.CursorPos.X, Mouse.CursorPos.Y)), MemoText.Lines); end;end; 请问DATEDIFF如何返回2个差值呢? 如何复制Access数据库中的数据表? 还是关于ommonDialog,哪位大侠帮我看看这个方法该怎么注释啊????谢谢!!! 关于ole的,吐血 哪里有水晶报表 FOR VB的书或着比较全面的资料! 关于Cystal report9.0的使用 请帮助我 用datagrid显示数据的问题 怎么能让一个mdi子窗口总在最前? 这个问题贴出来两次了,没人帮我,只有再试一次了?http://www.csdn.net/Expert/topic/493/493873.shtm 等待中。。。。。 关于系统内存整理~~! 关于提取时间的一个小问题
自己修改一下。
在USES 单元中加入 shellapi 就可以了。
procedure TForm1.Button1Click(Sender: TObject);
var
pro,fname:Pchar;
begin
pro:=allocmem(255);
fname:=allocmem(255);
strPCopy(pro,'notepad.exe');
strPCopy(fname,'c:\000.txt');
shellExecute(Handle,'Open',pro,fname,nil,SW_SHOWMAXIMIZED);
end;
说明:Window2000+Delphi6调试通过
设计:Zswang
支持:[email protected]
日期:2004-03-25
//*)uses CommCtrl;function ListViewColumnCount(mHandle: THandle): Integer;
begin
Result := Header_GetItemCount(ListView_GetHeader(mHandle));
end; { ListViewColumnCount }function GetListViewText(mHandle: THandle; mStrings: TStrings): Boolean;
var
vColumnCount: Integer;
vItemCount: Integer;
I, J: Integer;
vBuffer: array[0..255] of Char;
vProcessId: DWORD;
vProcess: THandle;
vPointer: Pointer;
vNumberOfBytesRead: Cardinal;
S: string;
vItem: TLVItem;
begin
Result := False;
if not Assigned(mStrings) then Exit;
vColumnCount := ListViewColumnCount(mHandle);
if vColumnCount <= 0 then Exit;
vItemCount := ListView_GetItemCount(mHandle);
GetWindowThreadProcessId(mHandle, @vProcessId);
vProcess := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or
PROCESS_VM_WRITE, False, vProcessId);
vPointer := VirtualAllocEx(vProcess, nil, 4096, MEM_RESERVE or MEM_COMMIT,
PAGE_READWRITE);
mStrings.BeginUpdate;
try
mStrings.Clear;
for I := 0 to vItemCount - 1 do begin
S := '';
for J := 0 to vColumnCount - 1 do begin
with vItem do begin
mask := 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;
finally
VirtualFreeEx(vProcess, vPointer, 0, MEM_RELEASE);
CloseHandle(vProcess);
mStrings.EndUpdate;
end;
Result := True;
end; { GetListViewText }//Example
procedure TForm1.FormCreate(Sender: TObject);
begin
RegisterHotKey(Handle, 1, MOD_WIN, VK_F2);
end;procedure TForm1.FormDestroy(Sender: TObject);
begin
UnRegisterHotKey(Handle, 1);
end;procedure TForm1.WMHOTKEY(var Msg: TWMHOTKEY);
begin
case Msg.HotKey of
1:
GetListViewText(
WindowFromPoint(Point(Mouse.CursorPos.X, Mouse.CursorPos.Y)),
MemoText.Lines);
end;
end;