Вверх ↑
Этот топик читают: Гость
Ответов: 253
Рейтинг: 0
#16: 2021-11-09 15:59:37 ЛС | профиль | цитата
Всем огромное спасибо за помощь. Получилось то что хотел)
Gunta писал(а):
Попробовал, всё передаётся и принимается
У меня была странная проблема. Если запускать сервер и клиент просто через WinExec как консольное приложение, то через какое-то время программа зависала и вылетала.
Я просто сделал два Bat(ник) в них прописал параметры запуска. сервера и клиента.
WinExec поставил как просто запуск приложения с режимом запуска SW_HIDE

Ну а дальше просто манипуляции с окном проигрывателя ffplay (при подключении меняет его размер и переносит в угол экрана+поверх всех окон+прозрачность).


Add(MainForm,14700257,287,161)
{
Width=316
Height=119
Visible=1
Caption="RC"
BorderStyle=6
Icon=[ZIP3E08010078DAED9D7B4C5BD71DC7CDA842F74CAB5553A54E4A376D125A3B690F2DAAA26956824969D6A65952076CDA406C4242208426244078D8407805DBF71202242401736D67E161D8D269D5346961EB5A69EA1FEB3645DDB44DCAD6754FADA3D2B2D2847277CEA526C717DBF7FA75AF1DBEDFE8C4F911BFEEF99CFB3BDF73EEB907832187FC713A0DE4EF470DF9F7E7183E633018F249213FA23F947E2E89FC1F04411004411004411004411004411004411004411004411004411004A5523F12FA3F3EE7E7BE3233E1DE3117F03C1314FA1F17A5D56BD0BDA2A929C78699C0D9FCA08FDB39E7E78F93C70B41C1737DD6CFFF85FC7B993C8AE1857B8B94A66B171C1F43ED65871C0EC747E6C6B947A77D9EED41BFA77AD6C70F047DFC0F09DF3F90C73B6B192B97A09FBB3113E0BF88DACD4C7D5F38FBB95981EB228C5F27ACDE4B84B1621BF0717F9EF2BA1F416D67D6B91E14B89E591FF77E824CC5C0C51EF1BCE794E8EA38223A4EEC17EB0F9BC513D5C5E250FFC948CF7F09B59E41EC7D9E39B59CAF5CEA1547F966D1DD7954749EB4499C0FED7B4AACB016462D97071D11DE8BFF066A5F7F11A6CE48ACBF7BB94FBC38D0227A4ED7891D8D76722EEF15ABCA76C4E41CAD743655ACE52F703C6A5F671F3F7EE661C27FB59F9FF2BAC839BD5F3C5CFEED8438472B7595BBD7E6131FF72B10D0F9DC17B8069649CBB11752CA9D2D57C7FAE46DE083D989C14F8382AEB9FF5A88C7F4845B3C50BA3D6DFC87FA1B22780A6E3728E8CAFF17ACB753F271A142DB49D351ABD8FCE2F3E2C1178A12F600337EEE2C28E8CAFF1596071DB72971A4BCC7CE39575FE31FED16ABF73F9D9007209FFF6B50D04FF4FC6379D0F1BBF2797C407A6E4F6B95E41569DEF09C3E9AB00708045C0F81844EFC056E57583E163C8A633C3ABF439F4BCFF9CAE79F1427C7FBA5BE1D1E20FB343EEEB83FE8E7DE6579B437D86232A4FD7E28EF7B873B54F71BD13CC02C3C80BE1EC0CFF9581EA37C8BAA3E6062A45314CE9F16BB9A2B939A078007D05784C1D3F239DE54CFFF2879806BF000FACD014E393610E6EFB04C3A1A2B349D079811DC7B4042CF1CC08DB13C2E0EB4A68D3F3C40067A00C15D24EF03D48CE953752D20E8E3E10174D4F5EB8EFB08837FB14CA8C78307584F7381FC28CBE4F2609BC61E808707D051733EBE40DE07D4D89ED1CC0390CF1B04053DC701E65CC2E0EF2C9378C6F6F17980EF445A0FF01B50D07D1C30C432A1D779E001D611FF09B751DE071CB1EFD4CC0304037C0928E8A795B5A0DCDB2C93EE96435A7A80574041E71CE0F30CB04CC687DAB5F3002BEB421B4041C7718030B045DE071C3DB04B2B0F403F6F39E8F38C4E5FF13C46F2D17D20A2B972880FFC13CBA4B7AD4AC33581770BBD7744ED7BD92DA64552FE4ACACFECD682DEF2E2AD5B8032D1B920CEC572A0D77AB5BB1690BAF107690B37ECC505C5201AE75C80D7BD59CE82F6D75A7900F61E94947C96C5F4B2D5FACD0741361E1FC8FF9165D1E7A84E4B0EA08C63DD6FA6767DB152B1594CBFAFB418F341569D667C9E5E96055DEBA387074865DE21FDC15B6566E3C3A0ABACE909D757E52C5E3CB847730FD0EFACEEB35B0BCD8AC562DA6FB714B492C79F90723BFA679A5E339BBFB4018455F8403FF73B96C519678DE61E6056E0AAE2FDDE76B3F10BF612D35C8C3CD00CBA6AC6017C27CBC277A14B0F0FD097E8F7A79CA3F07FB7EC59E30320ACC05FE01F97F3385EF59CA61E2028709315D6AD5F2739FE243DA7A5319DC5F41F9AE36D966DBB94DB40C148C4CF2D31D581B0AA3EE006CB83DEFFA1A507183BE7FC204A3FBE64B36EDDA4F4FD6D3BB77C92B4957F44F201A0AB661CC8B5B13CE83E2F5A7A8068730084E9F7E2E8073AD7BEBEF08ED96CFC04082B8C0303AE7C3913BAE78B561E80CE01D0FBCC64EC97ED966D9BD51E4345A9E989489F59BE77DBD74058450EF0736FB04CE8DE3F5A7A00F91C80DD6AFA713CDFDF62313E142587EC005D55E380532C0FBA0794961E80DE73183697576C2A88F3107222F2B7169A4137B17100DDDB4D2B0F40F79F62CED937123906F04F4A39B33EFE7F2C13AEAB4E330FD0DFCE8E394C87C05F9771E07B69B936A7C20384D6019073FF161DCF81BFB69AF3BBBF1C894BC391124D3C40681D00F17D73891E03F827E5FF462371E1BB8FA9E2DADD72505A4748F71668ACB5C4ED0142B9865EE3017F8DC7FF827BCFAC8F5B8AC4E5EAD819C53DE3E8FAE1D0F563BA570CDD63A6B6E2D9B83C40680E20996BB7E01F9FA6A67A3706FD7C3B19FBDF8E757DAEB1D61A933FCDDDA1B503276B4AD6F879B51EA0AE72F7DBC91C0FF82BF0F6BA1F99F1734DD27E303EFEE7E4F1969A3DA1077A8EC7E44F733E3DEF29FBFEF61AE935ADC7F725E201DEB93AD6F772A2857A4879F10E77FC3299F71C3FE7BC76C05A3869B714A4B0145EB19514B6D3392BEDE6F8F93272AEFF3791BDDF29DB587D00EDEF69CE0F3D9FEE19259FCF8D6B3D4086959ED6F4DC1F43BCEE9B45454579E967EFD92BEDC59B441D9CAA2B8D792CB4BFA7399F9EF7B1D8AB590F906985B66DBA377A3ADA80CD5AF8ADB48EEBC6B907C8B9FFEF64EB80FA40EAF312DD1F3E54E8EB5D1DB561F9221BCA954B3DE4BBA76FCF2C5AD234A7539BCA7AA07B489FEDAD97F2413CEB76E9BA42BAAE80F625D9C43DDEBD53338EBFC0D592B1D5AB89F6FD4A79917A7FEA0F691FD9DE6017DBEACB44C78972697F31BA9670D8D548727D6FD6329797DEB6C359C53F24BAFFCFB49F7B8A8CF57E10F9F7B7A1A8FDFD385DCD07B38EBFCC0F6E27C7F137F04CBC9C3B732265F7AD68CD5F9AF3BBECF93CC905FF4CA60EE8DE312DC7F6ADDB72ECD09EACE5BF9207385B32FCD3717D783D17EDE77FDD1F4DC617CE08EEB4ED1F06FE9A5DF37F15FDB9F61E5238DFB9664E4D9F6B7FDC2C98E853A6275C61FBB0EBB3EE8F9BD4B2DD7B873B9647DC8D7786FA1B6ECBCB05AE7989AE3B5D4F6D80CD01F7327F7A8D50ED1E43F4778EAD9776C05E27D5833F19035C4AF7310EBB1AE2F64235B69DEBA20DE8CD9FF4FF4DE93C3E7ADD48EDEF1C8C9407C03FBD9AF67A1E4BE77CB0E774DD723263A27B3D07E8CD3FDD1EA0BDC1762B19FEC413BE0FFEE95520D0F320C9016FA6E3F8DAEACB1692E13FE2695AB8A7FB80009F11EB13A53640F240AAFB02F0CF0EFEAC1F903C211917D0F63036E8F82D6510AD4C8EF7BF24B59B28A5B5BECC9BCC5AC911779337D6FB6762098C76FF34569D79873B5E5F7DBE6FE0894C5E334C19445DBB566272605575843AB3169A63ACF97C2DD1FBDB32893FD8C7CF9FB22F2DDAFCA96C3A16BAAF867C1FBE728BE949508E5567C6CF46DABFB0B434BBD8431004411004411004411004411004411004411004411004411004411004411004411004411004411004411004411004411074572214B7E6C3C39B06231B2E180C9BD8D869306C64C2654378BC44E2BC18F162843837C938278E7829426C88112FAB891DCC0FE28D497D8655B8523C6F0807322FAB9079E93CC863701AC20E7925BEFB15165662A32CDE248B378657E84D59BC98C7C686DCA5BCB00A95C779CBB9D162A942372AC49BC4A8B118E9FF8DD1E32559BCB0523BB9ECDB8594F7E1CB43CAFDF0E54CBC284B474AF1B23C7DCDCBE29BB27841215ED4385E8A11E78AE107981B6AD06C7CB7E9CC4B8D6E71B569CD4B8D7271B529CE3B90ACA198FA3F7F2521D5]
Position=1
Point(onClose)
Point(doVisible)
link(onCreate,3454486:doEvent1,[(408,181)(408,174)])
link(onClose,6309816:doEvent1,[])
}
Add(WinExec,15228189,364,105)
{
FileName="connect.bat"
Mode=0
Point(doConsoleExec)
Point(onConsoleResult)
Point(onConsoleError)
Point(doConsoleTerminate)
}
Add(WinEnum,13109021,315,329)
{
link(onFindWindow,5933740:doEvent1,[])
link(Caption,9544710:getVar,[])
}
Add(Timer,3769286,266,336)
{
Interval=500
link(onTimer,13109021:doFind,[])
}
Add(Hub,5933740,364,329)
{
OutCount=4
link(onEvent1,3769286:doStop,[(390,335)(390,346)(254,346)(254,349)])
link(onEvent2,11243653:In,[])
link(onEvent3,8153074:In,[(394,349)(394,353)])
link(onEvent4,12828234:In,[(396,356)(396,370)])
}
Add(SizeWindow,2675936,511,406)
{
link(Handle,473412:getVar,[])
}
Add(PosWindow,1498725,504,462)
{
link(Handle,9564064:getVar,[])
}
Add(ChildForm,1388592,756,287)
{
link(onEvent1,1854201:In,[])
link(onEvent2,8874906:In,[(796,300)(796,307)])
link(onEvent3,10016420:doWork1,[(793,307)(793,328)(709,328)])
link(onEvent4,13521957:In,[(796,314)(796,321)])
}
BEGIN_SDK
Add(EditMulti,15992271,21,21)
{
EventCount=5
WorkCount=5
VarCount=3
Width=363
Height=221
link(doWork1,6856932:doVisible,[(28,27)(28,125)])
link(doWork2,7040752:doData,[(95,34)(95,90)])
link(doWork4,9990788:doOff,[(101,48)(101,342)])
link(doWork5,9990788:doOn,[(101,55)(101,349)])
link(Var1,7810331:Text,[(27,196)(202,196)])
link(Var2,8229969:Text,[(34,196)(251,196)])
link(Var3,8479160:Text,[(41,230)(419,230)(419,415)(797,415)])
}
Add(MainForm,6856932,84,91)
{
Left=35
Top=105
Height=227
Visible=1
Caption="Seting"
Point(doVisible)
}
Add(TrackBar,10564641,168,42)
{
Top=158
Width=384
Align=4
Color=-16777215
Max=255
Min=20
Position=100
ThumbLength=15
PageSize=20
link(onPosition,13619700:doWork2,[])
}
Add(Edit,7810331,196,121)
{
Left=10
Top=35
Text="500"
}
Add(Edit,8229969,245,121)
{
Left=70
Top=35
Text="345"
}
Add(Button,13343746,147,163)
{
Left=135
Top=35
Width=230
Caption="Изменить размер окна "
link(onClick,15992271:onEvent3,[(281,169)(281,41)])
}
Add(Button,3695786,301,72)
{
Left=15
Top=75
Width=355
Height=35
Caption="Закрыть"
link(onClick,15992271:onEvent2,[(337,78)(337,34)])
}
Add(DoData,7040752,168,84)
{
link(onEventData,13619700:doWork3,[(221,90)])
link(Data,10564641:Position,[])
}
Add(HubEx,13619700,217,42)
{
link(onEvent,15992271:onEvent1,[(362,48)(362,27)])
}
Add(Edit,8479160,791,371)
{
Left=315
Top=265
Align=2
Text="udp://127.0.0.1:3535"
}
Add(LED,9990788,182,329)
{
Width=334
Height=15
Align=2
Shape=1
ColorOn=65280
ColorOff=32768
Point(onMouseEnter)
}
Add(Button,15033200,306,310)
{
Left=15
Top=115
Width=355
Height=30
Caption="Подключится"
link(onClick,15992271:onEvent4,[(361,316)(361,48)])
}
END_SDK
Add(LineBreak,5822681,273,546)
{
Caption="pozr"
link(Out,11287412:doAlphaBlendValue,[])
Primary=[1854201,532,-259]
}
Add(Switch,865820,630,287)
{
DataOn=String(1)
DataOff=String(0)
link(onSwitch,10927517:doPosition,[])
}
Add(TrackBar,10927517,672,287)
{
Left=425
Top=220
Visible=1
Max=1
link(onPosition,1388592:doWork1,[])
}
Add(MultiElement,1406950,588,287)
{
link(onEvent1,865820:doSwitch,[])
}
BEGIN_SDK
Add(EditMulti,8241818,21,21)
{
EventCount=1
}
Add(Keyboard,1934213,133,63)
{
Key=122
link(onReadKey,2661036:doCompare,[])
}
Add(Timer,1129117,84,63)
{
Interval=50
OverCall=1
link(onTimer,1934213:doReadKey,[])
}
Add(If_else,2661036,182,63)
{
Op2=String(1)
link(onTrue,5981210:doEvent1,[])
}
Add(Keyboard,6408665,133,105)
{
Key=122
link(onReadKey,4799758:doCompare,[])
}
Add(Timer,2281518,84,105)
{
Interval=50
OverCall=1
link(onTimer,6408665:doReadKey,[])
}
Add(Hub,5981210,231,63)
{
link(onEvent1,8241818:onEvent1,[(283,69)(283,27)])
link(onEvent2,1129117:doStop,[(257,76)(257,64)(72,64)(72,76)])
}
Add(If_else,4799758,182,105)
{
Op2=String(1)
link(onFalse,1129117:doTimer,[(226,118)(226,94)(72,94)(72,69)])
}
END_SDK
Add(LineBreak,16359269,154,154)
{
Caption="exit"
link(Out,14613839:doEvent1,[])
Primary=[8874906,651,147]
}
Add(MultiElement,16076358,756,343)
{
link(onEvent1,16724946:In,[])
link(onEvent2,14261451:In,[(793,356)(793,363)])
link(onEvent3,7368216:In,[(793,363)(793,377)])
link(Data1,1388592:Var1,[])
link(Data2,1388592:Var2,[])
}
BEGIN_SDK
Add(EditMulti,4141928,21,21)
{
EventCount=3
WorkCount=1
DataCount=2
link(doWork1,11089791:doOperation,[(63,27)(63,97)])
}
Add(Screen,3412494,154,42)
{
}
Add(Math,3074110,161,91)
{
OpType=1
Op2=385
link(onResult,10182942:doEvent1,[(201,97)(201,111)])
link(Op1,3412494:Height,[])
link(Op2,11089791:Result,[(174,79)(150,79)(150,135)(111,135)])
}
Add(Math,11089791,105,91)
{
Op2=45
link(onResult,3074110:doOperation,[])
link(Op1,9088070:Var2,[])
}
Add(DoData,3978602,259,91)
{
Data=String()
link(onEventData,4141928:onEvent1,[(306,97)(306,27)])
link(Data,4141928:Data1,[(265,56)(27,56)])
}
Add(DoData,13005618,259,133)
{
Data=String()
link(onEventData,4141928:onEvent2,[(306,139)(306,34)])
link(Data,9088070:Var3,[(265,68)])
}
Add(Hub,10182942,210,105)
{
OutCount=3
link(onEvent1,3978602:doData,[(242,111)(242,97)])
link(onEvent2,13005618:doData,[(242,118)(242,139)])
link(onEvent3,4141928:onEvent3,[(272,125)(272,41)])
}
Add(GetDataEx,9088070,105,63)
{
link(Data,4141928:Data2,[(111,56)(34,56)])
}
END_SDK
Add(LineBreak,11790380,420,455)
{
Caption="w"
link(Out,2675936:doWidth,[(480,461)(480,412)])
Primary=[16724946,378,-112]
}
Add(LineBreak,3383531,420,469)
{
Caption="h"
link(Out,2675936:doHeight,[(480,475)(480,419)])
Primary=[14261451,378,-112]
}
Add(LineBreak,5301591,420,441)
{
Caption="o"
link(Out,1498725:doTop,[(477,447)(477,475)])
Primary=[7368216,378,-70]
}
Add(LineBreak,10049275,623,336)
{
Caption="start"
link(Out,16086664:doEvent1,[])
Primary=[11243653,-217,0]
}
Add(HubEx,10016420,705,336)
{
Angle=1
link(onEvent,16076358:doWork1,[(709,349)])
}
Add(WinTools,11287412,343,518)
{
Point(doAlphaBlendValue)
Point(doQuit)
link(Handle,2140094:getVar,[])
}
Add(Hub,16086664,658,336)
{
link(onEvent1,10016420:doWork2,[])
link(onEvent2,1388592:doWork2,[(693,349)(693,300)])
}
Add(Hub,14613839,210,154)
{
link(onEvent1,881270:In,[(231,160)(231,153)])
link(onEvent2,14700257:doClose,[(256,167)(256,188)])
}
Add(Switch,6037955,329,637)
{
DataOn=String(1)
DataOff=String(0)
link(onSwitch,14896142:doCompare,[])
}
Add(MultiElement,16564909,287,637)
{
link(onEvent1,6037955:doSwitch,[])
}
BEGIN_SDK
Add(EditMulti,8374984,21,21)
{
EventCount=1
}
Add(Keyboard,6956856,133,63)
{
Key=123
link(onReadKey,12739342:doCompare,[])
}
Add(Timer,9306907,84,63)
{
Interval=50
OverCall=1
link(onTimer,6956856:doReadKey,[])
}
Add(If_else,12739342,182,63)
{
Op2=String(1)
link(onTrue,4935914:doEvent1,[])
}
Add(Keyboard,112993,133,105)
{
Key=123
link(onReadKey,7080522:doCompare,[])
}
Add(Timer,2230757,84,105)
{
Interval=50
OverCall=1
link(onTimer,112993:doReadKey,[])
}
Add(Hub,4935914,231,63)
{
link(onEvent1,8374984:onEvent1,[(283,69)(283,27)])
link(onEvent2,9306907:doStop,[(257,76)(257,64)(72,64)(72,76)])
}
Add(If_else,7080522,182,105)
{
Op2=String(1)
link(onFalse,9306907:doTimer,[(226,118)(226,94)(72,94)(72,69)])
}
END_SDK
Add(MouseEvent,4614266,476,623)
{
Point(doPosition)
link(X,6926909:Var3,[(489,594)])
link(Y,6926909:Var2,[(496,600)(482,600)])
}
Add(If_else,14896142,371,637)
{
Op2=String(1)
link(onTrue,5606695:doTimer,[])
link(onFalse,5606695:doStop,[])
}
Add(Timer,5606695,413,637)
{
Interval=1
Enable=1
link(onTimer,4614266:doPosition,[])
}
Add(Memory,15773351,476,553)
{
Default=String(0)
}
Add(GetDataEx,6926909,476,589)
{
link(Data,15773351:Value,[])
}
Add(MultiElement,13080948,756,462)
{
link(onEvent1,7142515:doEvent1,[])
link(onEvent2,5636957:doWork1,[(807,475)(807,496)])
}
BEGIN_SDK
Add(EditMulti,10036946,21,21)
{
EventCount=2
Width=426
}
Add(Keyboard,13027830,133,63)
{
Key=120
link(onReadKey,2355125:doCompare,[])
}
Add(Timer,13935008,84,63)
{
Interval=50
OverCall=1
link(onTimer,13027830:doReadKey,[])
}
Add(If_else,2355125,182,63)
{
Op2=String(1)
link(onTrue,5013937:doEvent1,[])
}
Add(Keyboard,4455666,133,105)
{
Key=120
link(onReadKey,15358265:doCompare,[])
}
Add(Timer,15413577,84,105)
{
Interval=50
OverCall=1
link(onTimer,4455666:doReadKey,[])
}
Add(Hub,5013937,231,63)
{
OutCount=3
link(onEvent1,10036946:onEvent1,[(283,69)(283,27)])
link(onEvent2,13935008:doStop,[(257,76)(257,64)(72,64)(72,76)])
link(onEvent3,15564255:doSwitch,[])
}
Add(If_else,15358265,182,105)
{
Op2=String(1)
link(onFalse,13935008:doTimer,[(226,118)(226,94)(72,94)(72,69)])
}
Add(Switch,15564255,301,77)
{
DataOn=String(1)
DataOff=String(0)
link(onSwitch,10036946:onEvent2,[(390,83)(390,34)])
}
END_SDK
Add(Hub,7142515,833,462)
{
link(onEvent2,4795699:doBeep,[])
}
Add(Beep,4795699,875,469)
{
Freq=1500
Duration=100
}
Add(MultiElement,5636957,826,490)
{
link(onEvent1,1388592:doWork5,[(870,496)(870,408)(744,408)(744,321)])
link(onEvent2,1388592:doWork4,[(870,503)(870,409)(744,409)(744,314)])
}
BEGIN_SDK
Add(EditMulti,3817440,21,21)
{
EventCount=2
WorkCount=1
Width=302
link(doWork1,3419768:doCompare,[(28,27)(28,41)])
}
Add(Timer,8959381,168,112)
{
Interval=10000
Enable=1
OverCall=1
link(onTimer,16517257:doShellExec,[])
}
Add(If_else,3419768,35,35)
{
Op2=String(1)
link(onTrue,10285077:doEvent1,[])
link(onFalse,9583282:doEvent1,[(75,48)(75,76)])
}
Add(Hub,10285077,77,35)
{
OutCount=3
link(onEvent1,3817440:onEvent1,[(195,41)(195,27)])
link(onEvent2,8959381:doTimer,[(129,48)(129,118)])
link(onEvent3,10944034:doEnglishKbd,[(103,55)(103,87)(79,87)(79,118)])
}
Add(Hub,9583282,84,70)
{
OutCount=3
link(onEvent1,3817440:onEvent2,[(210,76)(210,34)])
link(onEvent2,8959381:doStop,[(133,83)(133,125)])
}
Add(WinExec,16517257,224,105)
{
FileName="C:\Users\egorart\Desktop\Новая папка\key.ahk"
Point(doConsoleExec)
}
Add(KeyboardLayout,10944034,91,112)
{
}
END_SDK
Add(WinExec,2630487,553,154)
{
FileName="start.bat"
Mode=0
Point(doConsoleExec)
Point(onConsoleResult)
Point(onConsoleError)
Point(doConsoleTerminate)
}
Add(Switch,7591753,182,518)
{
DataOn=String(1)
DataOff=String(0)
Default=0
link(onSwitch,6547179:doPosition,[])
}
Add(TrackBar,6547179,231,518)
{
Left=425
Top=220
Visible=1
Max=1
link(onPosition,11287412:doVisible,[])
}
Add(MultiElement,1440820,140,518)
{
link(onEvent1,7591753:doSwitch,[])
}
BEGIN_SDK
Add(EditMulti,522040,21,21)
{
EventCount=1
}
Add(Keyboard,12271127,133,63)
{
Key=121
link(onReadKey,10994463:doCompare,[])
}
Add(Timer,9380939,84,63)
{
Interval=50
OverCall=1
link(onTimer,12271127:doReadKey,[])
}
Add(If_else,10994463,182,63)
{
Op2=String(1)
link(onTrue,9782266:doEvent1,[])
}
Add(Keyboard,16108651,133,105)
{
Key=121
link(onReadKey,7633786:doCompare,[])
}
Add(Timer,603799,84,105)
{
Interval=50
OverCall=1
link(onTimer,16108651:doReadKey,[])
}
Add(Hub,9782266,231,63)
{
link(onEvent1,522040:onEvent1,[(283,69)(283,27)])
link(onEvent2,9380939:doStop,[(257,76)(257,64)(72,64)(72,76)])
}
Add(If_else,7633786,182,105)
{
Op2=String(1)
link(onFalse,9380939:doTimer,[(226,118)(226,94)(72,94)(72,69)])
}
END_SDK
Add(Hub,6309816,336,182)
{
link(onEvent1,15228189:doConsoleTerminate,[(357,188)(357,132)])
link(onEvent2,2632872:doFindName,[(420,195)(420,223)])
}
Add(LineBreak,7705223,224,259)
{
Caption="off"
link(Out,13820488:doWork2,[(264,265)(264,258)])
Primary=[12828234,189,105]
}
Add(LineBreak,7056658,231,105)
{
Caption="on"
link(Out,12896100:doEvent1,[])
Primary=[13521957,574,210]
}
Add(Message,6910342,553,189)
{
Message="Успешный запуск. \r\nДля подключения к трансляции F11\r\n"
}
Add(Hub,3454486,497,168)
{
link(onEvent1,2630487:doExec,[(543,174)(543,160)])
link(onEvent2,6910342:doMessage,[(535,181)(535,195)])
}
Add(EnumProcess,2632872,497,196)
{
Name="ffmpeg.exe"
Point(doFindName)
Point(onFind)
link(onFind,2632872:doKill,[(541,209)(541,213)(485,213)(485,216)])
}
Add(Hub,12896100,273,105)
{
OutCount=3
link(onEvent1,15228189:doExec,[])
link(onEvent2,2439567:In,[])
link(onEvent3,9132202:In,[(291,125)(291,132)])
}
Add(LineBreak,5274619,588,273)
{
Caption="on"
link(Out,865820:doReset,[(624,279)(624,300)])
Primary=[2439567,-294,-161]
}
Add(LineBreak,16467847,224,245)
{
Caption="on"
link(Out,13820488:doWork1,[])
Primary=[9132202,70,-119]
}
Add(ChildForm,13820488,273,245)
{
}
BEGIN_SDK
Add(EditMulti,7185130,21,21)
{
WorkCount=2
link(doWork1,16074911:doOn,[(53,27)(53,83)])
link(doWork2,16074911:doReset,[(53,34)(53,76)])
}
Add(MainForm,15674641,196,35)
{
Left=35
Top=105
Width=235
Height=35
Visible=1
BorderStyle=6
Position=1
Point(doVisible)
}
Add(Switch,16074911,84,63)
{
DataOn=String(1)
DataOff=String(0)
Point(onOff)
Point(onOn)
Point(doOn)
link(onSwitch,12821924:doPosition,[])
link(onOff,6569583:doStop,[(124,76)(124,132)])
link(onOn,6569583:doTimer,[(124,83)(124,125)])
}
Add(TrackBar,12821924,126,63)
{
Left=425
Top=220
Visible=1
Max=1
link(onPosition,15674641:doVisible,[])
}
Add(Label,3578212,266,42)
{
Width=235
Align=2
Caption="Подключаемся к трансляции"
Alignment=2
}
Add(GProgressBar,12360470,238,119)
{
Top=15
Width=235
Align=5
}
Add(CounterEx,13221354,189,119)
{
Step=2
link(onNext,12360470:doPosition,[])
}
Add(Timer,6569583,147,119)
{
Interval=10
Enable=1
link(onTimer,13221354:doNext,[])
}
END_SDK
Add(LineBreakEx,9544710,315,308)
{
Caption="WinName"
Type=2
}
Add(LineBreakEx,9911134,840,329)
{
Caption="WinName"
Type=3
link(_Data,1388592:Var3,[(846,327)(776,327)])
}
Add(LineBreak,11887522,273,532)
{
Caption="exit"
link(Out,11287412:doClose,[(323,538)(323,545)])
Primary=[881270,-35,-385]
}
Add(LineBreakEx,5043770,315,371)
{
Caption="IDWin"
Type=3
link(_Data,13109021:Handle,[])
}
Add(LineBreakEx,473412,511,385)
{
Caption="IDWin"
Type=2
}
Add(LineBreakEx,9564064,504,441)
{
Caption="IDWin"
Type=2
}
Add(LineBreakEx,2140094,343,497)
{
Caption="IDWin"
Type=2
}
Add(LineBreak,5033922,270,515)
{
Caption="Poplav"
link(Out,11287412:doPopup,[(336,521)(336,531)])
Primary=[8153074,140,-168]
}


