Взаимодействие процессов

Программирование на Visual Basic, главный форум. Обсуждение тем программирования на VB 1—6.
Даже если вы плохо разбираетесь в VB и программировании вообще — тут вам помогут. В разумных пределах, конечно.
Правила форума
Темы, в которых будет сначала написано «что нужно сделать», а затем просьба «помогите», будут закрыты.
Читайте требования к создаваемым темам.
X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Взаимодействие процессов

Сообщение X-BOND » 12.04.2004 (Пн) 17:24

Имею две программы.
Одна резидентая, не содержит форм, сидит и тихонько ловит клавиши.
Другая типа надстройка над первой, сидит в трее, и по идее, должна управлять первой. Так вот, как послать определенное сообщение первой программе?

(Есть подозрение, что надо юзать функцию GlobalAddAtom но как?)

kif
Постоялец
Постоялец
 
Сообщения: 736
Зарегистрирован: 10.12.2001 (Пн) 18:06
Откуда: Украина, Одесса

Сообщение kif » 13.04.2004 (Вт) 12:45

Это все конечно на уровне идей, но

1. спослать первой SendMessage комманду
2. сделать что-то вроде клиент-сервера (при наличии сетевой карты)
3. это уже совсем ... заведи какой-нибудь файлик и пиши в него свои команды, а после исполнения их второй программой удаляй его.
Братья и сестры, что вы делаете???
Ведь вы же братья и сестры.

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 13.04.2004 (Вт) 13:59

Используй DDE и не парься. Пример здесь на сайте где-то был.. Там ни фига не понятно, но разобраться можно.. :-)

X-BOND
Реалист
Реалист
 
Сообщения: 944
Зарегистрирован: 19.08.2002 (Пн) 11:44
Откуда: Ukraine

Сообщение X-BOND » 13.04.2004 (Вт) 14:35

Это все конечно на уровне идей, но
1. спослать первой SendMessage комманду

Я же написал, что в первой проге форм нет, значить и hWnd нету. А что тогда первым параметром для SendMessage ставить?

2. сделать что-то вроде клиент-сервера (при наличии сетевой карты)

Ну, это полное извращение...

3. это уже совсем ... заведи какой-нибудь файлик и пиши в него свои команды, а после исполнения их второй программой удаляй его.

Как вариант на крайний случай подойдет.


Тут у меня еще один извращенный вариант родился с реестром... Впрочем, лучше не надо.
Я знаю, что через атомы можно инфу передавать от одного процесса к другому, но самого механизма не понимаю.

Scuder
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 334
Зарегистрирован: 17.08.2002 (Сб) 13:18
Откуда: Moscow, Russia

Сообщение Scuder » 13.04.2004 (Вт) 14:45

А что мешает сделать форму с Visible=False?

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 13.04.2004 (Вт) 15:14

Используй mailslot'ы. Или, если ОС на основе NT, можешь передавать через (Named) Pipe.
Lasciate ogni speranza, voi ch'entrate.

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 14.04.2004 (Ср) 12:41

alibek писал(а):Используй mailslot'ы. Или, если ОС на основе NT, можешь передавать через (Named) Pipe.



Более правильным будет пользовать Memory Mapped Files

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 14.04.2004 (Ср) 14:52

GSerg уже пробовал :)
Там какие-то хитрости в NT-системах
Lasciate ogni speranza, voi ch'entrate.

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 14.04.2004 (Ср) 14:57

Да никакой хитрости :)
SECURITY_DESCRIPTOR нуна уметь создавать, а я не умею :)
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 14.04.2004 (Ср) 15:40

GSerg писал(а):Да никакой хитрости :)
SECURITY_DESCRIPTOR нуна уметь создавать, а я не умею :)


Под NT пользовал функцию CreateFileMapping ?

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 15.04.2004 (Чт) 9:24

Ну да :)
Создаётся нормально. Только другим процессам не предоставляется, если SECURITY_DESCRIPTOR не указан.
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 15.04.2004 (Чт) 10:57

GSerg писал(а):Ну да :)
Создаётся нормально. Только другим процессам не предоставляется, если SECURITY_DESCRIPTOR не указан.


под NT надо использовать

VirtualAllocEx
VirtualFreeEx

sanches
El compañero
El compañero
 
Сообщения: 823
Зарегистрирован: 09.01.2003 (Чт) 3:58
Откуда: Р_О_С_С_И_Я ! (Питер)

Сообщение sanches » 15.04.2004 (Чт) 17:55

:idea: А самый классный способ - ActiveX. Компилишь управляемую прогу как ActiveX EXE (напрмер назовем ее MyProg) (ну и соответственно делаешь там открытый класс, типа MyApplication). А в управляющей проге объявляешь класс, типа:
Set MyApp = CreateObject("MyProg.MyApplication")

а далее через MyApp управляешь своей прогой как хочешь

p.s. и ни с каким API париться не надо :wink:
Изображение

Fde
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 12.07.2002 (Пт) 17:35
Откуда: Sestroreck.spb.ru

Сообщение Fde » 15.04.2004 (Чт) 18:25

sanches писал(а)::idea: А самый классный способ - ActiveX. Компилишь управляемую прогу как ActiveX EXE (напрмер назовем ее MyProg) (ну и соответственно делаешь там открытый класс, типа MyApplication). А в управляющей проге объявляешь класс, типа:
Set MyApp = CreateObject("MyProg.MyApplication")

а далее через MyApp управляешь своей прогой как хочешь


Это в принципе рабочий и масштабируемый способ, так как вынести серверную прогу на другую машину не сложно. Но, imho, достаточно все медленно работает, то есть при необходимости крайне высокого быстродействия это вряд ли поможет. :(

sanches
El compañero
El compañero
 
Сообщения: 823
Зарегистрирован: 09.01.2003 (Чт) 3:58
Откуда: Р_О_С_С_И_Я ! (Питер)

Сообщение sanches » 15.04.2004 (Чт) 21:07

а прости, "крайне высокое быстродействие" - это насколько же высокое, чтобы этот метод не подошел? и где такое высокое бывает? :wink:
Изображение

codemaster
Постоялец
Постоялец
Аватара пользователя
 
Сообщения: 604
Зарегистрирован: 13.02.2004 (Пт) 13:35

Сообщение codemaster » 15.04.2004 (Чт) 22:43

[quote="sanches]

Set MyApp = CreateObject("MyProg.MyApplication")
а далее через MyApp управляешь своей прогой как хочешь

p.s. и ни с каким API париться не надо :wink:[/quote]

Это совершенно из другой песни
Быстродействие различается на порядок

Fde
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 12.07.2002 (Пт) 17:35
Откуда: Sestroreck.spb.ru

Сообщение Fde » 16.04.2004 (Пт) 9:23

Для 99% задач это подходит, но не для scada-систем.

sanches
El compañero
El compañero
 
Сообщения: 823
Зарегистрирован: 09.01.2003 (Чт) 3:58
Откуда: Р_О_С_С_И_Я ! (Питер)

Сообщение sanches » 16.04.2004 (Пт) 23:05

а что это?

p.s. я никому ничего не навязываю :wink:
Изображение

Fde
Начинающий
Начинающий
 
Сообщения: 18
Зарегистрирован: 12.07.2002 (Пт) 17:35
Откуда: Sestroreck.spb.ru

Сообщение Fde » 19.04.2004 (Пн) 12:26

Сопряжение с промышленными контроллерами. Это в принципе была из цитата лекции, которую нам в Универе читали.


Вернуться в Visual Basic 1–6

Кто сейчас на конференции

Сейчас этот форум просматривают: AhrefsBot, Google-бот и гости: 3

    TopList