Форум программистов, компьютерный форум, киберфорум
Наши страницы
Visual Basic
Войти
Регистрация
Восстановить пароль
 
HRACH
#1

Вопросы по TreeView - VB

23.11.2010, 19:00. Просмотров 888. Ответов 5
Метки нет (Все метки)

Хочу представить подробнее мою задачу.

Я пишу программу, которая осуществляет запуск и управление другой программы (Nero Express).
Имея дескриптор (Handle) TreeView этой программы мне не удается активизировать пункты (элементы) TreeView.
http://www.cyberforum.ru/visual-basic/thread79323.html
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.11.2010, 19:00
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Вопросы по TreeView (VB):

Теоретические вопросы
1) Работа с клавиатурой в прграмме на алгоритмическом языке VB 2)Шаблон...

Вопросы по графике
1) Функция RGB выводит результат в формате Long. Как разложить цвет As Long...

Вопросы по ActiveBar 2.0
HI ALL http://www.datadynamics.com/productdownloads/19/AB2Evaluation.exe...

Некоторые вопросы по проге
В теме 3 дня, поэтому прошу сильно не пинать. Был конечно школьный опыт в qb и...

Вопросы многопоточности в VB6
Часть сообщений выделена из темы:...

5
Comanche
23.11.2010, 20:21 #2
[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 #3
Привет 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 #4
Убери ByVal при передаче tvi вот здесь:
Код
WriteProcessMemory hProcess, ByVal pMem, tvi, Len(tvi), w
HRACH
28.11.2010, 14:18 #5
Привет 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 #6
Слушай, я же тебе не готовый код привёл, а лишь ОБРАЗЕЦ (который, кстати, давным-давно выложил в этот форум Messir). В своё время (в одном из твоих предыдущих топиков на эту же тему) я тебе давал ссылку на оригинальное сообщение от Мессира: там чёрным по белому написано, что этот код проходит только по одному уровню узлов дерева, а рекурсивность прохода нужно реализовывать самому! Не могу ж я за тебя вообще всю задачу решить! Идею подсказал - а дальше уж давай сам...
29.11.2010, 11:36
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
29.11.2010, 11:36
Привет! Вот еще темы с решениями:

Мелкие вопросы по синтаксису
Всю жизнь программировал на С++ и Delphi, а тут заставили писать прогу на...

Вопросы по Textbox/Richtextbox
Как вывести в textbox или richtextbox текст, содержащий переменные? Например,...

Вопросы по MDI-форме
Первый вопрос: как в VB организовать панель окон в родительской форме, чтобы...

Вопросы по работе с датами
Вот такие вопросы: 1. Как сравнить два значения времени 2. Как достать текст...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru