forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   2D-программирование (http://forum.boolean.name/forumdisplay.php?f=13)
-   -   резидентная программа или как? (http://forum.boolean.name/showthread.php?t=3038)

sergeych 28.03.2007 14:44

резидентная программа или как?
 
Привет всем!
Вопрос не по теме, но вы тут парни продвинутые, думаю кто-нибуть поможет.
Смотрите, есть допустим стрелялка на блитзе, управление прицелом и выстрелом мышкой. Запускается эта стрелялка из другой программы на бейсике, которая запускается раньше и задает координаты выстрела, перехватывает управление мышью и имитируется выстрел в окне стрелялки. Вопрос: как сделать так, чтоб активным все время оставалось окно стрелялки, а запускающая программа продолжала задавать координаты, т.е. генерила их резиденто?
О как загнул! Мысли есть?

Platon 28.03.2007 15:03

Re: резидентная программа или как?
 
Мысли есть - создать поток (Thread) и из него передавать данные в Блиц.

sergeych 28.03.2007 16:23

Re: резидентная программа или как?
 
А можно подробнее, а то я с потоками еще ничего не делал. Наводящий пример, ссылочку принципа работы.

Chrono Syndrome 29.03.2007 19:47

Re: резидентная программа или как?
 
Цитата:

Мысли есть?
Ну лично я считаю, что обмен данными между приложениями удобнее всего проводить через сокеты. Многие не согласны.

jimon 30.03.2007 01:37

Re: резидентная программа или как?
 
Chrono Syndrome
я тоже не согласен

impersonalis 30.03.2007 02:34

Re: резидентная программа или как?
 
если сверх сложный анализ не нужен, да и в целом может иногда может понадобиться для работы между окнами и не только - S0M - Sign 0f Misery.
Из извращённых вариантов (т.к. адекватные уже перечислены) могу предложить DirectPlay (или подобное) по 127.0.0.1; работу через общий файл или блок памяти...

sergeych 30.03.2007 11:27

Re: резидентная программа или как?
 
Спасибо конечно вам, хотя все чего-то предлагают метод передачи данных. А он задан в условии - перехват мышки и симуляция нажатия ее кнопки. А задача в том, как из 1-го приложения на бейсике запустить приложение 2 на блитзе и не ждать его завершения, а сразу продолжать генерить координаты. Вторая задача - как запустить окно2 блитза в нужном месте экрана и без "шапки" где пишется название окна.
Вот теперь помогайте;)

Chrono Syndrome 30.03.2007 13:16

Re: резидентная программа или как?
 
Цитата:

А задача в том, как из 1-го приложения на бейсике запустить приложение 2 на блитзе и не ждать его завершения, а сразу продолжать генерить координаты.
Ну, примерно так (PB4.0):
Код:

SInfo.STARTUPINFO : PInfo.PROCESS_INFORMATION
CreateProcess_(@"Путь_до_запускаемого_приложения", @"коммандная_строка", 0, 0, 0, 0, 0, 0, SInfo, PInfo)


Цитата:

Вторая задача - как запустить окно2 блитза в нужном месте экрана и без "шапки" где пишется название окна.
Можно попробовать найти окно Blitz'евского приложения через FindWindow, после чего скрыть его, передвинуть, отключить отображение заголовка, а потом снова отобразить. Как будет свободное время - скину примерный код.

sergeych 30.03.2007 15:15

Re: резидентная программа или как?
 
Ок, жду

Chrono Syndrome 30.03.2007 18:22

Re: резидентная программа или как?
 
Так, значит у меня плохая новость: я так и не нашла способа скрыть заголовок уже созданного окна. Jimon утверждает, что это вообще невозможно... В остальном же все просто:
Код:

HWnd = FindWindow_(@"Blitz Runtime Class", @"Заголовок_окна_Blitz-приложения")
SetWindowPos_(HWnd, 0, Желаемая_координата_X, Желаемая_координата_Y, 0, 0, #SWP_NOSIZE | #SWP_NOZORDER)


jimon 31.03.2007 00:32

Re: резидентная программа или как?
 
я ниче не утверждал :) не надо
я просто сказал что средставами самого блица нельзя изменить форму окна :)

Platon 31.03.2007 06:09

Re: резидентная программа или как?
 
Нет ничего невозможного :-)
Уберает рамку и заголово и перемещает окно в позицию Px, Py
Код:

Function ModifyWindow(Px, Py)
        hWnd = SystemProperty("AppHWND")
        WINAPI_SetWindowLong(hWnd, -16, WINAPI_GetWindowLong(hWnd, -16) Xor (12582912 Or 8388608))
        WINAPI_MoveWindow(HWnd, Px, Py, GraphicsWidth(), GraphicsHeight(), 1)
End Function

можно еще убрать заголовок и рамку вот таким способом:
Код:

WINAPI_SetWindowRgn(SystemProperty("AppHWND"), WINAPI_CreateRectRgn(4, 24, GraphicsWidth() + 2, GraphicsHeight() + 22), True)
Обе функции вызывать после Graphics()

В папке userlibs надо создать текстовый файл под именем "Winapi.decls", с таким содержанием:
Код:

.lib "user32.dll"
WINAPI_MoveWindow(hWnd%, x%, y%, width%, height%, repaint%):"MoveWindow"
WINAPI_SetWindowLong%(hWnd%, nIndex%, dwNewLong%):"SetWindowLongA"
WINAPI_GetWindowLong%(hWnd%, nIndex%):"GetWindowLongA"
WINAPI_SetWindowRgn%(hWnd%, hRegion%, Redraw%):"SetWindowRgn"
.lib "gdi32.dll"
WINAPI_CreateRectRgn%(x%, y%, x2%, y2%):"CreateRectRgn"


jimon 31.03.2007 10:45

Re: резидентная программа или как?
 
ой,winapi ужс

Chrono Syndrome 31.03.2007 14:47

Re: резидентная программа или как?
 
Цитата:

Сообщение от jimon
я ниче не утверждал :) не надо
я просто сказал что средставами самого блица нельзя изменить форму окна :)

Да ? Ну, значит я тебя просто неправильно поняла -_- ...

ZanoZa 31.03.2007 18:51

Re: резидентная программа или как?
 
ого!вот это интересные приемы всплывают :)


Часовой пояс GMT +4, время: 20:21.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Перевод: zCarot