|
HRACH
|
|
Вопросы по TreeView23.11.2010, 19:00. Показов 1195. Ответов 5
Метки нет (Все метки)
Хочу представить подробнее мою задачу.
Я пишу программу, которая осуществляет запуск и управление другой программы (Nero Express). Имея дескриптор (Handle) TreeView этой программы мне не удается активизировать пункты (элементы) TreeView. |
|
| 23.11.2010, 19:00 | |
|
Ответы с готовыми решениями:
5
Вопросы по Select in TreeView Когда вопросы кончаются, сделать кнопку неактивной и вывести сообщение о том, что вопросы кончились Как присвоить серверному контроллу TreeView коллекцию из TreeView, в котором находится информация из БД |
|
Comanche
|
|
| 23.11.2010, 20:21 | |
|
[code]
Option Explicit ' Private Declare Function CloseHandle Lib 'kernel32.dll' ( _ ByVal hObject As Long) As Long Private Declare Function GetParent Lib 'user32.dll' ( _ ByVal hwnd As Long) As Long Private Declare Function GetWindowThreadProcessId Lib 'user32.dll' ( _ ByVal hwnd As Long, _ ByRef lpdwProcessId As Long) As Long Private Declare Function OpenProcess Lib 'kernel32.dll' ( _ ByVal dwDesiredAccess As Long, _ ByVal bInheritHandle As Long, _ ByVal dwProcessId As Long) As Long Private Declare Function ReadProcessMemory Lib 'kernel32.dll' ( _ ByVal hProcess As Long, _ ByRef lpBaseAddress As Any, _ ByRef lpBuffer As Any, _ ByVal nSize As Long, _ ByRef lpNumberOfBytesWritten As Long) As Long Private Declare Function SendMessage Lib 'user32.dll' Alias 'SendMessageA' ( _ ByVal hwnd As Long, _ ByVal wMsg As Long, _ ByVal wParam As Long, _ ByRef lParam As Any) As Long Private Declare Function VirtualAllocEx Lib 'kernel32.dll' ( _ ByVal hProcess As Long, _ ByRef lpAddress As Any, _ ByRef dwSize As Long, _ ByVal flAllocationType As Long, _ ByVal flProtect As Long) As Long Private Declare Function VirtualFreeEx Lib 'kernel32.dll' ( _ ByVal hProcess As Long, _ ByRef lpAddress As Any, _ ByRef dwSize As Long, _ ByVal dwFreeType As Long) As Long Private Declare Function WriteProcessMemory Lib 'kernel32.dll' ( _ ByVal hProcess As Long, _ ByRef lpBaseAddress As Any, _ ByRef lpBuffer As Any, _ ByVal nSize As Long, _ ByRef lpNumberOfBytesWritten As Long) As Long ' Private Const PROCESS_VM_OPERATION As Long = (&H8) Private Const PROCESS_VM_READ As Long = (&H10) Private Const PROCESS_VM_WRITE As Long = (&H20) Private Const MEM_RELEASE As Long = &H8000 Private Const MEM_COMMIT As Long = &H1000 Private Const PAGE_READWRITE As Long = &H4 ' Private Const TV_FIRST As Long = &H1100 Private Const TVM_GETITEM As Long = (TV_FIRST + 12) Private Const TVIF_TEXT As Long = &H1 Private Const TVGN_NEXT As Long = &H1 Private Const TVGN_ROOT As Long = &H0 Private Const TVM_GETNEXTITEM As Long = (TV_FIRST + 10) Private Const TVM_SELECTITEM As Long = (TV_FIRST + 11) Private Const TVGN_CARET As Long = &H9 ' Private Type TVITEM mask As Long hItem As Long state As Long stateMask As Long pszText As Long cchTextMax As Long iImage As Long iSelectedImage As Long cChildren As Long lParam As Long End Type ' Public Sub GetItemsText(ByVal hTreeView As Long, ByVal stSample As String) Dim hProcess As Long, pMem As Long, pID As Long, tWindow As Long, w As Long Dim hItem As Long, tvi As TVITEM, Buffer As String ' Получаем дескриптор родительского окна нашего дерева: tWindow = GetParent(hTreeView) While GetParent(tWindow) <> 0 tWindow = GetParent(tWindow) Wend ' По этому дескриптору получаем ID процесса: GetWindowThreadProcessId tWindow, pID ' Открываем процесс с правами записи и чтения: hProcess = OpenProcess(PROCESS_VM_OPERATION Or PROCESS_VM_READ Or PROCESS_VM_WRITE, 0, pID) ' Если не получилось - выходим: If hProcess = 0 Then MsgBox 'Cannot open the selected process.', vbCritical, 'Eror' Exit Sub End If ' Резервируем кусок памяти в контексте процесса: pMem = VirtualAllocEx(hProcess, ByVal 0, ByVal (Len(tvi) + 256), MEM_COMMIT, PA |
|
|
HRACH
|
|
| 24.11.2010, 18:55 | |
|
Привет Comanche.
Твои код я запустил но на инструкций ' посылаем сообщение дереву: SendMessage hTreeView, TVM_GETITEM, 0, ByVal pMem возникает ошибка в управляемой программе(Creatr50.exe). Вот сообщение: ________________________________________ _______________ Creatr50.exe – Application Error ________________________________________ _______________ The instructionat «074f0221» referenced memory at «0x0561cdfc». The memory could not be «writte». Click on OK to terminate the program Click on CANCEL to debug the program ________________________________________ ________________ |
|
|
Comanche
|
||||||
| 26.11.2010, 13:58 | ||||||
|
Убери ByVal при передаче tvi вот здесь:
|
||||||
|
HRACH
|
|
| 28.11.2010, 14:18 | |
|
Привет Comanche.
'копируем строку-результат обратно в свою память: Buffer = Space$(256) ReadProcessMemory hProcess,ByVal(pMem + Len(tvi)),ByVal Buffer,256,w После этого оператора Buffer='' Не знаю где ошибка. Мне нужно актижизиривать каталог FOLDER1. Вот как виглядит 'чужой' TreeView Desktop | + ----My Docyment | + ----My Computer | | | +-------Floppy (A) | | | +-------Local Disk (C ![]() | | | | | |------ FOLDER1 | . | | . +------ Folder2 | | | +……---- Folder3 +---My Netvork Place ............. ............. |
|
|
Comanche
|
|
| 29.11.2010, 11:36 | |
|
Слушай, я же тебе не готовый код привёл, а лишь ОБРАЗЕЦ (который, кстати, давным-давно выложил в этот форум Messir). В своё время (в одном из твоих предыдущих топиков на эту же тему) я тебе давал ссылку на оригинальное сообщение от Мессира: там чёрным по белому написано, что этот код проходит только по одному уровню узлов дерева, а рекурсивность прохода нужно реализовывать самому! Не могу ж я за тебя вообще всю задачу решить! Идею подсказал - а дальше уж давай сам...
|
|
| 29.11.2010, 11:36 | |
|
Помогаю со студенческими работами здесь
6
Вопросы по Си Вопросы по с/с++ Вопросы
Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать программный контроль на предмет проведения документа. . .
|
Программный контроль заполнения реквизита табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: реализовать контроль заполнения реквизита "ПричинаСписания". . .
|
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение:
DISM / Online / Add-Capability / CapabilityName:WMIC~~~~
Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
|
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2.
Задача: при создании документов установить период списания автоматически. . .
|
|
Вывод данных в справочнике через динамический список
Maks 01.04.2026
Реализация из решения ниже выполнена на примере нетипового справочника "Спецтехника" разработанного в конфигурации КА2.
Задача: вывести данные из ТЧ нетипового документа. . .
|
Программное заполнения текстового поля в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению.
На форме документа создается. . .
|
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
|
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
|