https://github.com/nosolosoftware/win-control
Windows manipulation made easy for node.js
https://github.com/nosolosoftware/win-control
automation automation-ui nodejs windows
Last synced: 27 days ago
JSON representation
Windows manipulation made easy for node.js
- Host: GitHub
- URL: https://github.com/nosolosoftware/win-control
- Owner: nosolosoftware
- Created: 2020-08-24T09:00:58.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2022-06-09T13:41:07.000Z (almost 3 years ago)
- Last Synced: 2025-03-28T09:03:32.891Z (about 1 month ago)
- Topics: automation, automation-ui, nodejs, windows
- Language: C++
- Homepage:
- Size: 40 KB
- Stars: 30
- Watchers: 2
- Forks: 6
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG.md
Awesome Lists containing this project
README
# win-control
win-control aims at managing currently opened windows from nodejs, wrapping the native windows API.This module is exclusively compatible with Windows.
## Usage
Install with yarn/npm
```
yarn add win-control
```
Then, library can be imported as follows.```javascript
const {Window} = require('win-control')// Set a window as foreground using the process identifier
Window.getByPid(PID).setForeground()
```## Documentation
### Window.getByPid(PID)
Search a windows by the PID of the process* `pid` `{number}` PID of the process owning the window.
Returns `undefined` if PID doesn't have an associated window, or an instance of [Window](#class-window).
### Window.getForeground()
Get current foreground window.Returns an instance of [Window](#class-window).
### Window.getByClassName(className)
Search a windows by the class name of the window* `className` `{string}` Classname of the window to look for.
Returns `undefined` if it could not be found, or an instance of [Window](#class-window).
### Window.getByTitle(title)
Search a windows by the title of the window, the coincidence must be exact* `title` `{string}` Classname of the window to look for.
Returns `undefined` if it could not be found, or an instance of [Window](#class-window).
***
### Class: Window
#### Constructor: new Window(hwnd)
* `hwnd` `{number}` Identifier of the window to be managed.
#### #getParent()
Retrieves an instance of [Window](#class-window) with the specified window's parent or owner. It may returns `undefined` if class has not any parent.
#### #getAncestor(kindOfAncestor)
Retrieves an instance of [Window](#class-window) with the specified ancestor. It may returns `undefined` if class has not the specified ancestor.
* `kindOfAncestor` see [AncestorFlags](#ancestorflags)
#### #getProcessInfo()
Returns an object with information of the process who owns the window.
The object has the following properties.
* `windowText` `{string}` Window's title bar.
* `pid` `{number}` PID of the process who owns the window.
* `path` `{string}` Process's path who owns the window.#### #getPid()
Returns a `number` with the PID of the owner of the window.
#### #getClassName()
Returns a `string` with the window's class name.
#### #getTitle()
Returns a `string` with the window's title bar (if it has one).
#### #exists()
Returns a `boolean` indicating if the window still exists
#### #isVisible()
Returns a `boolean` indicating if the window is visible
#### #getDimensions()
Retrieves the dimensions of the bounding rectangle of the specified window. The dimensions are given in screen coordinates that are relative to the upper-left corner of the screen.
The returned object has the following properties
* `left` `{number}` x-coordinate of the upper-left corner of the rectangle.
* `right` `{number}` x-coordinate of the lower-right corner of the rectangle.
* `top` `{number}` y-coordinate of the upper-left corner of the rectangle.
* `bottom` `{number}` y-coordinate of the lower-right corner of the rectangle.#### #getHwnd()
Returns the hwnd of the current instance.
#### #moveRelative(dx, dy, dw, dh)
Changes the position and dimensions of the specified window
* `dx` `{number}` new position of the left side relative to current
* `dy` `{number}` new position of the top side relative to current
* `dw` `{number}` new width of the window relative to current
* `dh` `{number}` new height of the window relative to currentReturns a `boolean` indicating if the operation has succeeded
#### #setShowStatus(state)
Sets the specified window's show state.
* `state` See [WindowStates](#windowstates)
Returns a `boolean` indicating if the operation has succeeded
#### #setPosition(hwndInsertAfter, x, y, cx, cy, uFlags)
Changes the size, position, and Z order of the window.
* `hwndInsertAfter` `{number}` A HWND to precede the positioned window in the Z order or a value of [HWND](#hwnd)
* `x` `{number}`: new position of the left side of the window.
* `y` `{number}`: new position of the top of the window.
* `cx` `{number}`: new width in pixels.
* `cy` `{number}`: new height in pixels.
* `uFlags`: the window sizing and positioning flags. See [SWP](#swp)Returns a `boolean` indicating if the operation has succeeded
#### #setForeground()
Brings the current window into the foreground and activates the window.
#### #close()
Closes current window.
## SWP
Exposed as:
```javascript
require('win-control').SWP
```With the following properties
* `NOSIZE`: retains the current size (ignores the cx and cy parameters).
* `NOMOVE`: retains the current position (ignores X and Y parameters).
* `NOZORDER`: retains the current Z order.
* `NOREDRAW`: does not redraw changes. If this flag is set, no repainting of any kind occurs.
* `NOACTIVATE`: does not activate the window.
* `DRAWFRAME`: draws a frame around the window.
* `FRAMECHANGED`: applies new frame styles set.
* `SHOWWINDOW`: displays the window.
* `HIDEWINDOW`: hides the window.
* `NOCOPYBITS`: discards the entire contents of the client area.
* `NOOWNERZORDER`: does not change the owner window's position in the Z order
* `NOREPOSITION`: same as the NOOWNERZORDER flag.
* `NOSENDCHANGING`: prevents the window from receiving the WM_WINDOWPOSCHANGING message
* `DEFERERASE`: prevents generation of the WM_SYNCPAINT message.
* `ASYNCWINDOWPOS`: if the calling thread and the thread that owns the window are attached to different input queues, the system posts the request to the thread that owns the window.## HWND
Exposed as:
```javascript
require('win-control').HWND
```With the following properties
* `BOTTOM`: places the window at the bottom of the Z order.
* `NOTOPMOST`: places the window above all non-topmost windows (that is, behind all topmost windows).
* `TOP`: places the window at the top of the Z order.
* `TOPMOST`: places the window above all non-topmost windows. The window maintains its topmost position even when it is deactivated.## AncestorFlags
Exposed as:
```javascript
require('win-control').AncestorFlags
```With the following properties
* `PARENT`: retrieves the parent window.
* `ROOT`: retrieves the root window by walking the chain of parent windows.
* `ROOTOWNER`: retrieves the owned root window by walking the chain of parent and owner windows.## WindowStates
Exposed as:
```javascript
require('win-control').WindowStates
```With the following properties
* `HIDE`: hides the window and activates another window.
* `SHOWNORMAL`: activates and displays a window
* `SHOWMINIMIZED`: activates the window and displays it as a minimized window.
* `MAXIMIZE`: maximizes the specified window.
* `SHOWMAXIMIZED`: activates the window and displays it as a maximized window.
* `SHOWNOACTIVATE`: displays a window in its most recent size and position.
* `SHOW`: activates the window and displays it in its current size and position.
* `MINIMIZE`: minimizes the specified window and activates the next top-level window in the Z order.
* `SHOWMINNOACTIVE`: displays the window as a minimized window.
* `SHOWNA`: displays the window in its current size and position
* `RESTORE`: activates and displays the window. If the window is minimized or maximized, the system restores it to its original size and position
* `SHOWDEFAULT`: sets the show state based on the SW_ value specified in the STARTUPINFO structure passed to the CreateProcess function by the program that started the application.
* `FORCEMINIMIZE`: minimizes a window, even if the thread that owns the window is not responding.## Examples
For more information on uses, please see [example](example/index.js).
## Contributing
Bug reports and merge requests are welcome on Github at
https://github.com/nosolosoftware/win-control using
[GitHub Flow](https://guides.github.com/introduction/flow/index.html). This project is intended to
be a safe, welcoming space for collaboration, and contributors are expected to adhere to the
[Contributor Covenant](http://contributor-covenant.org) code of conduct.## Versioning
**win-control** uses [Semantic Versioning 2.0.0](http://semver.org)
## Generating a new version
In order to publish a new version you need to define `NODE_PRE_GYP_GITHUB_TOKEN` as environmental variable.
* Bump version at package.json
* yarn node-pre-gyp clean configure build package
* yarn node-pre-gyp-github publish --release
* npm publish## License
Copyright (c) 2019-2020 NoSoloSoftware Network S.L. - Released under [MIT](LICENSE) license.