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

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

07.07.2010, 20:58. Показов 998. Ответов 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
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru