Write applescript that changes focus to another desktop monitor? - applescript

Right now I have 3 external monitors hooked up to a MacBook Pro. What would the AppleScript be for changing which monitor desktop has the focus.
To do this manually, you have to move your cursor to the monitor and click. I'm trying to write an applescript to pair with a keyboard shortcut to not have to do this
on changeDesktopFocus(desktop_to_focus)
// TODO
end changeDesktopFocus

Related

SwiftUI: How to create a macOS app that opens with a keyboard shortcut

I'm trying to create a macOS app that lets the user drag and capture portion of the screen, and analyze the captured image. I want to make it so that the screen capture is triggered by entering a keyboard shortcut (just like the macOS screen capture feature: https://support.apple.com/en-sg/HT201361). How do I build an app that launches with a keyboard shortcut?

What's the MacOS API to "capture" the mouse and keyboard, the way a VM or remote desktop program would do?

I'm looking for the Mac OS API that virtual machine or remote desktop type programs would use to "capture" the mouse and keyboard. That is to say, I want to write a GUI program where when the user clicks in my window, the normal mouse cursor disappears, and all keyboard and mouse input is diverted to my program, including global shortcuts like cmd-tab. What's the name of this API?
Found it: CGEventTapCreate can tap into the low level event stream to receive, filter, or insert HID events.

Running a Windows process while controlling the mouse and keyboard

I have a Windows program which has a GUI that runs on a PC.
In order to automate some of the GUI actions, I want to be able to move the mouse and type using the keyboard, but without interfering with the user's activity.
I know that I could simulate input events using SendMessage and PostMessage, but that requires the window to be in focus, and I want to eliminate this requirement.
My question is - is it possible to implement sort of a 'wrapper' that internally runs the original program, while patching its mouse and keyboard, providing it with a 'virtual' version of a mouse of keyboard?
I think of that as taking only the mouse and keyboard capabilities of a VM. Is something of that kind exists?
Thanks!

Run a program on: hard "Power" button press

I want to run a program (exe file) when the Power button of my laptop is pressed. (Not when system is shutting down)
I tried getting its keycode using c# and js, but none of them capture this keypress as they only capture keyboard buttons. Look at the drop-down menu I have opened:
My problem would be solved if they add "Run a specific program..." in this drop-down:
But of course they won't add this option!
So, how do I get it done? Maybe using Task Scheduler?
There's no keycode for the power button. The driver is sitting between your OS and your hardware. When you push the "G" button on your keyboard, the driver translates that to an OS system call representing the "G" key which your program can listen for and intercept. But there's no OS system call for a representing the "power" button. Instead, your driver is translating that to OS system calls to initiate a shutdown, turn off the monitor, etc.
Your laptop driver allows you to configure which system call you want to initiate when the power button is pressed, but that driver is going to be unique to the brand and model of your laptop, and if they don't offer support for capturing that keypress through their driver, then you probably don't have any easy way to intercept it.

How to move browser tabs to different monitors using a script?

I have a 3 monitor setup which is connected to a PC. It displays a Google Chrome tab on each of the screens with some dashboard. It will auto log off every night from the website (I cannot control that). So I need to manually login to it, open the tabs, then move it to each of the monitors every night. I am trying to automate this task. I am trying to use Sikuli slides to do it. Right now I am able to login, open tabs, and click on buttons. But I am not able to drag the tabs to other monitors. It doesn't matter which tab is displayed in which monitor. The PC is running Windows 7. How can I get it done ? Any scripting language or tool which is available in windows is fine. Thanks in advance.
Edit: Added an image which describes my need
You're opening the same thing on the same computer on the same screens, so it will be in the same place every time.
AutoHotKey (AHK) can do click-and-drag from a start coordinate to an end coordinate:
https://autohotkey.com/docs/commands/MouseClickDrag.htm
Run AutoHotKey, right click on the icon in the taskbar notification area (systray) and click 'Window Spy', and it will bring up AHK's helper tool. Now you can click on the Chrome tabs and look in AHK to see the coordinates of the mouse pointer, so you can plug those into the command. And drag/drop the browser and look at the mouse coordinates there, too.
(And if you weren't using Windows 7, but instead 8 or 8.1 or 10, you could use Aero Snap with Win+RightArrow, Win+RightArrow and Win+UpArrow to move the active window to the edge of the center screen, then to the right screen, then to fullscreen it).
(Or you could use Alt-Space, M, Arrow Keys to script moving the focused window around).
This is what I did to fix it:
Used MouseRecorder to record the mouse movements and keystrokes including my username and password. Using this, I logged in, opened tabs, clicked on buttons and moved them to different monitors.
Problem with this is that it is not possible to load a saved macro and run using the commandline (or I could not figure out). So I used Mouse Controller to record the mouse movement to open MouseRecorder and click on run. [It cannot record key strokes]. Mouse controller has option to run from commandline with ability to accept the filename as argument.
I wrote a batch file to open and run MouseRecorder and scheduled to run every night using task scheduler.

Resources