我正在编写一个应用程序,以使工作中的某些重复性任务自动化。我要执行的任务之一是能够自动在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; }
1 回答
- 1 回答
- 0 关注
- 801 浏览
添加回答
举报
0/150
提交
取消