Тёмный

How To Send Inputs to Multiple Windows / Minimized Windows with Python. Or Die Trying 

Learn Code By Gaming
Подписаться 29 тыс.
Просмотров 67 тыс.
50% 1

Let's explore using SendMessage to send automated inputs to multiple windows at once, or to windows that are minimized or in the background. I'll share my progress and discuss the suitability of using this method for botting.
View this code on GitHub: github.com/learncodebygaming/...
Join us on Discord: / discord
Today I want to answer the most asked question on my channel:
- How do I send mouse and keyboard inputs to multiple windows at once
- How do I send inputs to a minimized window or background window
- How can I keep using my mouse and keyboard while also sending automated inputs?
I'm guessing most of you want to know how to do this because you've written a bot, and you want to run multiple bots at once, or you want your bot to run in the background while you continue using your computer.
And my initial reaction when I started getting this question was: just use virtual machines. You could have multiple VM's running in the background and those would be isolated from whatever you're doing on your main desktop. I've confirmed that this does work, but the problem is the performance of virtual machines is typically not very good. At least with Hyper-V, even basic games show considerable lag. You might be able to find better performance by setting up hardware graphics acceleration for your VM, but that's not the route I decided to explore today.
So what other options do we have?
About a year ago now, as I was working on my OpenCV series, I got a tip from a viewer telling me about this SendMessage() function he was using to send inputs to a window in the background. It's a Windows API function he was calling via pywin32, and it allows you to send messages, including mouse and keyboard inputs, to a specific window. And there's a couple StackOverflow discussions about SendMessage(), but other than that, there really isn't a whole lot I could find about working with this. So let's try it out and see what we can do with it.
I first tested a simple example with Notepad, and this gave me more problems than I was expecting.
The Notepad window has an inner window called 'Edit' that you need to target if you want to send inputs to the main text area. Even after I solved that, I wasn't able to get any results using WM_KEYDOWN and WM_KEYUP. Only by using WM_CHAR with ord() was I able to get text to appear in Notepad. Both SendMessage() and PostMessage() work this way.
Next I decided to take this to a simple browser game. I found that WM_KEYDOWN and WM_KEYUP did work in Chrome, and there weren't any inner windows to worry about either.
The first challenge I faced here was how to press down multiple keys at the same time. If you sleep() between WM_KEYDOWN and WM_KEYUP that's blocking, so other code can't execute at the same time. You could solve this by using threading, but this time I decided to use sched to schedule each command in queue, and then run that queue once it's been built. This worked really well for one game, so now I wanted to scale it up to play games in multiple windows.
Unfortunately in Chrome, I couldn't get SendMessage to work when the window wasn't focused. So I ended up using SetForegroundWindow() to quickly bring focus to the window that I'm sending the next command to. This does work, but because setting the foreground window takes a little bit of time you have to be careful to not have two commands run at the same time. I wasn't very careful about how I avoided those collisions here, so that's something you'll want to develop if you plan on using this method of quickly swapping between windows. The more copies of the game you're running, the more likely you are to run into these conflicts.
As a side note, if you're going to be swapping window focus anyway, you might find better performance using SendInput(), or even just PyAutoGUI or PyDirectInput as you normally would. The only benefit that SendMessage() or PostMessage() give us is that we can target a specific window handle with them.
So now I kinda have a solution for botting in multiple windows at once, but we still have the issue of wanting to send inputs to minimized or unfocused windows so that we can run our bots in the background.
I found that how SendMessage and PostMessage behave are very dependent on what program you're trying to automate. For example with Firefox, I was able to send inputs to Mario even when the browser was minimized or in the background. But this wasn't quite a perfect solution because Firefox was laggy compared to Chrome, and I couldn't get SendMessage to work with multiple tabs or multiple windows in Firefox unless I resorted back to our SetForegroundWindow method.
Continue reading here: learncodebygaming.com/blog/ho...
#programming #python

Опубликовано:

 

3 май 2021

Поделиться:

Ссылка:

Скачать:

Готовим ссылку...

Добавить в:

Мой плейлист
Посмотреть позже
Комментарии : 216   
@jinnie7882
@jinnie7882 2 года назад
I found your channel just recently and gotta say your little series on writing a bot got me back into coding and I'm having a lot of fun! :) So thank you kind sir
@umapessoa6051
@umapessoa6051 2 года назад
Hi, you don't upload videos in a while, hope you're fine, your videos are pretty helpful, please if you're reading this, we need more content like yours, make more videos when you can.
@pabloortega1569
@pabloortega1569 Год назад
I came here to say almost the same. I hope you're doing fine. Your videos have been helping me a lot. You're amazing!!! Thanks a lot for all the videos you've made.
@Kanjas19
@Kanjas19 Год назад
I'll leave another comment to support this. This channel is way too useful to learn anything. I hope someday you comeback man.
@cesarpadilla8358
@cesarpadilla8358 Год назад
cant let this comment die
@SapienciaEstoica
@SapienciaEstoica Год назад
just notice he didn't upload anything in one year. I really hope hes okay, his channel is a hidden gem. He can explain everything so simple yet so full of useful information.
@DanielXavierDosReis
@DanielXavierDosReis Год назад
Came here too to show support to Ben! Please update us about you, hope you're doing fine
@compinerd732
@compinerd732 Год назад
the way you teach and show how you go about solving a problem and give us tools at hand and show us how you figure out stuff is exceptional. i thank you for all the work you've put in your videos so far.
@NobungaGames
@NobungaGames Год назад
Please Don’t stop uploading!!! You have probably the most helpful AI videos I’ve found so far! Please keep going
@henrypark2472
@henrypark2472 Год назад
Don’t know if you stopped making videos but, just found your channel and learnt so much useful stuff that I’ve always wanted to figure out! Thanks for the great info and I hope to see new videos from you in the future.
@marceloviana7622
@marceloviana7622 2 года назад
hey bro, please dont quit, the most pleasure content of yours is how to make bots, so you should focus on that. Your audience will increase easily, focus on various types of games.
@Keklmao
@Keklmao 2 года назад
I just wanted to come to your newest video to let you know i love the way you teach , and have been learning alot! thank you!
@vitordomingos8569
@vitordomingos8569 3 года назад
yoooooo, felt actually that we were " Learning" and exploring together XD amazing man,
@kentalontaga6850
@kentalontaga6850 3 года назад
Thank you!! ive been waiting for your uploads
@LavonRich
@LavonRich Год назад
Subscribed to you some time ago. Never regretted it. Hope you are well.
@359w
@359w 2 года назад
Thanks a lot for all your videos. You have helped me a lot with deeper understanding of some of the subjects. THANKS A LOT!
@user-wo2sx3gi5z
@user-wo2sx3gi5z Год назад
Hey, just want to say thank you for making these videos! They are so much helpful :)
@ktc50222
@ktc50222 Год назад
Bro your content is the best python content I have ever had the pleasure to watch. I have learned so much from you in like 4 videos. I know you haven't uploaded in a while but I hope you're doing well. All the best my man, cheers!
@CommentFrom
@CommentFrom 2 года назад
You got any plans for more videos? Really loved everything you've uploaded so far
@aarongill1075
@aarongill1075 2 года назад
Subscribed when you said "I don't know lets figure it out." Thanks for these videos
@juliopeguero5665
@juliopeguero5665 2 года назад
lol same, really cool to see
@Alexandurs
@Alexandurs 3 года назад
This was very enlightening, thanks!
@LearnCodeByGaming
@LearnCodeByGaming 3 года назад
Thanks Alex! 😀
@dariusz4434
@dariusz4434 5 месяцев назад
This was really helpful, great work!! Hope you are doing well!:)
@nazalaMV
@nazalaMV Год назад
Hi, I'm grateful for your video. It explained well the limitation usage using python that I'm also have the same issue as yours. I can't get around to make my python program to run through a minimized window. But anyway, thanks a lot for your explanation. I'm hoping to get new updates either from this channel or this comment section for how to using python and doing automated on a minimized apps.
@jtvalente
@jtvalente Год назад
Great video, this helped me automate key presses in a ps4 game (using remote play linked with my computer)
@espvolt4833
@espvolt4833 2 года назад
abandoned looking for something like this for months this is sick
@Linda-mj2cz
@Linda-mj2cz 2 года назад
Love the new hairstyle :$ Great video!
@Currychicken5
@Currychicken5 3 года назад
Oh my god. This is what I needed THANKS 😀
@lotto5883
@lotto5883 2 года назад
This is way too specific but its exactly what I'm looking for... Thanks for uploading
@kex0
@kex0 Год назад
Specific? The amount of people asking how to do this would suggest the opposite.
@secretarybailey770
@secretarybailey770 Год назад
love your work bro haircut looking wicked too
@thangdinh4838
@thangdinh4838 2 года назад
You have the most interesting coding instruction channel
@simonsmaster12
@simonsmaster12 2 года назад
Thanks for the informations. Now i can start my project.
@canal_conectando
@canal_conectando 2 года назад
Where are you? Show up again! I love your videos! Your channel is one of the best around here.
@ByteBeacon9660
@ByteBeacon9660 Год назад
I was trying to do this for a browser game that I was automating. In the middle of trying this I found a solution specific to browsers. You can use playwright or selenium to automate a browser. This includes sending mouse and keyboard inputs on specific elements and/or coordinates of canvases. These libraries include a screenshot function which you can pair up with opencv and do image recognition. This can all work in the background. The browser doesn't have to be maximized.
@brandonesqueda4469
@brandonesqueda4469 Год назад
Do you have an example? I just need to have 1 button be pressed in 2 browser's
@cesarpadilla8358
@cesarpadilla8358 Год назад
hey bro, hope you are ok pretty thankful with the vids you uploaded
@gbitencourt
@gbitencourt 3 года назад
Man, the level of this content is so high.
@gm4984
@gm4984 2 года назад
I think that writeprocessmemory might just be the solution. In theory there's a 1byte or 4byte value that determines if the window is active or not. This value is then used to allow/disallow inputs, if the value is flipped to a 1 then it will start reading keyboard inputs. I worked a lot with assembly and many applications prevent custom inputs, but they do still allow modified Xinput inputs, and that can also be an alternative.
@gerooqelvis3466
@gerooqelvis3466 Год назад
could you elaborate more on this?
@Kanjas19
@Kanjas19 Год назад
this is really helpfully.thank you so much.
@ethanstephanis4034
@ethanstephanis4034 3 года назад
Man I’m glad you made this video I would have been going down the rabbit hole trying to do this for hours lol. I instead spent the entire day trying to get modded minecraft to run in a VM and finally got it to run at around 10 FPS which is good enough for my code to do it’s thing
@kan8602
@kan8602 2 года назад
2b2t?
@ethanstephanis4034
@ethanstephanis4034 2 года назад
@@kan8602 nah fishing in a pixelmon server. Ended up getting banned lol
@OlofMemester
@OlofMemester 2 года назад
Hey I know you probably won't see this but I am trying to write a bot for Minecraft as well and for some reason when I try to input the keys it doesn't release them. Did you encounter this issue and do you know how to fix it?
@ethanstephanis4034
@ethanstephanis4034 2 года назад
@@OlofMemester dang I replied but for some reason it didn't go through. To sum up what I said in my previous reply that I didn't acutally post There's multiple ways to simulate key presses and I think I used pydirectinput for my script. You should be able to pip install pydirect input, import it, and put pydirectinput.press('esc') I can't check that I used pydriectinput or that that works so if for some reason it gives the same bug you could try pydirectinput.keydown('esc') pydirectinput.keyup('esc') ru-vid.com/video/%D0%B2%D0%B8%D0%B4%D0%B5%D0%BE-LFDGgFRqVIs.html&ab_channel=LearnCodeByGaming video on pydirectinput
@zosyn320
@zosyn320 2 года назад
Hey man, hope you're doing well, love your videos, hope you come back and post some more ! :)
@baquant
@baquant 3 года назад
I hate how I can recall those stack overflow pages.
@LearnCodeByGaming
@LearnCodeByGaming 3 года назад
lol
@mzmahid1212
@mzmahid1212 2 года назад
is it possible to input mouse clicks too while the window is minimized or inactive.
@VaticansAssasian
@VaticansAssasian 2 года назад
@@mzmahid1212 yes there is an example at object detecting playlist
@WholesomeContentForYou
@WholesomeContentForYou 3 года назад
love the videos keep it up!
@HolyShitILovePie
@HolyShitILovePie 2 года назад
i want to soak up all of your knowledge!
@SkuldVi
@SkuldVi 11 месяцев назад
best code channel
@Sockheadrps
@Sockheadrps Год назад
keep it up, im subbing!
@snowmanstan3933
@snowmanstan3933 3 года назад
You should do a series about ML playing a video game. That would be pretty dang cool
@theonecallednick
@theonecallednick 2 года назад
Where were you when I was struggling to do all of these? XD I guess i wasn't looking hard enough so that was my fault. Love the video though and learn a lot of things!
@theonecallednick
@theonecallednick 2 года назад
Well I'm still struggling to do it xD. I just did some workarounds accepting slme comprises lol
@Vylerr
@Vylerr 2 года назад
i have ran into this problem too and have been on all of those stack overflow pages. damn
@s1dev
@s1dev 3 года назад
man, you are just awesome. I am having trouble with pyautogui when importing from a different .py file and it just didn't work. also, I wanted to know if I could resize a window(resize x,y) and position it on my screen with code?
@taoufikidrissi835
@taoufikidrissi835 3 года назад
Would it be possible to make a series about Man In The Middle bots MITM in Python of course, seeing how to read the signals. hooking, sockets all that good stuff . Also I made a first bot using your series for another video game and IT WORKS WONDERS !
@guimauve522
@guimauve522 3 года назад
I would look into creating virtual keyboard and mouses. I know that there used to be one app on windows that was able to do just that but apparently it isn't working as good since some windows updates.. It was created so people would be able to connect multiple mouses to a pc so they could all work from the same machine; this would let you do most of what you want I believe
@piorprogramadorbr9481
@piorprogramadorbr9481 2 года назад
Ppjoykey?
@emiliomota2459
@emiliomota2459 3 года назад
dang you are a genius bro
@kosmonautofficial296
@kosmonautofficial296 Год назад
hey man hope you are doing well I miss this amazing videos!
@messto531
@messto531 6 месяцев назад
he is dying Rest In peace i guess
@erykadolphson9491
@erykadolphson9491 3 года назад
Thank you!!
@frazz2k4
@frazz2k4 2 года назад
Bro when you coming back with more videos, we miss you!
@dc22199x
@dc22199x 2 года назад
You need coroutine to do that rather than blocking each window, or create a json file where it contains the lists of PIDs used so you can run the main.py multiple times, thus you dont need to have that forloop
@7up340
@7up340 3 года назад
I'm not a python guy but this was interesting and entertaining for me
@alexsalgado-developeradvoc2886
@alexsalgado-developeradvoc2886 4 месяца назад
congrats!! Does it works for MacOS?
@kyubi2uzumaki
@kyubi2uzumaki 3 года назад
Personally I use both post/send message for my bot but I also have find out that Autoit is also really powerful and can do things that send and post message cannot. In the end I settled on using a mix of both of them for my bot by using the pyAutoit module. This results in my bot being blazing fast and consistent for multiple windows even when unfocused.
@LearnCodeByGaming
@LearnCodeByGaming 3 года назад
PyAutoIt looks cool
@DaKrucial
@DaKrucial 3 года назад
Yup I just pyAutoit. It was the quick and easiest way to solve this problem.
@_claud
@_claud 3 года назад
Would you mind uploading it to Github or anywhere else to see how you did it? Would be interesting to see. I just ran my bots in VMs. Running them natively would be much better. xd
@Hemoplaguer
@Hemoplaguer 2 года назад
I would love some more information on how you accomplish this. I, as well as probably many others who came to this video, are still searching for a way to send input to inactive windows. Please get back to me if you care to elaborate. Discord: Chai#5765
@nicholashammond6638
@nicholashammond6638 2 года назад
@@DaKrucial It looks like autoit (and thus any bindings for it) uses PostMessage internally
@nafisarkar3587
@nafisarkar3587 2 года назад
Man you are awesome.
@funktionone821
@funktionone821 4 месяца назад
We didn not see you since long time, I have a great video suggestion for you, make a video about how to connect a custom trained YoloV8 model to any game window. The current version is V8 which has so many options, for Detection ,Tracking, Segmentation and so on, now it is even easier deploying implementing for custom projects. Reply
@alamar11
@alamar11 2 года назад
Thank you so much!
@farfalleus8568
@farfalleus8568 2 года назад
Do you think you could use multithreading to press two keys at once?
@CoderKid12
@CoderKid12 2 года назад
Nice Content
@s_e_t_z3248
@s_e_t_z3248 2 года назад
Where have you been man? I love your videos, they got me into coding and I cannot thank you enough.
@foxpro9524
@foxpro9524 2 года назад
Your fan from Vietnam. Hello, could you make a video about "Detect custom object using HOG cascade training". Thanks a lot.
@ebadaniba0
@ebadaniba0 Год назад
Sir, do you have some content about identify a image in window and move to it using WASD? i saw you videos about opencv, but i cant find nothing about WASD moving to detected object.
@IARENOBODY
@IARENOBODY 2 года назад
Can you do a video on detecting sounds from a game?
@ryanthompson1326
@ryanthompson1326 2 года назад
You could put the bot in it's own vm and have it view an rdp window from the host.
@iapeiro4077
@iapeiro4077 2 года назад
Is there a way to find a new opened window? For example, I want my bot to open 2 windows at a time for 30 minutes then open another 2, and windows will have the name (window1,window2,window3,etc)
@jjang_won
@jjang_won 2 года назад
Thank you for the tutorials! This is exactly what I looking for. However, I struggle with one more problem. Could you help me if you don’t mind? I want to assign hotkeys to start/pause/reload/exit macro in Python. The macro is infinite loop, like AutoHokey code below. F1:: Loop { DoSomething() } Return F2::Pause F3::Reload F4::ExitApp
@bmfs348
@bmfs348 2 года назад
Not sure if you figured it out, but the easiest way is probably to have two different threads
@abdallahazme3737
@abdallahazme3737 2 года назад
Excuse me Ben, is this mean you cannot use the bot you have build for Alibion online on more than window?
@pizza88
@pizza88 Год назад
Hi I used AutoHotkey which actually has send keys function, you may try that with python associated?
@ineverchangemyplayericon3016
@ineverchangemyplayericon3016 2 года назад
This video reminded me of the pain in win32. I even made a SO post about windows messages and it was down voted by an ex MS employee because I was asking something that is not possible. Idk if Linux has a better window message architecture for user inputs. The answer is probably just use a better OS. But it may be possible to rewrite windows message architecture, but probably not worth it.
@eternablue730
@eternablue730 2 года назад
you left eye didn't notice threading was the best option.
@Diduty
@Diduty Месяц назад
really helpfull tks u alot
@poepew417
@poepew417 2 года назад
i am a developer who uses MacOs. Which libraries should I choose for handling windows?
@promisedid4571
@promisedid4571 2 года назад
que daora, irei ver todos vídeos.
@w0lm7b97
@w0lm7b97 Год назад
hope you are doing well wherever you are!
@saw6053
@saw6053 10 месяцев назад
Hey man, how are you? Have you stopped making youtube content? Hope all is good with you. Cheers and thanks for the great content.
@tonyr0xx
@tonyr0xx Год назад
do you now how to set workwindow by mouse position ? i need to send keys like 1, 2, 3, to a game.exe in minimized window, this window must be captured by a mouse positon, by PID and set PID to workwindow.
@00Jannis00
@00Jannis00 2 года назад
This is exactly what I am looking for :) is this also possible for macOs?
@Processador_DE_BaixaQualidade
@Processador_DE_BaixaQualidade 2 года назад
Hey i'm new here,i actually can't understand nothing that he's saying in the video,what i need to know to do the exactly thing that he did in the video?
@lethanhphong7812
@lethanhphong7812 2 года назад
8 months now still :( i hope you okay
@dharmatejasingampalli6480
@dharmatejasingampalli6480 2 года назад
Hai..is there any possible ways to record keyboard strocks and repeat it when we call a method...
@dharmatejasingampalli6480
@dharmatejasingampalli6480 Год назад
Is it possible to send multiple inputs of same to single application...like example I want to mimic ctrl+c on multiple text box in a desktop application at once or having tab key work on two or more text boxes at once....is there any approach or idea on this
@mzmahid1212
@mzmahid1212 2 года назад
is it possible to input mouse clicks too while the window is minimized or inactive.
@piorprogramadorbr9481
@piorprogramadorbr9481 2 года назад
Am trying to create a bot for a game, but I wanna do mouse clicks in a minimize window
@Erotukas
@Erotukas Год назад
Scripting program called uopilot as well as autoit can do it easily. Maybe Python is limited in that sense, or libraries needs to be created to make it work with unfocused windows
@lyricsms5448
@lyricsms5448 2 года назад
I love this but I wanted to know something. So how easy is it for Anti-cheats to detect that your mouse clicks or mouse movement comes from a program or hardware? Like if I send the mouse movement command via program would that be easy for them to detect? Would it be harder to detect if its hardware?
@wellhellothere1785
@wellhellothere1785 2 года назад
I want to know the answer of this
@XXnlcodXX
@XXnlcodXX 2 года назад
They are just gonna see what inputs you did/do, not the source that is sending the inputs. So if you make the movement consistent , they will detect it fast. No way a human is following exact same pixels/pathing every time, or move crazy fast etc etc. The trick is getting it to randomise and act "human like".
@tetteykn110
@tetteykn110 2 года назад
im nob in Python and this stuff, can you create me 4 keyboard keys to send to game? for example i want to press "E then Z then Shift then Space" i want to create script like when i press F8 it sends that inputs when im playing a game.
@schindlerjahudisi9837
@schindlerjahudisi9837 3 года назад
Thank youu
@THEbraylonbarnes
@THEbraylonbarnes 2 года назад
can you make more RLBot tutorials
@richardking6980
@richardking6980 2 года назад
Out of interest, why can we not use pyautogui and just select the windows when broadcast the inputs?
@lordraphi
@lordraphi Год назад
Can you come back and show us some more cool stuff? Thank you :)
@nossasaude241
@nossasaude241 Год назад
Make a video of how get position of sprites in game by memory address.
@fyzbit
@fyzbit 2 года назад
I can finally make cane/wart script thanks!
@Hemoplaguer
@Hemoplaguer 2 года назад
Ah, so still no solution... I was really hopeful. I got excited when I read your title.
@SixtySixVideo
@SixtySixVideo 2 года назад
same
@hakankosebas2085
@hakankosebas2085 Год назад
hey can you make serie with opencv self driving car project? but roads shouldn't have clear view, like mud roads in foxhole game.
@user-oz3oe6px8j
@user-oz3oe6px8j 3 месяца назад
any way to send mouse click? the video does explain for key and it works, but idk what for mouse click
@sak.4001
@sak.4001 Месяц назад
Ahk lib?
@sciencekhuong
@sciencekhuong Год назад
if you can put bot and game run in raspberry pi or server, run 24/7 it will be very cool
@Dannybeasted
@Dannybeasted 3 года назад
hey, can you do more javascript stuff? great content!
@LearnCodeByGaming
@LearnCodeByGaming 3 года назад
Thanks! Yeah I plan on doing more javascript stuff. Anything in particular you'd like to see?
@Dannybeasted
@Dannybeasted 3 года назад
Learn Code By Gaming maybe how to work with APIs from game companies such as riot games and display the data somewhere
@Dannybeasted
@Dannybeasted 3 года назад
Learn Code By Gaming or making a browser based game, spin the wheel or blackjack/ chess
@AhmedMusrin
@AhmedMusrin 3 года назад
@@LearnCodeByGaming I loved the runescape scripting series. Maybe something similiar:D
@prada3640
@prada3640 2 года назад
Please, teach us how to make bots for NFT games 👍🏽👍🏽
@kumboi
@kumboi 3 года назад
King shit ❤️
@beeasy247
@beeasy247 Год назад
Any solution for sending a mouse click to a specific part of the window (without taking the mouse or focus away from whatever the user is doing)
@oma6393
@oma6393 Год назад
win32gui.PostMessage() will work,for keyboard you need send to pids
@kalopseeia1617
@kalopseeia1617 2 года назад
Please Make Tutorial for Tensorflow,
@roldelthe
@roldelthe Год назад
As many others, after looking for you in Google hoping to find more content from you in another platform with no success. I RLY HOPE YOU ARE DOING OK MAN. Please, at least let us know you are OK, its ok if you just decided to upload videos
Далее
I tried to make a Valorant AI using computer vision
19:23
Fudbol hozir vs avval😂
01:01
Просмотров 478 тыс.
♀ 🔁 ♂ = ...❓ #OC #늦잠 #vtuber
00:12
Просмотров 1,5 млн
2 Python Developers VS $1000
15:04
Просмотров 1,7 млн
Automate your job with Python
6:07
Просмотров 358 тыс.
How I make bots using python (educational)
17:12
Просмотров 524 тыс.
How CEOs Need to Learn
49:09
Просмотров 1,2 млн
Making Simple GUI Window in C on Windows
18:20
Просмотров 22 тыс.