Еще бы убрать заголовок окна ffplay)
карма: 0

0
Ответов: 4630
Рейтинг: 749
#17: 2021-11-09 18:16:57 ЛС | профиль | цитата
egorhay писал(а):
Я просто сделал два Bat(ник) в них прописал параметры запуска. сервера и клиента.
А что, просто запустить по doExec в RunEvent=Async и SW_HIDE - не работает?
карма: 26

0
Ответов: 253
Рейтинг: 0
#18: 2021-11-09 19:41:58 ЛС | профиль | цитата
Netspirit писал(а):
А что, просто запустить по doExec в RunEvent=Async и SW_HIDE - не работает?

Хмм. возможно так бы тоже работало. Просто через консоль doConsoleExec Программа зависала и вылетала. Я решил через батник попробовать.
Да и так удобнее ip менять, открыл прописал.
Решил проблему с
egorhay писал(а):
Еще бы убрать заголовок окна ffplay)

AutoHotkey Скриптом ищем окно и удаляем заголовок
IfWinExist, имя_окна
WinActivate
WinSet, Style, -0xC00000, A (если + поставит, вернет заголовок)
Стараюсь подробно расписывать, вдруг кому-то будет полезным.

Редактировалось 1 раз(а), последний 2021-11-09 20:30:22
карма: 0

0
Ответов: 4630
Рейтинг: 749
#19: 2021-11-10 11:52:22 ЛС | профиль | цитата
egorhay писал(а):
AutoHotkey Скриптом ищем окно и удаляем заголовок
В HiAsm есть компоненты для выполнения этой задачи (поиск окна, задание своего заголовка). Для установки конкретно стиля вроде нет, но для убирания заголовка, вероятно, подойдет WinBorders.

Редактировалось 1 раз(а), последний 2021-11-10 11:55:30
карма: 26

0
Ответов: 793
Рейтинг: 168
#20: 2021-11-10 13:49:05 ЛС | профиль | цитата
egorhay писал(а):
Просто через консоль doConsoleExec Программа зависала и вылетала

я так подозреваю что ты не удалил компонент Memo и он просто переполнялся и вешал всю программу.
По поводу всего остального.
FFmpeg позваляет делать практически всё с видео, аудио и изображениями.
Можно сразу менять размер видео и потом передавать его (применяется фильтр - scale=480x360)

ffmpeg -f gdigrab -framerate 25 -i desktop -vf scale=480x360 -preset ultrafast -vcodec libx264 -tune zerolatency -b 900k -f mpegts udp://192.168.1.45:48550
Для того чтобы убрать заголовок окна и рамку применяется параметр - "-noborder"

ffplay  -i udp://192.168.1.15:48550 -noborder

Также возможно устанавливать прозрачность изображения, параметр - colorchannelmixer=aa=0.5

У плеера ffplay есть горячие клавиши управления.
Управление:
- q / ESC — выход
- f — полноэкранный режим
- f / Пробел— пауза
- m — вкл/выкл звук
- 9 / / — громкость –
- 0 / * — громкость +
- s — покадровый просмотр
Для перемотки используются:
- стрелки влево/вправо — перемотка на 10 секунд
- стрелки вниз/вверх — перемотка на 1 секунду
- Page up / Page down — перемотка на пред/след часть или на 10 минут
Также можно перематывать нажатием правой кнопки мыши в области окна. Нажатие ПКМ в крайней левой части — перемотать в начало, в крайней правой части — в конец, а для остальных нажатий будет перемотка на процентное отношение позиции курсора.


P.S. Не обижайся но, твою схему очень трудно читать и понимать. Пока всё распутаешь ..
карма: 16

0
Ответов: 253
Рейтинг: 0
#21: 2021-11-10 14:03:44 ЛС | профиль | цитата
Netspirit писал(а):
подойдет WinBorders

Большое спасибо! У меня просто не было этого компонента.
При попытки обновить Hiasm вылетало куча проблема. Скачал Alternative build HiAsm обновил. и все появилось. Работает отлично!

