问题描述
我正在尝试使用以下代码将我的条目添加到其他人窗口(例如任务管理器)的 SysTreeView32:
procedure AddSomeString( AHandle:THandle );
var
vItem: TTVItem;
lpis : TTVInsertStruct;
vPointer,vPointerText: Pointer;
vNumberOfBytesRead,vProcessId: SIZE_T;
vProcess: THandle;
vBuffer: array[ 0..255 ] of Char;
begin
GetwindowThreadProcessId( AHandle,@vProcessId );
vProcess := OpenProcess( PROCESS_ALL_ACCESS,False,vProcessId );
vPointer := VirtualAllocEx( vProcess,nil,4096,MEM_RESERVE or MEM_COMMIT,PAGE_READWRITE );
vPointerText := VirtualAllocEx( vProcess,256,PAGE_READWRITE );
vBuffer := 'Test';
ZeroMemory( @vItem,SizeOf( TTVItem ) );
with vItem do
begin
mask := TVIF_TEXT or TVIF_IMAGE or TVIF_SELECTEDIMAGE;
cchTextMax := SizeOf( vBuffer );
pszText := vPointerText;
iImage := 3;
iSelectedImage := 3;
end;
lpis.hParent := 0;
lpis.hInsertAfter := 0;
lpis.item := vItem;
WriteProcessMemory( vProcess,vPointer,@lpis,SizeOf( TTVInsertStruct ),vNumberOfBytesRead );
WriteProcessMemory( vProcess,vPointerText,@vBuffer[ 0 ],SizeOf( vBuffer ),vNumberOfBytesRead );
SendMessage( AHandle,TVM_INSERTITEM,LParaM( vPointer ) );
VirtualFreeEx( vProcess,MEM_RELEASE );
VirtualFreeEx( vProcess,MEM_RELEASE );
CloseHandle( vProcess );
end;
procedure TForm1.Button1Click(Sender: TObject);
var
h: HWND;
begin
h := FindWindow( nil,PChar( 'Диспетчер устройств' ) );
h := findwindowex( h,PChar( 'MDIClient' ),nil );
h := findwindowex( h,PChar( 'MMCChildFrm' ),PChar( 'MMCViewWindow' ),PChar( 'MMCOcxviewWindow' ),PChar( 'AtlAxWinEx' ),PChar( 'AfxOleControl42u' ),PChar( 'SysTreeView32' ),nil );
if h <> 0 then
begin
AddSomeString( h );
InvalidateRect( h,False );
end;
end;
这段代码在树的根部添加了一个条目,但不显示文本并且不改变节点图标:
谁能帮我修复代码,以便我可以将自己的条目添加到项目处理器中?
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)