powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / winapi SendMessage LB_GETTEXT возвращает только 8 символов
8 сообщений из 33, страница 2 из 2
winapi SendMessage LB_GETTEXT возвращает только 8 символов
    #38743950
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gustly, константы можно найти в *.h файлах которые являются частью Windows SDK. Путь будет примерно таким "Program Files (x86)\Microsoft SDKs\Windows\v7.1A\Include\".

Второй вариант - скачай P/Invoke Interop Assistant . В нем есть база констант.
...
Рейтинг: 0 / 0
winapi SendMessage LB_GETTEXT возвращает только 8 символов
    #38743952
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GustlySendMessage(ControlHandle, LVM_GETITEMTEXT, 10, h)

Возвращает 1 случайный символа ты правильно объявил, настроил, и потом смотрел "h"?

там (в памяти) подразумевается такая структура: http://msdn.microsoft.com/en-us/library/windows/desktop/bb774760(v=vs.85).aspx
...
Рейтинг: 0 / 0
winapi SendMessage LB_GETTEXT возвращает только 8 символов
    #38744024
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Яростный Меч,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
Dim ControlHandle As IntPtr = 527490 
        Dim RetVal As String = ""
        Dim RetValLength As Integer
        Const LB_GETTEXT = &H189
        Const LB_GETTEXTLEN = &H18A
        Const LVM_GETITEMTEXT As UInteger = &H102D
        RetValLength = SendMessage(ControlHandle, LB_GETTEXTLEN, 1, 0)

        Dim h As IntPtr = Marshal.AllocHGlobal(100)
        SendMessage(ControlHandle, LVM_GETITEMTEXT, 1, h)
        RetVal = Marshal.PtrToStringAnsi(h)
        RichTextBox1.Text += "len=" + CStr(RetValLength) + "$realLen=" + CStr(RetVal.Length)
        RichTextBox1.Text += vbNewLine
        RichTextBox1.Text += RetVal
        RichTextBox1.Text += vbNewLine
...
Рейтинг: 0 / 0
winapi SendMessage LB_GETTEXT возвращает только 8 символов
    #38744034
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gustly
Код: vbnet
1.
2.
Dim h As IntPtr = Marshal.AllocHGlobal(100)
SendMessage(ControlHandle, LVM_GETITEMTEXT, 1, h)

понятно.
нихрена не сделано.

ещё раз посмотри ссылку.
mask (первые sizeof(int) байтов) - не указан.
pszText - указатель на текстовый буфер не задан.
cchTextMax - нету.

чувак, это winAPI. Тут "по простому" не прокатит
...
Рейтинг: 0 / 0
winapi SendMessage LB_GETTEXT возвращает только 8 символов
    #38744050
bazile
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gustly, Яростный Меч абсолютно прав. Тебе нужно объявить структуру для LVITEM. Создать её экземпляр. Правильно его заполнить, передать в SendMessage и вытащить текст из поля pszText. Хотя если верить скриншоту у тебя все-таки List Box. Тем не менее попробуй с LVM_GETITEMTEXT.

Кстати, я только что обратил внимание на следующий текст в документации для LB_GETTEXT:
http://msdn.microsoft.com/en-us/library/windows/desktop/bb761313(v=vs.85).aspx If the list box has an owner-drawn style but not the LBS_HASSTRINGS style, the buffer pointed to by the lParam parameter receives the value associated with the item (the item data).
Это как раз твой случай. У List Box'a нет стиля LBS_HASSTRINGS отсюда и "мусор".
...
Рейтинг: 0 / 0
winapi SendMessage LB_GETTEXT возвращает только 8 символов
    #38744091
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
только щас заметил на втором скриншоте "class name ListBox". Действительно листбокс (нафига так сделали, непонятно).

самостоятельно рисуемый ListBox, без строк.
дело дрянь.

в lParam приходит просто значение указателя на структуру внутри той проги. и всё. просто целое число.
похоже придется как-то влезать в память этой программы, там зырить. В общем, лютое кулхацкерство, если я правильно понимаю.
...
Рейтинг: 0 / 0
winapi SendMessage LB_GETTEXT возвращает только 8 символов
    #38744261
Gustly
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Через LB_* у меня получается шагать, получать общее количество.

LB_GETITEMDATA возвращает какое-то число. С ним можно что-нибудь сделать?
...
Рейтинг: 0 / 0
winapi SendMessage LB_GETTEXT возвращает только 8 символов
    #38744279
Фотография Яростный Меч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
GustlyLB_GETITEMDATA возвращает какое-то число. С ним можно что-нибудь сделать? предположительно , это адрес в памяти, где находится некая структура, содержащая строки или ещё что-то.
в этом случае проблемы две:
1) адрес имеет смысл только в адресном пространстве той проги. Надо в него залезать и смотреть.
2) неизвестна структура. Какие там поля, в каком порядке, где среди них указатели на строки (это если напрямую). А может там вообще указатель куда-то ещё, на какие-нибудь объекты базовых/производных классов. Тут нужны либо исходники проги, либо очень суровое экспериментирование. Но опять же при выполнении п.1.
...
Рейтинг: 0 / 0
8 сообщений из 33, страница 2 из 2
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / winapi SendMessage LB_GETTEXT возвращает только 8 символов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]