|
Полезные функции Выкладываем полезные функции, чтоб не изобретать велосипед заново... |
18.10.2016, 20:41
|
#1
|
Разработчик
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений (для 369 пользователей)
|
Для тех, кому в блице внезапно не хватило браузера, word и тд
В общем, для любителей извращений с блицем, если вам внезапно в окне блица понадобился браузер, Word, блокнот, косынка и пасьянс
Код AutoIt 3.3.14.2:
#NoTrayIcon
#include <WinAPI.au3>
#include <WinAPISys.au3>
#include <WindowsConstants.au3>
#Include <Word.au3>
Opt("WinTitleMatchMode", 3)
$eXn = @ScriptDir & '\bin.exe'
$lPn = 'SCL.auto'
$aRet = _GetDesktopWorkArea()
If Not WinExists($lPn) Then
if _WinAPI_GetVersion() = 10 then
$dw = _WinAPI_GetSystemMetrics(16) - 2 * _WinAPI_GetSystemMetrics(6)
$dh = _WinAPI_GetSystemMetrics(17) - _WinAPI_GetSystemMetrics(6) - _WinAPI_GetSystemMetrics(7)
ShellExecute ($eXn, string($dw) & "/" & string($dh))
WinMove (WinWaitactive($lPn), "", $aRet[0] - 2 * _WinAPI_GetSystemMetrics(6), $aRet[1])
Else
$dw = _WinAPI_GetSystemMetrics(16) - 2 * _WinAPI_GetSystemMetrics(6)
$dh = _WinAPI_GetSystemMetrics(17) - 2 * _WinAPI_GetSystemMetrics(7)
ShellExecute ($eXn, string($dw) & "/" & string($dh))
WinMove (WinWaitactive($lPn), "", $aRet[0] - 2 * _WinAPI_GetSystemMetrics(6), $aRet[1] + _WinAPI_GetSystemMetrics(7))
EndIf
$GUI = WinGetHandle ($lPn)
_WinAPI_SetWindowLong($GUI, $GWL_STYLE, bitor(_WinAPI_getWindowLong($GUI, $GWL_STYLE), $WS_CLIPCHILDREN))
Opt("WinTitleMatchMode", 1)
$oWordApp = _Word_Create (0, 0)
$hWnd = WinWait ("Microsoft Word")
_WinAPI_SetWindowLong($hWnd, $GWL_EXSTYLE, $WS_EX_TOOLWINDOW)
_Word_DocOpen($oWordApp, @ScriptDir & "\test.docx")
_WinAPI_SetWindowLong($hWnd, $GWL_STYLE, $WS_POPUP)
_WinAPI_MoveWindow($hWnd, 0, 0, 200, 200)
_WinAPI_SetWindowLong($hWnd, $GWL_STYLE, BitOR($WS_CHILD, $WS_TABSTOP, $WS_VISIBLE))
_WinAPI_SetParent($hWnd, $GUI)
_WinAPI_MoveWindow($hWnd, 0, 61, $dw - $dw / 5, $dh - 61)
_WinAPI_UpdateWindow($GUI)
_WinAPI_UpdateWindow($hWnd)
;$iTimer = TimerInit()
_WinAPI_InvalidateRect($GUI)
While WinExists($lPn)
;If TimerDiff($iTimer) >= 500 Then
; $iTimer = TimerInit()
; _WinAPI_InvalidateRect($GUI)
;EndIf
Wend
_Word_Quit($oWordApp)
Else
WinSetState ($lPn, '', @SW_SHOW & @SW_RESTORE)
WinActivate($lPn)
EndIf
Func _GetDesktopWorkArea()
Local Const $SPI_GETWORKAREA = 48
Local $sRect = DllStructCreate($tagRECT)
If _WinAPI_SystemParametersInfo($SPI_GETWORKAREA, 0, DllStructGetPtr($sRect)) Then
Local $aRet[4] = [ _
DllStructGetData($sRect, "Left"), _
DllStructGetData($sRect, "Top"), _
DllStructGetData($sRect, "Right"), _
DllStructGetData($sRect, "Bottom")]
Return SetError(0, 0, $aRet)
EndIf
Return SetError(1, 0, 0)
EndFunc ;==>_GetDesktopWorkArea
Вкратце что делаем:
1. При открытии окна блица надо добавить к нему стиль WS_CLIPCHILDREN операцией бинарного ИЛИ к уже существующим стилям - это для того, чтобы блиц не перерисовывал область дочернего окна.
2. При запуске потенциального дочернего окна назначаем ему стиль WS_EX_TOOLWINDOW, чтобы он не мелькал в панели задач, а потом назначаем WS_POPUP, чтобы убрать рамку.
3. Переназначаем дочернему окну стили WS_CHILD и WS_VISIBLE - дочернее и видимое (тк по умолчанию окно будет скрыто после предыдущих операций).
4. Назначаем родителя SetParent, обновляем окна, посылая ему WM_PAINT, тут начинается лабуда из-за очередности прорисовки окон в винде, чтобы этой лабуды не было, назначаем InvalidateRect.
PS. Универсальную dll не стал делать, т.к. каждое приложение имеет свои особенности, лучше подгонять отдельно - править скрипт autoit.
PS2. Почему блиц? Мне нужна 3D сцена, которая создается считывая данные из документа Word, которые при этом правятся. В общем, из 3D движков я работал только с блицем, мне проще взять его и не париться.
Потестите пример (run.exe), у всех дочернее окно ворда нормально отрисовывается?
Проверял на Win 7 и 10 х64, офис 2010.
|
(Offline)
|
|
Эти 4 пользователя(ей) сказали Спасибо DarkInside за это полезное сообщение:
|
|
18.10.2016, 23:29
|
#2
|
Ференька
Регистрация: 26.01.2007
Адрес: улица Пушкина дом Колотушкина
Сообщений: 10,742
Написано 5,461 полезных сообщений (для 15,675 пользователей)
|
Ответ: Для тех, кому в блице внезапно не хватило браузера, word и тд
Запустил, появляется Малевич маленький и закрывается тут же.
Винда 10 (обновления последние), офис 2010
__________________
Мои проекты:
Анальное Рабство
Зелёный Слоник
Дмитрий Маслов*
Различие**
Клюква**
* — в стадии разработки
** — в стадии проектирования
Для проектов в стадии проектирования приведены кодовые имена
|
(Offline)
|
|
18.10.2016, 23:57
|
#3
|
Разработчик
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений (для 369 пользователей)
|
Ответ: Для тех, кому в блице внезапно не хватило браузера, word и тд
Сообщение от ABTOMAT
Запустил, появляется Малевич маленький и закрывается тут же.
Винда 10 (обновления последние), офис 2010
|
Хм, а ты run.exe запускал? или bin.exe?
bin напрямую не запустится (Graphics3d запускается запускается с параметрами командной строки), которые передает run.
AppTitle "SCL.auto"
param$ = CommandLine$()
num_p = parsecount (param$, "/", 0)
If num_p <> 2 Then End
dw = Int(parse$(param$, "/", 1, 0))
dh = Int(parse$(param$, "/", 2, 0))
Graphics3D dw, dh, 32, 2
Это я так имитирую развернутое окно. run берет системные метрики: из клиентской области рабочего стола минусует высоту шапки окна и толщину рамки окна и с этими dw и dh запускает блицевский файл. Поэтому если не запустилось через run.exe, это уже странно...
$dw = _WinAPI_GetSystemMetrics(16) - 2 * _WinAPI_GetSystemMetrics(6)
$dh = _WinAPI_GetSystemMetrics(17) - _WinAPI_GetSystemMetrics(6) - _WinAPI_GetSystemMetrics(7)
ShellExecute ('bin.exe', string($dw) & "/" & string($dh))
|
(Offline)
|
|
19.10.2016, 00:42
|
#4
|
Быдлокодер
Регистрация: 05.07.2009
Адрес: Проспит
Сообщений: 5,024
Написано 2,312 полезных сообщений (для 5,349 пользователей)
|
Ответ: Для тех, кому в блице внезапно не хватило браузера, word и тд
У меня появляется тоже что на скрине выше.
Не разбирался, но прикольно.
Блиц жив!
P. S. Win7 x64 SP1
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
19.10.2016, 01:07
|
#5
|
Разработчик
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений (для 369 пользователей)
|
Ответ: Для тех, кому в блице внезапно не хватило браузера, word и тд
Сообщение от Arton
Блиц жив!
|
Это фигня, мне тут нужно web-приложение для малого количества пользователей (около 10-20), я вот думаю, может нафиг изучать канвасы, webGL и тд. Сделать быстрый стриминг: запускать блиц на серваке в отдельной песочнице для каждого пользователя, картинку разбивать на много сегментов по форме гуи и отправлять пользователю только те сегменты, которые изменились (сжимать их хорошенько). А у пользователя показывать эти сегменты в браузере. По идее в стриминге игр (через видео) проблема в том, что изображение динамично меняется, а в стриминге программ вообще с этим проблем не должно быть. Фотошоп же стримили подобным образом. А действия в гуи вообще часто повторяются, поэтому картинку можно держать в кэше, анимации оставить минимум... И на смартфон таким же образом портировать через браузерное приложение.
PS. Я не упоротый, просто меня в дрожь бросает от современного фронтенда https://habrahabr.ru/post/312022/
Это можно в отдельную тему - как сделать сайт на блице...
UPD: Опередили меня http://evoclouds.com/, не говоря уже о корпоративных решениях Citrix XenApp и Microsoft App-V.
Ну а чему тут удивляться, когда Microsoft запилила ядро Linux в Windows 10 и допиливает приложение для портирования iOS и Android приложений в винду за 5 минут, а Google запускает приложения Android в браузере. Виртуализация!
Из тех, что я нашел, лучше всего показался этот сервис https://www.rollapp.com/ Выдерживает большой поток пользователей, есть бесплатная версия. Но видно по артефактам, что картинка перерисовывается полностью и анимация приложений не упрощается и гуи не кэшируется, значит в принципе можно еще ускорить и избавиться от артефактов при этом.
Кто-нибудь встречался с сервисами лучше?
Блендер в браузере:
Последний раз редактировалось DarkInside, 19.10.2016 в 05:47.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
19.10.2016, 06:03
|
#6
|
Элита
Регистрация: 16.01.2010
Адрес: Новосибирск
Сообщений: 2,158
Написано 502 полезных сообщений (для 1,012 пользователей)
|
Ответ: Для тех, кому в блице внезапно не хватило браузера, word и тд
Все же думают, что он только усложняет себе жизнь?
Тебе нужен VDS сервер на винде, но беда - не у всех есть видеоускорители (или дороговато), а у сервисов, типа который ты нашел - так вообще редкость.
Т.е твоя прога на нем даже не стартанет=)
Не усложняй.
Вон, мока тебе сейчас PlayCanvas посоветует. Хотя он пропал куда-то.
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
19.10.2016, 06:19
|
#7
|
Разработчик
Регистрация: 08.08.2011
Сообщений: 505
Написано 191 полезных сообщений (для 369 пользователей)
|
Ответ: Для тех, кому в блице внезапно не хватило браузера, word и тд
Сообщение от RegIon
Тебе нужен VDS сервер на винде, но беда - не у всех есть видеоускорители (или дороговато), а у сервисов, типа который ты нашел - так вообще редкость.
Т.е твоя прога на нем даже не стартанет=)
Не усложняй.
Вон, мока тебе сейчас PlayCanvas посоветует. Хотя он пропал куда-то.
|
Не, это я просто смотрю, какие есть сервисы и что они предлагают. Если бы я такое делал, то на своем серваке - на работе стоит с двумя xeon e5 2620 и tesla c2075 (старенькая, конечно, но поток для 20 пользователей сжимать пойдет с каким-нибудь продвинутым кодеком). Бэкенд в любом случае под виндой. А для фронтенда лень разбираться с html5, канвасом (хотя там вроде просто всё), да и есть уже по тому приложению наработки по интерфейсу, заново делать придется. А то, что я предлагаю - это по сути 200 строчек кода в совокупности.
В общем, надо подумать...с другой стороны канвас тоже интересно изучить.
|
(Offline)
|
|
04.11.2016, 12:58
|
#8
|
ПроЭктировщик
Регистрация: 08.05.2011
Сообщений: 143
Написано 46 полезных сообщений (для 219 пользователей)
|
Ответ: Для тех, кому в блице внезапно не хватило браузера, word и тд
Win7, все работает, здорово!
__________________
|
(Offline)
|
|
Сообщение было полезно следующим пользователям:
|
|
Ваши права в разделе
|
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения
HTML код Выкл.
|
|
|
Часовой пояс GMT +4, время: 05:33.
|