Пятница, 13 Декабря 2024, 12:09

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
мультиокно.мультизадачность.два активных окна в виндос7
knebuДата: Суббота, 07 Января 2012, 20:54 | Сообщение # 1
был не раз
Сейчас нет на сайте
есть такой вопрос-сделал игру(на сцире),там управление стрелки-лево и право- и я спецом написал для своей игры прогу(тоже на сцире) для статистки и повтора движений,чтоб проще было работать над игрой в дальнейшем.так вот меня интересует можно ли,чтобы когда я буду нажимать кнопки в своей игре,сигнал от этих кнопок уходил в мою вторую прогу и там также отображал все действия на клавиатуре?

я знаю,что это реализуемо т.к. видел такую механику написанную на флеше,но флеш вообще не знаю,так что хочу сделать в сцире.помогите плиз sad

Добавлено (07.01.2012, 20:54)
---------------------------------------------
тоесть постараюсь еще проще объяснить-у меня будет открыто два окна одной и той же игры с разных эксешников,но с не большими различиями и мне надо,чтобы на нажатие кнопки на клаве реагировали сразу эти два окошка,а не только то,что активно.

сразу скажу,что это мне не для мультибокса надо в онлайн играх,а для упрощения работы над своей игрой

ArmaggeDroidДата: Суббота, 07 Января 2012, 20:57 | Сообщение # 2
участник
Сейчас нет на сайте
Обьект Layout - В свойствах отметь Popup и выбери уровень для просмотра. Все! Так получается два окна из одного приложения. Ну а передать данные между уровнями просто (например, через глобальные переменные).

*Поясню: просто сделай такое же приложение внутри игры отдельным уровнем, и воспользуйся способом выше.


QuaDreams Team

Сообщение отредактировал ArmaggeDroid - Суббота, 07 Января 2012, 21:00
knebuДата: Суббота, 07 Января 2012, 21:00 | Сообщение # 3
был не раз
Сейчас нет на сайте
Quote (ArmaggeDroid)
Так получается два окна из одного приложения

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

Добавлено (07.01.2012, 21:00)
---------------------------------------------

Quote (ArmaggeDroid)
Так получается два окна из одного приложения

не,я же написал,что эксешника будет 2 и сами проги будут не много отличаться.1 окно-непосредственно сама игра,а второе почти тоже самое,но там будет еще фиксироваться статистика о нажатых кнопках и последствиях их нажатия
ArmaggeDroidДата: Суббота, 07 Января 2012, 21:03 | Сообщение # 4
участник
Сейчас нет на сайте
Quote
*Поясню: просто сделай такое же приложение внутри игры отдельным уровнем, и воспользуйся способом выше.


Ну а если все-таки нужно два приложения, то тоже просто: берем обьект INI, Start of layout - Set INI file. (в обоих приложениях). Потом через Write value передаем значение кнопок.


QuaDreams Team
knebuДата: Суббота, 07 Января 2012, 21:09 | Сообщение # 5
был не раз
Сейчас нет на сайте
Quote (ArmaggeDroid)
Обьект Layout - В свойствах отметь Popup и выбери уровень для просмотра. Все! Так получается два окна из одного приложения. Ну а передать данные между уровнями просто (например, через глобальные переменные).

*Поясню: просто сделай такое же приложение внутри игры отдельным уровнем, и воспользуйся способом выше.


вот смотри-допустим я играю какую-нибудь флеш игру в браузере-значит браузер будет являтся активным окном,вот мне надо сделать прогу,которая будет просто у меня запущенной,но свернутой в панели т.е.не будет реагировать на нажатия кнопок на клаве-вот именно эту проблему мне надо решить-чтобы она реагировала не будучи активной в виндос
allxumukДата: Суббота, 07 Января 2012, 21:11 | Сообщение # 6
старожил
Сейчас нет на сайте
Quote (knebu)
не,я же написал,что эксешника будет 2 и сами проги будут не много отличаться.1 окно-непосредственно сама игра,а второе почти тоже самое,но там будет еще фиксироваться статистика о нажатых кнопках и последствиях их нажатия

А зачем 2 экзешника-то? Всё равно ведь будет два окна.


Любой дурак может написать программу, которую поймёт компилятор.
Хорошие программисты пишут программы, которые смогут понять другие программисты.
knebuДата: Суббота, 07 Января 2012, 21:18 | Сообщение # 7
был не раз
Сейчас нет на сайте
Quote (ArmaggeDroid)
Ну а если все-таки нужно два приложения, то тоже просто: берем обьект INI, Start of layout - Set INI file. (в обоих приложениях). Потом через Write value передаем значение кнопок.

блин извини меня-я малость протупил с объяснением проблемы-мне принципе нужно просто сделать прогу,которая бы реагировала на нажатие кнопок не будучи активной.попробую через ИНИ-чета я про это вообще забыл,после закрытия русфорума сциры давно ей не пользовался
fool
allxumukДата: Суббота, 07 Января 2012, 21:25 | Сообщение # 8
старожил
Сейчас нет на сайте
Quote (knebu)
блин извини меня-я малость протупил с объяснением проблемы-мне принципе нужно просто сделать прогу,которая бы реагировала на нажатие кнопок не будучи активной.

Немного сомневаюсь, что это возможно сделать на Констракте, не для того он делался.


Любой дурак может написать программу, которую поймёт компилятор.
Хорошие программисты пишут программы, которые смогут понять другие программисты.
knebuДата: Суббота, 07 Января 2012, 21:28 | Сообщение # 9
был не раз
Сейчас нет на сайте
Quote (allxumuk)
Немного сомневаюсь, что это возможно сделать на Констракте, не для того он делался

ну я попробую,как советовал ArmaggeDroid-через ини.мож получится,раз на флеше можна ,то и сцира сможет.
хотя резать спрайты на кусочки,как в флеше тут нельзя-я уже эту тему проверял biggrin
RikushiДата: Воскресенье, 08 Января 2012, 16:31 | Сообщение # 10
почетный гость
Сейчас нет на сайте
Quote (knebu)
через ини.мож получится

Тогда следует задать следующий вопрос: могут ли две различные программы исполнять одновременно один и тот же ини файл.
Теоретически конечно просто. Записываешь из одной программы данные, считываешь из другой, после завершения процесса.
Но вот как передать информацию второй программе, что процесс внесения новой информации уже свершился? Иначе вторая программа начнет исполнять уже запущенный файл. Что при этом получится?
Кстати, констракт поддерживает SQL в каком либо виде? Через него думаю эту проблему решить намного проще.
ArmaggeDroidДата: Воскресенье, 08 Января 2012, 16:34 | Сообщение # 11
участник
Сейчас нет на сайте
Все просто - если такой строки нет, ини возвращает 0. В его случае, не критично. Ему же нужно отображение нажатых кнопок, а в этом деле задержка допустима.

P.S. Проверено - способ работает. Архив с исходниками: ЗДЕСЬ


QuaDreams Team

Сообщение отредактировал ArmaggeDroid - Воскресенье, 08 Января 2012, 16:44
RikushiДата: Воскресенье, 08 Января 2012, 16:42 | Сообщение # 12
почетный гость
Сейчас нет на сайте
Quote (ArmaggeDroid)
если такой строки нет, ини возвращает 0

В том то и дело, что строка будет(если я правильно понял процесс). Но в ней будет содержаться устаревшая информация. Если же постоянно удалять за собой строку из второй программы, то вероятно получение множество криткал эрроров.
ArmaggeDroidДата: Воскресенье, 08 Января 2012, 16:46 | Сообщение # 13
участник
Сейчас нет на сайте
Хм. Принцип действия такой программы прост: при нажатии в ини записывается 1, при отжатии - 0. Вторая программа только читает ИНИ и если там появляется единица, то выполняет действие. Для предотвращения повторного действия есть условие Trigger once while true.
Вторая программа никак на ини файл не влияет.


QuaDreams Team

Сообщение отредактировал ArmaggeDroid - Воскресенье, 08 Января 2012, 16:47
DemeronДата: Воскресенье, 08 Января 2012, 16:55 | Сообщение # 14
User created in C++
Сейчас нет на сайте
knebu, хм... ну раз ты так любишь сложности то:
1) Пишем DLL хук на клавиатуру. (в ней записуем только например определенные кнопки и только если активное окно - это окно скиры)
2) Пишем прогу, которая будет активировать этот хук.
3) Пишем прогу, которая будет считывать данные записанные ранее хуком и отправляет в окно с игрой.

Всё просто =) За час вполне реально сделать)) Только вот 1 минус, нужно знать какой-то ЯП.
knebuДата: Воскресенье, 08 Января 2012, 23:17 | Сообщение # 15
был не раз
Сейчас нет на сайте
Quote (Demeron)
knebu, хм... ну раз ты так любишь сложности то:
1) Пишем DLL хук на клавиатуру. (в ней записуем только например определенные кнопки и только если активное окно - это окно скиры)
2) Пишем прогу, которая будет активировать этот хук.
3) Пишем прогу, которая будет считывать данные записанные ранее хуком и отправляет в окно с игрой.

Всё просто =) За час вполне реально сделать)) Только вот 1 минус, нужно знать какой-то ЯП.

я вчера пол дня копался,но так ничего и не получилось.для решения этой задачи достаточно делфи и ты правильно советуешь-это делается через хуки,но весь интерес заключался сделать это в сцире,но знаний маловасто:(

Добавлено (08.01.2012, 23:13)
---------------------------------------------

Quote (ArmaggeDroid)
Все просто - если такой строки нет, ини возвращает 0. В его случае, не критично. Ему же нужно отображение нажатых кнопок, а в этом деле задержка допустима.

P.S. Проверено - способ работает. Архив с исходниками: ЗДЕСЬ


этот способ не подойдет к сожалению-там слишком большая задержка-для меня это критично

Добавлено (08.01.2012, 23:17)
---------------------------------------------
короче я нашел два варианта решения этой задачи,но не с помощью сциры.1 способ это язык делфи-Перехват (Hook) клавиатуры (программа Sendkeys),скрипт уже готовый там есть,а второй способ через прогу AutoIt v3 Script,тоже есть готовый скрипт-Код:

HotKeySet("{ESC}", "OnAutoItExit")

Global Const $WH_KEYBOARD_LL = 13

Global $sBuffer = ""
Global $hStub_KeyProc = DllCallbackRegister("_KeyProc", "int", "int;ptr;ptr")
Global $hMod = DllCall("kernel32.dll", "hwnd", "GetModuleHandle", "ptr", 0)
Global $hHook = DllCall("user32.dll", "hwnd", "SetWindowsHookEx", "int", _
$WH_KEYBOARD_LL, "ptr", DllCallbackGetPtr($hStub_KeyProc), "hwnd", $hMod[0], "dword", 0)

MsgBox(4096, "", "Type anything anywhere and it will appear in the top left corner of the screen.")

While 1
Sleep(10)
WEnd

Func EvaluateKey($nKeyCode)
If (($nKeyCode > 22) And ($nKeyCode < 91)) _
Or (($nKeyCode > 47) And ($nKeyCode < 58)) Then
$sBuffer &= Chr($nKeyCode)
ToolTip($sBuffer, 0, 0)
ElseIf ($nKeyCode > 159) And ($nKeyCode < 164) Then
Return
EndIf
EndFunc

Func _KeyProc($nCode, $wParam, $lParam)
Local $aRet, $KEYHOOKSTRUCT

If $nCode < 0 Then
$aRet = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hHook[0], "int", $nCode, "ptr", $wParam, "ptr", $lParam)
Return $aRet[0]
EndIf

If $wParam = 256 Then
$KEYHOOKSTRUCT = DllStructCreate("dword;dword;dword;dword;ptr", $lParam)
EvaluateKey(DllStructGetData($KEYHOOKSTRUCT, 1))
EndIf

$aRet = DllCall("user32.dll", "long", "CallNextHookEx", "hwnd", $hHook[0], "int", $nCode, "ptr", $wParam, "ptr", $lParam)

Return $aRet[0]
EndFunc

Func OnAutoItExit()
If $hStub_KeyProc Then DllCallbackFree($hStub_KeyProc)
$hStub_KeyProc = 0
DllCall("user32.dll", "int", "UnhookWindowsHookEx", "hwnd", $hHook[0])
If @HotKeyPressed <> "" Then Exit
EndFunc

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

  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2024 Рейтинг