使用Win32 API获取Treeview(SysTreeView32)项目文本

我正在编写一个应用程序,以使工作中的某些重复性任务自动化。我要执行的任务之一是能够自动在Windows 10中从“ RecoveryDrive.exe”创建恢复驱动器的过程。所有过程都已完成,但是第一步,人类需要选择驱动器在SysTreeView32控件中。

我试图找到如何获取当前选定的treeNodeItem的文本。

我拥有该控件的句柄,但是当我尝试使用在线找到的代码示例读取它时,recoveryDrive应用程序崩溃。

我怀疑这与我使用的api方法的64位/ 32位不匹配以及ASCI和Unicode编码不匹配有关...我也认为我需要在目标应用的句柄或内存中使用LocalAlloc

它也有我基于我的代码的3页。当我使用sendMessage时,应用程序在GetTreeItemText函数中崩溃。


我已经找到了一些有关如何在C ++中执行此操作的示例,但我不太了解。


 public static string GetTreeItemText(IntPtr treeViewHwnd, IntPtr hItem)

            {

                int ret;

                TVITEM tvi = new TVITEM();

                IntPtr pszText = LocalAlloc(0x40, MY_MAXLVITEMTEXT);


                tvi.mask = TVIF_TEXT;

                tvi.hItem = hItem;

                tvi.cchTextMax = MY_MAXLVITEMTEXT;

                tvi.pszText = pszText;


                ret = SendMessageTVI(treeViewHwnd, TVM_GETITEM, 0, ref tvi);

                string buffer = Marshal.PtrToStringUni((IntPtr)tvi.pszText,

                MY_MAXLVITEMTEXT);


                //char[] arr = buffer.ToCharArray(); //<== use this array to look at the bytes in debug mode


                LocalFree(pszText);

                return buffer;

            }


潇湘沐
浏览 802回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP