Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - Общий форум

Страница: 1 |

 

  Вопрос: Передать текст SysListView32 Добавлено: 23.08.08 16:12  

Автор вопроса:  Vasiliy
Снова здравствуйте, есть контрол SysListView32, ему нужно передать текст, находится он в стороннем приложении.
Использовать, я так понимаю надо WindowsMessage.

Скрин для наглядности
http://d-tox.ru/mihail/tmp/dynamic_handle.jpg

Текст бокс появляется при нажатии на одну из ячеек, хотел сначала как-нибудь вызвать текстбокс и передать ему текст, но до эмуляции кликов мышкой скатываться не хочется, а по-другому наверное никак.
Поэтому надо просто передать ячейке ListView текст.
Нашел что для работы с ListView существует куча сообщений (http://olddos.narod.ru/doc/comp/bsp/v22/ch3.html - описание на русском)

Для передачи сообщения нам 100% потребуется:
Private Type LVITEM
    mask As Long
    iItem As Long
    iSubItem As Long
    state As Long
    stateMask As Long
    pszText As String
    cchTextMax As Long
    iImage As Long
    lParam As Long
    iIndent As Long
End Type

Private Const LVIF_TEXT = &H1
Private Const LVM_FIRST = &H1000


Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) _
 As Long


А непосредственно для передачи текста я не знаю, что нужно использовать - LVM_SETITEMTEXT или LVM_INSERTITEM?

Private Const LVM_INSERTITEM = (LVM_FIRST + 7)
Private Const LVM_SETITEMTEXT = (LVM_FIRST + 46)


Как я ни пытался передавать сообщения сторонней программе, она всевремя падает, поэтому потренироваться сначала наверное лучше на собственном ListView (входит в состав Common Controls)

Пока читал доки наткнулся на загадочный макрос [url=http://msdn.microsoft.com/en-us/library/aa453373.aspx]ListView_SetItemText[/url] как его объявить я не понял, но он бы облегчил дело.

Итак, какое сообщение и как посылать?
Заранее спасибо!

Ответить

  Ответы Всего ответов: 5  

Номер ответа: 1
Автор ответа:
 



Администратор

ICQ: 278109632 

Вопросов: 42
Ответов: 3949
 Web-сайт: domkratt.com
 Профиль | | #1
Добавлено: 23.08.08 16:37
Platform Builder for Microsoft Windows CE 5.0

Ну-ну... В винде для десктопов этого макроса может и не быть. Ты поищи в хидерах от C++

Ответить

Номер ответа: 2
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #2 Добавлено: 23.08.08 22:02
Оно ж не всё так просто как хотелось ;) Получить то данные можно довольно просто SendMassage+LVM_GETITEMTEXT, но как уже заметил Василий, при добавлении записи создается Edit, хендел которого динамический, в который и вводится нужный текст... Далее интереснее...
Все дескрипторы окошек класса SysListView32, не являются уникальными в пределах системы, а только в пределах одного процесса в котором используется этот SysListView32. Кроме того, API для работы c LV, в качестве параметров ожидают указатели на адреса в вирт.АП того процесса, который создал этот LV. Поэтому, если кому-то очень хочеться таки добавить туда новую запись - придется инжектиться в процесс с помощью сторонней DLL например, или же попробовать работать с АП другого процесса через API VirtualAllocEx\ReadProcessMemory\WriteProcessMemory. Как при этом быть в Win9xMe я хз, да и при инжекте DLL фаерволам вроде Outpost'а врядли это понравиться.

Ответить

Номер ответа: 3
Автор ответа:
 Серёга



ICQ: 262809473 

Вопросов: 17
Ответов: 561
 Web-сайт: houselab.narod.ru
 Профиль | | #3
Добавлено: 24.08.08 16:09
Может быть тебе это поможет:
http://subscribe.ru/archive/comp.soft.prog.delphiinternet/200602/20030620.html
Статья "Работа с иконками рабочего стола."

Ответить

Номер ответа: 4
Автор ответа:
 Vasiliy



Вопросов: 9
Ответов: 18
 Профиль | | #4 Добавлено: 24.08.08 16:47
HACKER вот это уже интересно.
Нашел большой пример на VB6 где считывались данные из этого контрола, так вот там создавалась копия адресного пространства ListView из процесса и один товарищ смог как-то просто реализовать запись. Я не до конца понимаю весь процесс, поэтому подвиг повторить не смог :)

пример
http://forum.sources.ru/index.php?showtopic=246484

ссылка для скачки
http://d-tox.ru/mihail/tmp/Code_ControlExtractor.rar

Ответить

Номер ответа: 5
Автор ответа:
 HACKER


 

Разработчик Offline Client

Вопросов: 236
Ответов: 8362
 Профиль | | #5 Добавлено: 26.08.08 02:38
Ну там маршалинг реализуется с помощью какой-то волшебной rpiAccessProcess.dll, по сути, как его реализовать не особо важно, главное факт, что его надо реализовать...

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам