1 / 1 / 0
Регистрация: 31.03.2020
Сообщений: 29

SendMessage в рамках разных процессов(приложений)

10.03.2025, 18:39. Показов 3487. Ответов 23

Студворк — интернет-сервис помощи студентам
Добрый вечер!
Столкнулся вот с чем. В рамках одного процесса все работает хорошо. Но нужно, чтобы работала с разными приложениями. Приложение, которое посылает SendMessage вываливается с ошибкой System.AccessViolationException: "Попытка чтения или записи в защищенную память. Это часто свидетельствует о том, что другая память повреждена."

C#
1
2
3
4
5
//Код приложения запроса
WM_GETNAME = 8018; //пользовательский
 
IntPtr getnamehandle = SendMessage((IntPtr)hWnd, WM_GETNAME, 0, 0);                                        //тут работает
string namewindow = System.Runtime.InteropServices.Marshal.PtrToStringAuto(getnamehandle);        //тут дает ошибку
C#
1
2
3
4
5
6
7
//приложения ответа
WM_GETNAME = 8018; //пользовательский
 
case WM_GETNAME:
  if (InSendMessage())
    ReplyMessage(new IntPtr((int)System.Runtime.InteropServices.Marshal.StringToHGlobalUni(this.Name)));
  break;
Наверно я что-то не так делаю)
Спасибо заранее, если кто знает, что не так.
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
10.03.2025, 18:39
Ответы с готовыми решениями:

MVC vs MVVM в рамках десктопных приложений
Время от времени делаю десктопные приложения на WPF, придерживаясь MVVM патерна. 1. Можно ли считать, что у него тоже есть контроллер,...

Написание простых Javascript приложений в рамках cms;
Начинающая, разьясните пожалуйста какие имеются ввиду приложения, как я поняла имеется ввиду проверка форм,подкачка страниц,поиск,подкачка...

Сохранение и загрузка в рамках РАЗНЫХ сцен
Снова пишу по поводу сохранения, ибо у меня получилось одно, а требовалось другое :(. Пытался написать код, который загружает сцену, а...

23
1 / 1 / 0
Регистрация: 31.03.2020
Сообщений: 29
12.03.2025, 17:48  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от OwenGlendower Посмотреть сообщение
alexsher, значит и WM_COPYDATA должна просто работать.
Доброго вечера!
Решение нашел, пошерудил https://learn.microsoft.com/, нарисовал функцию.
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
        string GetStringData(IntPtr handle, IntPtr address)
        {
            try
            {
                int pid = 0;
                InvokeUSER32.GetWindowThreadProcessId(handle, ref pid);
 
                IntPtr processHandle = InvokeUSER32.OpenProcess(Service.PROCESS_WM_READ, false, pid);
 
                int bytesRead = 0;
                byte[] buffer = new byte[512]; 
 
                if (InvokeUSER32.ReadProcessMemory(processHandle, address, buffer, buffer.Length, out bytesRead))
                {
                    List<byte> bytes = new List<byte>();
                   // byte[] bytes = new byte[bytesRead];
 
                    for (int i = 0; i < bytesRead; i++)
                    {
                        if (buffer[i] == '\0')
                            break;
 
                        bytes.Add(buffer[i]);
                    }
 
                    return Encoding.Unicode.GetString(bytes.ToArray());
                }
                else
                    return "fail";
            }
            catch (Exception err)
            {
                return err;
            }
 
        }
 
все вродь нормально, запрос делаю по старому, ответ тоже. только ответ разбираю этой функцией. 
но!
приходит весь буфер.
rdpclient\0錅ꏧ�簅耀쵐ఖᓠూ\0\0\a\0\u0002\0\0\0ꏻ�紀耀췰ఖᓠూ\0\0\0\0\u0005\0\0\0\0\0\0\0\0\0\0\0甆イ龜ࠑ\u0002\0ӣ\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0
Я, честно говоря, думал, что в переменной bytesRead будет количество байтов, переданных из процесса, а тут такое же количество, как и в созданном, мною, буфере.
не получается отсечь нужное слово. слово rdpclient
при распознавании \0 остается только первая буква r) кодировка unicode
может кто сталкивался?
0
1 / 1 / 0
Регистрация: 31.03.2020
Сообщений: 29
13.03.2025, 17:34  [ТС]
Решено!
0
Администратор
Эксперт .NET
 Аватар для OwenGlendower