Gunta, Вам огромное спасибо за наводку на ffmpag (ранее не слышал про него) Теперь буду знать и уметь) Потихоньку разбираюсь.

Про запутанность схем полость с вами согласен и совсем не обижаюсь! Меня не кто не учил как их правильно составлять. Интуитивно просто собирал, ну и то что находил на фуруме.
Если есть какой-то ресурс с информацией по качеству и правильности составления схем я с радостью изучу
Да и вообще хотелось бы больше изучить про Hiasm, каждый раз восхищаюсь как маленький ребенок когда случайно нахожу новый интересный компонент или интересную схему.
карма: 0

0
Ответов: 253
Рейтинг: 0
#22: 2021-11-10 15:24:52 ЛС | профиль | цитата
А можно как-то сделать чтобы окно ffplay было одновременно над всеми окнами(Поплавок) и так чтобы клики проходили сквозь окно. Надеюсь понятно сформулировал. Грубо говоря окно прозрачное и под ним есть элемент управления, можно на него как-то нажать? Или это проблематично?
карма: 0

0
Ответов: 793
Рейтинг: 168
#23: 2021-11-10 17:52:07 ЛС | профиль | цитата
egorhay писал(а):
А можно как-то сделать чтобы окно ffplay было одновременно над всеми окнами(Поплавок)

Я, конечно, понимаю, что инструкции для слабаков, но всё же. -alwaysontop
Для тестов
ffplay  -i -f gdigrab -framerate 25 -i desktop  -noborder -alwaysontop -vf scale=480x360 

egorhay писал(а):
так чтобы клики проходили сквозь окно

а вот с этим сложнее.

Редактировалось 5 раз(а), последний 2021-11-10 18:19:17
карма: 16

1
Голосовали:egorhay
Ответов: 253
Рейтинг: 0
#24: 2021-11-10 20:09:24 ЛС | профиль | цитата
Gunta писал(а):
Я, конечно, понимаю, что инструкции для слабаков, но всё же. -alwaysontop

Не не не )) Я с этим разобрался)
egorhay писал(а):
было одновременно над всеми окнами(Поплавок)

Это я просто уточняю, чтобы окно было поверх всех, и одновременно чтобы курсор был под ним) Либо окно пропускала через себя клик.
карма: 0

0
Ответов: 253
Рейтинг: 0
#25: 2021-11-11 00:03:27 ЛС | профиль | цитата
Пожалуйста можете еще нормально объяснить принцип работы UDP. Раньше работал только с TCP. Ищу информацию. там только понятия типа в чем разница.
Просто если с TCP все понятно. Есть сервер-клиент. Запустили сервер, открыли порт, дали ip:port клиенту он подключился. Вы обмениваетесь данными.
Если нужно прописал порт в роутере и "Брендмауэре Windows". И удаленный клиент может законеткиться к серверу.

А вот с UDP не понимаю. В случае ffmpeg Есть вещатель( Как я понял сервер ) он же должен прописать ip:port клиента и запуститься, а клиент должен прописать ip:port сервера чтобы подключиться. И не совсем понятно в тактиком состояние будет обмена в двух стороннем порядке.
и как правильно открыть порт, то есть его должен открыть и сервер и клиент?

Или я совершенно не правильно понимаю механику.
В данный момент вещею UDP через "Radmin VPN" аналог hamachi
Но хотелось бы понять как открыть UDP в сеть как с TCP
Чтобы любой желающий мог подключиться по ip:port и посмотреть трансляцию
карма: 0

0
Ответов: 793
Рейтинг: 168
#26: 2021-11-11 23:53:06 ЛС | профиль | цитата
egorhay писал(а):
Пожалуйста можете еще нормально объяснить принцип работы UDP. Раньше работал только с TCP. Ищу информацию. там только понятия типа в чем разница.

https://ru.wikipedia.org/wiki/UDP

А по поводу
egorhay писал(а):
чтобы окно было поверх всех, и одновременно чтобы курсор был под ним) Либо окно пропускала через себя клик.

Вот пример как можно сделать окно ffplay "прозрачным" для мыши:
Add(MainForm,2953706,126,112)
{
Width=438
Height=126
Caption="Прозрачная форма, не реагирующая на мышь"
DragForm=0
Point(Handle)
Point(PHandle)
link(onCreate,6616881:doEvent1,[])
}
Add(FindWindow,15114781,231,126)
{
ClassName="SDL_app"
SkipParam=1
link(onFind,6131835:doData,[])
}
Add(WinTools,4866552,336,98)
{
Point(doAlphaBlendValue)
Point(doEnable)
link(Handle,12106520:Var3,[(342,89)(328,89)(328,166)])
}
Add(DoData,6131835,280,126)
{
Data=Integer(150)
link(onEventData,4866552:doAlphaBlendValue,[])
}
Add(InlineCode,16601478,231,182)
{
WorkPoints=#11:doEX_Transp|
DataPoints=#6:Handle|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Debug,Windows;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|22: Handle : THI_Event;|55: Procedure doEX_Transp (var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|65:Procedure THiAsmClass.doEX_Transp (var _Data:TData; Index:word);|5:Begin|136: SetWindowLong(ReadInteger(_Data,Handle,0), GWL_EXSTYLE, GetWindowLong(ReadInteger(_Data,Handle,0), GWL_EXSTYLE) or WS_EX_TRANSPARENT);|4:end;|0:|4:end.|
link(Handle,12106520:Var2,[])
}
Add(Hub,6616881,189,126)
{
InCount=2
link(onEvent1,15114781:doFind,[])
link(onEvent2,16601478:doEX_Transp,[(221,139)(221,188)])
}
Add(GetDataEx,12106520,231,161)
{
link(Data,15114781:Handle,[])
}
Add(Button,10470304,126,161)
{
Left=20
Top=15
Width=110
Caption="Прозрачность"
link(onClick,6616881:doEvent2,[(165,167)(165,139)])
}


Запусти ffplay и схему и попробуй пощёлкать мышью...

Для тестов
Add(MainForm,6168681,357,98)
{
Width=620
Height=429
Caption="Прозрачная форма, не реагирующая на мышь"
DragForm=0
Point(Handle)
Point(PHandle)
link(onCreate,6616881:doEvent1,[])
}
Add(WinTools,4866552,518,91)
{
Point(doAlphaBlendValue)
Point(doEnable)
link(Handle,11362747:Var1,[(524,82)(447,82)])
}
Add(DoData,6131835,462,119)
{
Data=Integer(150)
link(onEventData,4866552:doAlphaBlendValue,[])
}
Add(InlineCode,16601478,441,175)
{
WorkPoints=#11:doEX_Transp|
DataPoints=#6:Handle|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Debug,Windows;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|22: Handle : THI_Event;|55: Procedure doEX_Transp (var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|65:Procedure THiAsmClass.doEX_Transp (var _Data:TData; Index:word);|5:Begin|136: SetWindowLong(ReadInteger(_Data,Handle,0), GWL_EXSTYLE, GetWindowLong(ReadInteger(_Data,Handle,0), GWL_EXSTYLE) or WS_EX_TRANSPARENT);|4:end;|0:|4:end.|
link(Handle,11362747:Var2,[])
}
Add(Hub,6616881,406,112)
{
OutCount=3
link(onEvent1,4866552:doPopup,[(431,118)(431,104)])
link(onEvent2,6131835:doData,[])
link(onEvent3,16601478:doEX_Transp,[(431,132)(431,181)])
}
Add(GetDataEx,11362747,441,137)
{
Angle=3
link(Data,6168681:Handle,[(363,142)])
}

Закрывать через диспечер

Редактировалось 1 раз(а), последний 2021-11-12 11:33:04
карма: 16

0
Ответов: 253
Рейтинг: 0
#27: 2021-11-12 15:59:53 ЛС | профиль | цитата
Gunta писал(а):

Вот пример как можно сделать окно ffplay "прозрачным" для мыши

Огромное спасибо) Получилось.
Не знаю правильно или нет. но дописал возможность выключать режим "Клик сквозь форму"


