Я пишу приложение, чтобы автоматизировать некоторые повторяющиеся задачи на моей работе.
Одна из задач, которую я хочу выполнить, - это возможность автоматизировать процесс создания диска восстановления из «RecoveryDrive.exe» в Windows 10. Весь процесс завершен, но на одном этапе человеку нужно выбрать диск. в элементе управления SysTreeView32.
Я попытался найти, как получить текст текущего выбранного TreeNodeItem.
У меня есть дескриптор элемента управления, но когда я пытаюсь прочитать его, используя пример кода, найденный в Интернете, происходит сбой приложения recoveryDrive.
Я подозреваю, что это связано с несовпадением 64-бит / 32-бит с используемыми мной методами API и, возможно, с несовпадением кодировки ASCI и Unicode ... Я также думаю, что мне нужно использовать LocalAlloc внутри целевого приложения.
здесь - вставка кода в текущем состоянии .
У этого также есть 3 страницы, от которых я основал свой код. Сбой приложения в функции GetTreeItemText при использовании sendMessage.
Я нашел пример того, как сделать это в 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;
}