Переключение между процессами

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Переключение между процессами

Сообщение Andrew™ »

Родился интересный продуктик для своих нужд - универсальный пускач, он много чего делает, синхронизирует и т д
и далее запускает по RUN(starter.exe) который в свою очередь уже строрит Frame и т д приложения, так вот пускачь отработался и фокус не переходит во Frame загруженного приложения, а переходит в процесс от куда запускали пускач, приходится мышой кликать во frame.
От суда вопрос, может кто знает как программно переключиться в нужный мне процесс по имени?.

пускачь примерно такой:
PROGRAM
MAP.
CODE
RUN('unistarter.exe')

в unistarter.exe можно просто открыть оконную процедуру, НО фокус оно не получит. ;(
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7388
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 15 раз
Поблагодарили: 49 раз

Сообщение Игорь Столяров »

Как мимнимум - можно попробовать

1. Оставить пускач в памяти, тогда фокус останется на запущенном приложении: т.е. RUN('unistarter.exe',1)

2. Запустить 'unistarter.exe' через ShellExecute - у меня работает именно так и фокус остается на запущенном приложении ...
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

Игорь Столяров писал(а):Как мимнимум - можно попробовать
1. Оставить пускач в памяти, тогда фокус останется на запущенном приложении: т.е. RUN('unistarter.exe',1)
пробовал, не помогает
Игорь Столяров писал(а): 2. Запустить 'unistarter.exe' через ShellExecute - у меня работает именно так и фокус остается на запущенном приложении ...
а какие параметры для запуска shellExecute, я попробовал следующее:

Код: Выделить всё

RunFile             PROCEDURE(STRING Name,STRING param)
loc_W                &WINDOW
loc_lpOperation      CSTRING('open')
loc_lpFileName       CSTRING(256)
loc_lpParameters     CSTRING(100)
loc_lpDirectory      CSTRING(2)
I                    LONG
len                  LONG
    CODE

 len = LEN(CLIP(Name))
 loc_lpParameters = CLIP(param)

 loc_W    &= SYSTEM{PROP:Target}
 loc_lpFileName = CLIP(Name)
 ShellExecute(loc_W{PROP:Handle},loc_lpOperation, loc_lpFileName,|
 loc_lpParameters, loc_lpDirectory, 1)
тоже не помогает
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7388
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 15 раз
Поблагодарили: 49 раз

Сообщение Игорь Столяров »

Не уверен, что мой вариант лучше, но он проще и работает ...
Попробуй !

RunTask Procedure()

Loc:Handle USHORT
Loc:RetHandle USHORT
Loc:Op CSTRING(20)
Loc:File CSTRING(256)
Loc:Path CSTRING(256)
Loc:Param CSTRING(256)

window WINDOW,AT(,,0,0),CENTER,GRAY,DOUBLE
END

Code

Open(Window)
Loc:Handle = Window{PROP:Handle}
Loc:Op = 'open'
Loc:File = 'MyProgarm.exe'
Loc:Path = LongPath()
Loc:Param = ''
Loc:RetHandle = ShellExecute(Loc:Handle,Loc:Op,Loc:File,Loc:Param,Loc:Path,1)

Close(Window)

! --- Все ---
За теми кто отстал - не возвращаться. (С) Кодекс
Аватара пользователя
Andrew™
SQL профи
Сообщения: 651
Зарегистрирован: 05 Июль 2005, 16:32
Откуда: Москва, Зеленоград

Сообщение Andrew™ »

Игорь Столяров писал(а):Не уверен, что мой вариант лучше, но он проще и работает ...
Попробуй !
твой вариант аналогичен моему и никуда не проще, у тебя окошко у меня его нет ;)

но тоже не прокатил, всё таки сама задача более сложная у меня, но выкрутился и нашёл решение
Ответить