Add(MainForm,6168681,238,112)
{
Width=620
Height=429
Caption="Прозрачная форма, не реагирующая на мышь"
DragForm=0
Point(Handle)
Point(PHandle)
link(onCreate,6616881:doEvent1,[])
}
Add(WinTools,4866552,399,105)
{
Point(doAlphaBlendValue)
Point(doEnable)
link(Handle,11362747:Var1,[(405,96)(328,96)])
}
Add(DoData,6131835,343,133)
{
Data=Integer(150)
link(onEventData,4866552:doAlphaBlendValue,[])
}
Add(Hub,6616881,287,126)
{
link(onEvent1,4866552:doPopup,[(312,132)(312,118)])
link(onEvent2,6131835:doData,[])
}
Add(GetDataEx,11362747,322,151)
{
Angle=3
link(Data,6168681:Handle,[(244,156)])
}
Add(InlineCode,4502086,322,196)
{
WorkPoints=#11:doEX_Transp|12:doEX_Transp1|
DataPoints=#6:Handle|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Debug,Windows;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|22: Handle : THI_Event;|55: Procedure doEX_Transp (var _Data:TData; Index:word);|56: Procedure doEX_Transp1 (var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|65:Procedure THiAsmClass.doEX_Transp (var _Data:TData; Index:word);|5:Begin|136: SetWindowLong(ReadInteger(_Data,Handle,0), GWL_EXSTYLE, GetWindowLong(ReadInteger(_Data,Handle,0), GWL_EXSTYLE) or WS_EX_TRANSPARENT);|4:end;|0:|69: Procedure THiAsmClass.doEX_Transp1 (var _Data:TData; Index:word);|5:Begin|141: SetWindowLong(ReadInteger(_Data,Handle,0), GWL_EXSTYLE, GetWindowLong(ReadInteger(_Data,Handle,0), GWL_EXSTYLE) and not WS_EX_TRANSPARENT);|4:end;|0:|0:|4:end.|
link(Handle,11362747:Var2,[])
}
Add(Switch,4079365,280,189)
{
DataOn=String(1)
DataOff=String(0)
Point(onOn)
Point(onOff)
link(onOn,4502086:doEX_Transp,[])
link(onOff,4502086:doEX_Transp1,[])
}
Add(ChildForm,6796585,217,189)
{
link(onEvent1,4079365:doSwitch,[])
}
BEGIN_SDK
Add(EditMulti,15061766,21,21)
{
EventCount=1
}
Add(MainForm,16614817,35,105)
{
Left=35
Top=105
Width=190
Height=92
}
Add(Button,6893416,119,77)
{
Width=174
Align=2
link(onClick,15061766:onEvent1,[(236,83)(236,27)])
}
END_SDK

карма: 0

0
Ответов: 793
Рейтинг: 168
#28: 2021-11-12 20:55:43 ЛС | профиль | цитата
egorhay писал(а):
Не знаю правильно или нет.

Правильно.
А пример я бы сделал так

Add(MainForm,6168681,259,49)
{
Width=620
Height=429
Caption="Прозрачная форма, не реагирующая на мышь"
DragForm=0
Point(Handle)
Point(PHandle)
link(onCreate,4866552:doPopup,[(298,69)(298,111)])
}
Add(WinTools,4866552,315,98)
{
Point(doAlphaBlendValue)
link(Handle,12939580:Var3,[(321,89)])
}
Add(InlineCode,4502086,259,133)
{
WorkPoints=#15:doTransparentOn|16:doTransparentOff|
DataPoints=#6:Handle|
Code=#15:unit HiAsmUnit;|0:|9:interface|0:|29:uses kol,Share,Debug,Windows;|0:|4:type|28: THiAsmClass = class(TDebug)|10: private|0:|9: public|22: Handle : THI_Event;|59: Procedure doTransparentOn (var _Data:TData; Index:word);|60: Procedure doTransparentOff (var _Data:TData; Index:word);|5: end;|0:|14:implementation|0:|69:Procedure THiAsmClass.doTransparentOn (var _Data:TData; Index:word);|5:Begin|136: SetWindowLong(ReadInteger(_Data,Handle,0), GWL_EXSTYLE, GetWindowLong(ReadInteger(_Data,Handle,0), GWL_EXSTYLE) or WS_EX_TRANSPARENT);|4:end;|0:|73: Procedure THiAsmClass.doTransparentOff (var _Data:TData; Index:word);|5:Begin|141: SetWindowLong(ReadInteger(_Data,Handle,0), GWL_EXSTYLE, GetWindowLong(ReadInteger(_Data,Handle,0), GWL_EXSTYLE) and not WS_EX_TRANSPARENT);|4:end;|0:|0:|4:end.|
link(Handle,12939580:Var2,[])
}
Add(Switch,4079365,203,126)
{
DataOn=Integer(150)
DataOff=Integer(255)
Point(onOn)
Point(onOff)
link(onSwitch,4866552:doAlphaBlendValue,[])
link(onOn,4502086:doTransparentOn,[])
link(onOff,4502086:doTransparentOff,[])
}
Add(ChildForm,6796585,133,119)
{
link(onEvent1,14165339:doDeferredEvent,[(172,125)(172,76)])
link(onEvent2,4079365:doSwitch,[])
}
BEGIN_SDK
Add(EditMulti,15061766,21,21)
{
EventCount=2
}
Add(MainForm,16614817,35,105)
{
Left=35
Top=105
Width=190
Height=79
Caption="Пульт"
BorderStyle=4
Point(onClose)
Point(onHide)
link(onHide,15061766:onEvent1,[(74,139)(74,27)])
}
Add(Button,6893416,140,105)
{
Width=184
Align=5
Caption="Вкл. прозрачность"
Point(doCaption)
link(onClick,7955996:doSwitch,[])
}
Add(Switch,7955996,182,105)
{
DataOn=String(Выкл. прозрачность)
DataOff=String(Вкл. прозрачность)
link(onSwitch,11648948:doEvent1,[])
}
Add(Hub,11648948,231,105)
{
link(onEvent1,6893416:doCaption,[(256,111)(256,97)(130,97)(130,111)])
link(onEvent2,15061766:onEvent2,[(275,118)(275,34)])
}
END_SDK
Add(GetDataEx,12939580,259,84)
{
link(Data,6168681:Handle,[])
}
Add(DeferredEvent,14165339,203,70)
{
link(onDeferredEvent,6168681:doClose,[])
}

карма: 16

0
Ответов: 253
Рейтинг: 0
#29: 2021-11-13 00:09:22 ЛС | профиль | цитата
Спасибо, очень понятный и доступный пример! Теперь буду знать как можно сделать проще )

Еще вдруг кому-то будет полезным. Обратил внимание что ffmpeg создает колоссальную нагрузку на процессор. В наглую кушает 40-50% от моего Xeon E3-1220V2. В игре появились потери FPS.
Решением стало понизить приоритет процесса ffmpeg.
При этом стали терять FPS в ffmpeg)
Но если говорить не про игру, то понижение приоритета процесса это прям решение) Картинка плавная.
Но если есть очень прожорливый процесс(типа как игра) он начнет забирать FPS у ffmpeg.

Редактировалось 1 раз(а), последний 2021-11-13 00:35:49
карма: 0

0
29
Сообщение
...
Прикрепленные файлы
(файлы не залиты)