С Новым годом! Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.60/5: Рейтинг темы: голосов - 5, средняя оценка - 4.60
5 / 5 / 2
Регистрация: 28.02.2010
Сообщений: 127

Как написать на метке строку, адрес которой известен

07.07.2010, 20:58. Показов 985. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
привет!

Делаю прогу для управления винампом, затупил на получении названия текущего трека.
Если к примеру мне нужно получить номер трека в плейлисте то я использую такой код:
C++
1
Label1->Caption = SendMessage(WinampHWND, WM_USER, NULL, 125);// 125 - это комманда для получения трека
А для получения указателя на строку нужно отправлять комманду 212. Вот кратко о ней:
C++
1
//212 Восстанавливает (и возвращает указатель в ′данных′) строку которая содержит название трэка в плэйлисте (проиндексированном в ′данных′). Возвращает NULL если возникла ошибка, или если ′данные′ за допустимыми пределами.
Если делаю вот так
C++
1
Label1->Caption = SendMessage(WinampHWND, WM_USER, NULL, 212);
то у меня на Label1 появляеться 7 значное число, я так понял, это и есть указатель на строку, но как сделать чтобы на Label1 был не адрес строки а собстно эта строка?
ЗЫ: так не помогает:
C++
1
    Label1->Caption = (char*)SendMessage(WinampHWND, WM_USER, NULL, 212);
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
07.07.2010, 20:58
Ответы с готовыми решениями:

Вычислить адрес верхушки стека, адрес следующей команды, адрес переменной, адрес которой содержится в BX
Помогите решить следующие задачи: 1.Вычислить адрес верхушки стэка. 2.Вычислить адрес следующей выполняемой программы. 3. Вычислить...

Как получить географические координаты когда известен адрес?
Добрый день Решаю задачу коммивояжёра, у меня есть 200 адресов, нужно найти кратчайший путь между ими. Алгоритм поиска пути я уже...

Как изменить значение в памяти, если известен ProcessID и адрес ?
Как изменить значение в памяти, если известен ProcessID и адрес ? Вроде бы есть такая функция: Declare Sub FillMemory Lib...

2
 Аватар для Christopher M.
9 / 9 / 1
Регистрация: 02.07.2010
Сообщений: 28
07.07.2010, 21:21
Скорее всего придется преобразовывать саму возвращенную строку в тип AnsiString. (Обычно в объектах билдера строки именно этого типа, как я помню). Если последний пример не работает а строка, указатель на которую возвращает SendMessage, представляет собой последовательность символов (а что еще, с другой то стороны?), значит, дело в том, что не работает копирование строки при присваивании не с AnsiString, а со строки другого типа.

Предлагаю разбить проблему на две: 1) отладить размещение в Label1->Caption любой строки символов, объявленной где то как:
C++
1
   char str[] = "new text";
Может получиться что-то вроде:
C++
1
2
3
char str[] = "new text";
AnsiString newansi = new AnsiString(str);
Label1->Caption = newansi;
... но так как последний раз билдер вживую я видел давно и неправда, проверить пример не могу.

2) И уже потом разбираться с тем, что же все таки возвращается от Винампа.
0
5 / 5 / 2
Регистрация: 28.02.2010
Сообщений: 127
08.07.2010, 17:39  [ТС]
К сожалению, это не работает. Но порывшись в инете нашел вот темку: ссылка удалена . Получаеться, что SendMessage возвращает адрес в long. но всеравно я не пойму что нужно делать(((((((((

Добавлено через 16 часов 48 минут
Прикол был в том что указатель находиться в адресном пространстве винампа. Вот код для получения трека(в инете нашел):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
bool GetCurrentTrackName(char *buf, int *mode, int num)
{
    #define IPC_GETLISTPOS 125
    #define IPC_GETPLAYLISTTITLE 212
    #define IPC_ISPLAYING 104
 
    DWORD   dwProcessId, iReaded;
    bool    res = false;
    HWND    WinampHWND = FindWindow("Winamp v1.x", 0);
    if (WinampHWND == 0) return false;
    int pos = SendMessage(WinampHWND, WM_USER, 0, IPC_GETLISTPOS);
    char *name = (char*)SendMessage(WinampHWND, WM_USER, pos, IPC_GETPLAYLISTTITLE);
 
    GetWindowThreadProcessId(WinampHWND, &dwProcessId);
    HANDLE hWinamp = OpenProcess(PROCESS_VM_READ, 0, dwProcessId);
    if (hWinamp)
    {
        if(ReadProcessMemory(hWinamp, name, buf, num, &iReaded))
        {
            buf[iReaded] = 0;
            res = true;
        }
        CloseHandle(hWinamp);
    }
    if (mode) *mode = SendMessage(WinampHWND, WM_USER, 0, IPC_ISPLAYING);
    return res;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
08.07.2010, 17:39
Помогаю со студенческими работами здесь

Как разделить строку на подстроки, если известен разделитель
Есть ли функция которая разделяет строку, как Explode(php) Сама строка хранит в себе примерно такой код Str+code+Str+code+Str, Str -...

Как получить адрес папки, в которой находится программа?
гуглил мало что нашел #include <windows.h> нужна прога 1) WIN32 С++ , как получить адрес папки, в которой...

Как узнать адрес страницы, с которой пришел пользователь?
Привет всем! Подскажите, пожалуйста, каким образом можно узнать адрес страницы, с которой пришел пользователь, если такое возможно. Или...

Как узнать адрес страницы, на которой находится пользователь?
Привет! Собственно и весь вопрос... Использую JSP. И если такое возможно, хотелось бы узнать адрес страницы, с которой пришел пользователь....

Как получить адрес папки, в которой находится файл?
Всем добрый день. Можно ли в с++ (для линукс) как-то получить адрес директории, в которой лежит файл, если известен адрес файла. То есть,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
изучаю kubernetes
lagorue 13.01.2026
А пригодятся-ли мне знания kubernetes в России?
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru