Some useful Bluestacks stuff
pip install getbstacksinfo
Tested against Windows 10 / Python 3.11 / Anaconda / BlueStacks
from getbstacksinfo import (
start_bluestacks_instance_and_connect_to_adb,
get_info_bluestacks,
kill_all_bluestacks_exe,
)
from pprint import pprint
adb_path = r"C:\ProgramData\chocolatey\lib\adb\tools\platform-tools\adb.exe"
kill_any_bluestacks = False
if kill_any_bluestacks:
kill_all_bluestacks_exe()
# start an instance and wait for it to connect
# Use with: https://github.com/hansalemaos/adbkonnekt
connect_adb = False
if connect_adb:
instancetostart = "Rvc64_34"
worked = start_bluestacks_instance_and_connect_to_adb(
adb_path, instancetostart, sleeptime=5, timeout=120
)
print(worked)
(
data,
bstconfigpath,
bstconfigpath_folder,
bstconfigpath_folder_short,
bstconfigpath_short,
bluestacksinstances,
) = get_info_bluestacks()
pprint(bluestacksinstances)
# each bluestacks instance is a dict in bluestacksinstances
# if the instance has already started, there are more functions available
r""" 'Rvc64_39': {'adbport': '5945',
'already_created': False,
'already_created_files': 'C:\\ProgramData\\BlueStacks_nxt\\Engine\\Rvc64_39\\iscreated.txt', # a file to save some random data
'bluestacksconfdata': ['bst.instance.Rvc64_39.abi_list="x86,x64,arm,arm64"', # data from bluestacks.conf
'bst.instance.Rvc64_39.adb_port="5945"',
'bst.instance.Rvc64_39.ads_display_time=""',
...
'bst.instance.Rvc64_39.status.session_id="1"',
'bst.instance.Rvc64_39.vulkan_supported="0"'],
'bstk': files(folder='C:\\ProgramData\\BlueStacks_nxt\\Engine\\Rvc64_39', file='Rvc64_39.bstk', path='C:\\ProgramData\\BlueStacks_nxt\\Engine\\Rvc64_39\\Rvc64_39.bstk', ext='.bstk'),
'bstk_prev': files(folder='C:\\ProgramData\\BlueStacks_nxt\\Engine\\Rvc64_39', file='Rvc64_39.bstk-prev', path='C:\\ProgramData\\BlueStacks_nxt\\Engine\\Rvc64_39\\Rvc64_39.bstk-prev', ext='.bstk-prev'),
'connections': [['TCP',
'127.0.0.1:5945',
'0.0.0.0:0',
'LISTENING',
'15148'],
['TCP',
'127.0.0.1:5945',
'127.0.0.1:52404',
'ESTABLISHED',
'15148'],
['UDP', '0.0.0.0:53193', '*:*', '15148'],
['UDP', '[::]:53193', '*:*', '15148']],
'disable_root': {'exception': [], 'returnvalue': [], 'running': [False]}, # a callable class that disables root in bluestacks.conf
'disableinternet': 'C:\\PROGRA~1\\BLUEST~2\\BSTKVM~1.EXE '
'controlvm Rvc64_39 setlinkstate1 off', # command line to disable network (adb won't work anymore)
'enable_root': {'exception': [], 'returnvalue': [], 'running': [False]}, # a callable class that enables root in bluestacks.conf
'enableinternet': 'C:\\PROGRA~1\\BLUEST~2\\BSTKVM~1.EXE ' # command line to disable network
'controlvm Rvc64_39 setlinkstate1 on',
'get_external_ip': {'exception': [], 'returnvalue': [], 'running': [False]}, # a callable class that gets the external ip
'hdexecute': 'start /min "" C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE '
'--instance Rvc64_39', # command line to start hdplayer detached
'ismasterinstance': False, # if the instance is the master instance
'keymap_dim': (571, 1016), # size of the keymap window
'keymap_hwnd': 10555144, # handle of the keymap window
'killcommand': {'exception': [], 'returnvalue': [], 'running': [False]}, # a callable class that kills the bluestacks instance
'modify_xml_file_normal': None, # a callable class that modifies the hdds in the xml file to normal (only available if ismasterinstance is True)
'modify_xml_file_read_only': None, # a callable class that modifies the hdds in the xml file to read only (only available if ismasterinstance is True)
'procdata': {'Caption': 'HD-Player.exe',
'CommandLine': 'C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE '
'--instance Rvc64_39',
'CreationDate': '20240318112659.149708-180',
'ExecutablePath': 'C:\\PROGRA~1\\BLUEST~2\\HD-Player.exe',
'KernelModeTime': '18340468750',
'ParentProcessId': '15816',
'ProcessId': '15148',
'ThreadCount': '147',
'UserModeTime': '9621562500',
'VirtualSize': '10083291136',
'WorkingSetSize': '97685504',
'connections': [['TCP',
'127.0.0.1:5945',
'0.0.0.0:0',
'LISTENING',
'15148'],
['TCP',
'127.0.0.1:5945',
'127.0.0.1:52404',
'ESTABLISHED',
'15148'],
['UDP',
'0.0.0.0:53193',
'*:*',
'15148'],
['UDP',
'[::]:53193',
'*:*',
'15148']]},
'restart': {'exception': [], 'returnvalue': [], 'running': [False]}, # a callable class that restarts the bluestacks instance
'startbat': 'C:\\ProgramData\\BlueStacks_nxt\\Engine\\Rvc64_39\\instancestart.bat', # path to a bat file that starts the bluestacks instance
'startcommand': {'exception': [], 'returnvalue': [], 'running': [False]}, # a callable class that starts the bluestacks instance
'vhdx': files(folder='C:\\ProgramData\\BlueStacks_nxt\\Engine\\Rvc64_39', file='Data.vhdx', path='C:\\ProgramData\\BlueStacks_nxt\\Engine\\Rvc64_39\\Data.vhdx', ext='.vhdx'),
'window_functions': {'forceminimize': <getbstacksinfo.WinFu object at 0x000001FEB6D6AE90>, # some functions for the bluestacks window
'hide': <getbstacksinfo.WinFu object at 0x000001FEB6D6A990>,
'maximize': <getbstacksinfo.WinFu object at 0x000001FEB6D6AA90>,
'minimize': <getbstacksinfo.WinFu object at 0x000001FEB6D6AC10>,
'normal': <getbstacksinfo.WinFu object at 0x000001FEB6D6A9D0>,
'resize_window': <getbstacksinfo.WinFu object at 0x000001FEB6D6AF10>, # use position=(x, y, w, h)
'restore': <getbstacksinfo.WinFu object at 0x000001FEB6D6AD90>,
'show': <getbstacksinfo.WinFu object at 0x000001FEB6D6AB90>,
'showdefault': <getbstacksinfo.WinFu object at 0x000001FEB6D6AE10>,
'showminimized': <getbstacksinfo.WinFu object at 0x000001FEB6D6AA10>,
'showminnoactive': <getbstacksinfo.WinFu object at 0x000001FEB6D6AC90>,
'showna': <getbstacksinfo.WinFu object at 0x000001FEB6D6AD10>,
'shownoactivate': <getbstacksinfo.WinFu object at 0x000001FEB6D6AB10>},
'window_handles': [WindowInfo(pid=15148, title='Qt5154QWindowToolSaveBitsOwnDC', windowtext='BlueStacks Keymap Overlay', hwnd=10555144, length=26, tid=24768, status='visible', coords_client=(0, 571, 0, 1016), dim_client=(571, 1016), coords_win=(304, 875, 33, 1049), dim_win=(571, 1016), class_name='Qt5154QWindowToolSaveBitsOwnDC', path='C:\\PROGRA~1\\BLUEST~2\\HD-Player.exe'),
...
WindowInfo(pid=15148, title='temp_d3d_window_4039785', windowtext='Temp Window', hwnd=3605532, length=12, tid=26584, status='invisible', coords_client=(0, 1, 0, 1), dim_client=(1, 1), coords_win=(0, 1, 0, 1), dim_win=(1, 1), class_name='temp_d3d_window_4039785', path='C:\\PROGRA~1\\BLUEST~2\\HD-Player.exe')],
'window_hwnd': 4198756,
'window_title': 'BlueStacks App Player 39',
'workingfolder': 'C:\\PROGRA~3\\BLUEST~2\\Engine\\Rvc64_39'}}"""
from getbstacksinfo.lookup2 import (
get_offline_and_online_bluestacks_instances,
get_all_bluestacks_online_instances,
create_port_pid_lookup,
get_real_adb,
)
a1 = get_real_adb(adbexe="adb.exe")
print(a1)
a2 = create_port_pid_lookup()
print(a2)
a3 = get_all_bluestacks_online_instances(adbexe="adb.exe")
print(a3)
a4 = get_offline_and_online_bluestacks_instances(adbexe="adb.exe")
print(a4)
("adb.exe", 19508)
(
{
5416: {0, 22},
...: ...,
6112: {"UDP"},
55575: {"UDP"},
55576: {"UDP"},
55577: {"UDP"},
55574: {"UDP"},
},
)
{
"Rvc64_24": {
"port": 5795,
"cmdline": '"C:\\\\Program Files\\\\BlueStacks_nxt\\\\HD-Player.exe" "--instance" "Rvc64_24"',
"exefile": "HD-Player.exe",
"pid": 4472,
"running": True,
"connected": True,
"locking_pids": [],
},
"Rvc64_26": {
"port": 5815,
"cmdline": '"C:\\\\Program Files\\\\BlueStacks_nxt\\\\HD-Player.exe" "--instance" "Rvc64_26"',
"exefile": "HD-Player.exe",
"pid": 19620,
"running": True,
"connected": True,
"locking_pids": [],
},
"Rvc64_27": {
"port": 5825,
"cmdline": '"C:\\\\Program Files\\\\BlueStacks_nxt\\\\HD-Player.exe" "--instance" "Rvc64_27"',
"exefile": "HD-Player.exe",
"pid": 1104,
"running": True,
"connected": True,
"locking_pids": [],
},
}
{
"Rvc64_24": {
"port": 5795,
"cmdline": '"C:\\\\Program Files\\\\BlueStacks_nxt\\\\HD-Player.exe" "--instance" "Rvc64_24"',
"exefile": "HD-Player.exe",
"pid": 4472,
"running": True,
"connected": True,
"locking_pids": [],
},
"Rvc64_26": {
"port": 5815,
"cmdline": '"C:\\\\Program Files\\\\BlueStacks_nxt\\\\HD-Player.exe" "--instance" "Rvc64_26"',
"exefile": "HD-Player.exe",
"pid": 19620,
"running": True,
"connected": True,
"locking_pids": [],
},
"Rvc64_27": {
"port": 5825,
"cmdline": '"C:\\\\Program Files\\\\BlueStacks_nxt\\\\HD-Player.exe" "--instance" "Rvc64_27"',
"exefile": "HD-Player.exe",
"pid": 1104,
"running": True,
"connected": True,
"locking_pids": [],
},
"Rvc64": {
"port": -1,
"cmdline": "C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64",
"exefile": 'startcommand = rf\'start /min "" C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64',
"pid": -1,
"running": False,
"connected": False,
"locking_pids": [],
},
"Rvc64_25": {
"port": -1,
"cmdline": "C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_25",
"exefile": 'startcommand = rf\'start /min "" C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_25',
"pid": -1,
"running": False,
"connected": False,
"locking_pids": [],
},
"Rvc64_28": {
"port": -1,
"cmdline": "C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_28",
"exefile": 'startcommand = rf\'start /min "" C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_28',
"pid": -1,
"running": False,
"connected": False,
"locking_pids": [10056],
},
"Rvc64_29": {
"port": -1,
"cmdline": "C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_29",
"exefile": 'startcommand = rf\'start /min "" C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_29',
"pid": -1,
"running": False,
"connected": False,
"locking_pids": [27616],
},
"Rvc64_30": {
"port": -1,
"cmdline": "C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_30",
"exefile": 'startcommand = rf\'start /min "" C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_30',
"pid": -1,
"running": False,
"connected": False,
"locking_pids": [],
},
"Rvc64_31": {
"port": -1,
"cmdline": "C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_31",
"exefile": 'startcommand = rf\'start /min "" C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_31',
"pid": -1,
"running": False,
"connected": False,
"locking_pids": [],
},
"Rvc64_32": {
"port": -1,
"cmdline": "C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_32",
"exefile": 'startcommand = rf\'start /min "" C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_32',
"pid": -1,
"running": False,
"connected": False,
"locking_pids": [],
},
"Rvc64_33": {
"port": -1,
"cmdline": "C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_33",
"exefile": 'startcommand = rf\'start /min "" C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_33',
"pid": -1,
"running": False,
"connected": False,
"locking_pids": [],
},
"Rvc64_34": {
"port": -1,
"cmdline": "C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_34",
"exefile": 'startcommand = rf\'start /min "" C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_34',
"pid": -1,
"running": False,
"connected": False,
"locking_pids": [],
},
"Rvc64_35": {
"port": -1,
"cmdline": "C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_35",
"exefile": 'startcommand = rf\'start /min "" C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_35',
"pid": -1,
"running": False,
"connected": False,
"locking_pids": [],
},
"Rvc64_36": {
"port": -1,
"cmdline": "C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_36",
"exefile": 'startcommand = rf\'start /min "" C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_36',
"pid": -1,
"running": False,
"connected": False,
"locking_pids": [],
},
"Rvc64_37": {
"port": -1,
"cmdline": "C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_37",
"exefile": 'startcommand = rf\'start /min "" C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_37',
"pid": -1,
"running": False,
"connected": False,
"locking_pids": [],
},
"Rvc64_38": {
"port": -1,
"cmdline": "C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_38",
"exefile": 'startcommand = rf\'start /min "" C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_38',
"pid": -1,
"running": False,
"connected": False,
"locking_pids": [],
},
"Rvc64_39": {
"port": -1,
"cmdline": "C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_39",
"exefile": 'startcommand = rf\'start /min "" C:\\PROGRA~1\\BLUEST~2\\HD-PLA~1.EXE --instance Rvc64_39',
"pid": -1,
"running": False,
"connected": False,
"locking_pids": [],
},
}
Metadata
Release files for getbstacksinfo 0.12
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| getbstacksinfo-0.12.tar.gz | 19.9 kB | Without provenance | Details for getbstacksinfo-0.12.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| getbstacksinfo-0.12-py3-none-any.whl | Python 3 | none | any | Details for getbstacksinfo-0.12-py3-none-any.whl |
Total release size: 39.7 kB
Release files / getbstacksinfo-0.12.tar.gz
| Download URL | getbstacksinfo-0.12.tar.gz |
|---|---|
| Size | 19.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
3ef2d435c054be25be3d1552e3e3f35a6202fb91279550a4ca108c44dd04c568
|
|
BLAKE2b-256 checksum How to use checksums |
e0d7865fa22ba9e870a4335518465f52c73a88ad9f587286e70b39d53d64c7f7
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.7
|
Release files / getbstacksinfo-0.12-py3-none-any.whl
| Download URL | getbstacksinfo-0.12-py3-none-any.whl |
|---|---|
| Size | 19.8 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
d22f15691bc2f74f6819a5f5d53f78dee62508b030ef3fb0888444926c2aa253
|
|
BLAKE2b-256 checksum How to use checksums |
0ad17d3f780489330576b6c025930e3400b4fb0c65c3afb799ded09448266a0f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/4.0.2 CPython/3.11.7
|
Security for getbstacksinfo 0.12
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.