将节点添加到另一个窗口的 TreeView

问题描述

我正在尝试使用以下代码将我的条目添加到其他人窗口(例如任务管理器)的 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;

为简单起见,代码不包含函数返回检查。

这段代码在树的根部添加一个条目,但不显示文本并且不改变节点图标:

image

谁能帮我修复代码,以便我可以将自己的条目添加到项目处理器中?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...