18312 / 14235 / 5369
Регистрация: 17.03.2014
Сообщений: 28,905
Записей в блоге: 1
13.03.2025, 18:27
alexsher, поделитесь решением. Возможно кому-то еще пригодится.
0
1 / 1 / 0
Регистрация: 31.03.2020
Сообщений: 29
13.03.2025, 22:09  [ТС]
Да! От радости совсем забыл поделиться) Решение через unsafe. Оказалось просто.

C#
1
2
3
4
5
6
7
8
9
10
                if (InvokeUSER32.ReadProcessMemory(processHandle, address, buffer, buffer.Length, out bytesRead))
                {
                   unsafe
                    {
                        fixed (byte* ptrToBuffer = buffer)
                            return new string((char*)(ptrToBuffer));
                    }
                }
                else
                    return "fail";
Но если в buffer гарантированно лежит '\0' после строки, как в моем случает. Иначе может не сработать.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.03.2025, 22:09
Помогаю со студенческими работами здесь

Посчитать количество разных товаров в рамках одного заказа
Добрый вечер, не могу сообразить как правильно создать вложенный запрос по заданию. GO CREATE VIEW . AS SELECT...

завершение процессов. открытия приложений. и т.д.
Добрый уже вечер. нашёл старый, но ещё неплохо работающий комп. Решил сделать из него мильтимедийный центр и подключить к плазме. короче...

Как настроить отправку сообщений sendMessage(sendMessage)?
Доброго времени суток! Подскажите пожалуйста как решить проблему: хочу создать простого телеграм бота, чтобы поучиться java. Решил...

Общий массив для двух приложений (процессов)?
Можно ли организовать общее адресное пространство для разных приложений (процессов) без использования СУБД и без передачи всего массива...

Мониторинг и завершение вновь запущенных системных процессов/приложений
Здравствуйте уважаемые форумчане! Задача: При старте генерируется файл со списком запущенных процессов и приложений, затем с заданным...


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

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

Новые блоги и статьи
Асинхронный приём данных из COM-порта
Argus19 01.05.2026
Асинхронный приём данных из COM-порта Купил на aliexpress термопринтер QR701. Он оказался странным. Поключил к Arduino Nano. Был очень удивлён. Наотрез отказывается печатать русские буквы. Чтобы. . .
попытка написать игровой сервер на C++
pyirrlicht 29.04.2026
попытка написать игровой сервер на плюсах с открытым бесконечным миром. возможно получится прикрутить интерпретатор питон для кастомизации игровой логики. что есть на текущий момент:. . .
Контроль уникальности выбранного документа-основания при изменении реквизита
Maks 28.04.2026
Алгоритм из решения ниже разработан на примере нетипового документа "ЗаявкаНаРемонтСпецтехники", разработанного в КА2. Задача: уведомлять пользователя, если указанная заявка (документ-основание). . .
Благородство как наказание
Maks 24.04.2026
У хорошего человека отношения с женщинами всегда складываются трудно. А я человек хороший. Заявляю без тени смущения, потому что гордиться тут нечем. От хорошего человека ждут соответствующего. . .
Валидация и контроль данных табличной части документа перед записью
Maks 22.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в КА2. Задача: контроль и валидация данных табличной части документа перед записью с учетом регламента компании. . .
Отчёт о затраченных материалах за определенный период с макетом печатной формы
Maks 21.04.2026
Отчёт из решения ниже размещён в конфигурации КА2. Задача: разработка отчёта по затраченным материалам за определённый период, с возможностью вывода печатной формы отчёта с шапкой и подвалом. В. . .
Отчёт о спецтехнике находящейся в ремонте
Maks 20.04.2026
Отчёт из решения ниже размещен в конфигурации КА2. Задача: отобразить спецтехнику, которая на данный момент находится в ремонте. Есть нетиповой документ "Заявка на ремонт спецтехники" который. . .
Памятка для бота и "визитка" для читателей "Semantic Universe Layer (Слой семантической вселенной)"
Hrethgir 19.04.2026
Сгенерировано для краткого описания по случаю сборки и компиляции скелета серверного приложения. И пусть после этого скажут, что статьи сгенерированные AI - туфта и не интересно. И это не реклама -. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru