我正在编写一个应用程序,以使工作中的某些重复性任务自动化。我要执行的任务之一是能够自动在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;
}
相关分类