Форум программистов, компьютерный форум, киберфорум
C# Windows Forms
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
1 / 1 / 0
Регистрация: 31.03.2020
Сообщений: 29

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

10.03.2025, 18:39. Показов 3345. Ответов 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
18278 / 14201 / 5368
Регистрация: 17.03.2014
Сообщений: 28,882
Записей в блоге: 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
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Основы отладки веб-приложений на SDL3 по USB и Wi-Fi, запущенных в браузере мобильных устройств
8Observer8 07.02.2026
Содержание блога Браузер Chrome имеет средства для отладки мобильных веб-приложений по USB. В этой пошаговой инструкции ограничимся работой с консолью. Вывод в консоль - это часть процесса. . .
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru