ok-script 0.0.83__tar.gz → 0.0.85__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (182) hide show
  1. {ok-script-0.0.83 → ok-script-0.0.85}/PKG-INFO +1 -1
  2. {ok-script-0.0.83 → ok-script-0.0.85}/ok/alas/emulator_base.py +8 -0
  3. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/HwndWindow.py +27 -17
  4. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/adb/DeviceManager.py +8 -10
  5. {ok-script-0.0.83 → ok-script-0.0.85}/ok_script.egg-info/PKG-INFO +1 -1
  6. {ok-script-0.0.83 → ok-script-0.0.85}/setup.py +1 -1
  7. {ok-script-0.0.83 → ok-script-0.0.85}/README.md +0 -0
  8. {ok-script-0.0.83 → ok-script-0.0.85}/ok/OK.py +0 -0
  9. {ok-script-0.0.83 → ok-script-0.0.85}/ok/__init__.py +0 -0
  10. {ok-script-0.0.83 → ok-script-0.0.85}/ok/alas/__init__.py +0 -0
  11. {ok-script-0.0.83 → ok-script-0.0.85}/ok/alas/emulator_windows.py +0 -0
  12. {ok-script-0.0.83 → ok-script-0.0.85}/ok/alas/platform_base.py +0 -0
  13. {ok-script-0.0.83 → ok-script-0.0.85}/ok/alas/platform_windows.py +0 -0
  14. {ok-script-0.0.83 → ok-script-0.0.85}/ok/alas/utils.py +0 -0
  15. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/BaseCaptureMethod.py +0 -0
  16. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/__init__.py +0 -0
  17. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/adb/ADBCaptureMethod.py +0 -0
  18. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/adb/WindowsCaptureFactory.py +0 -0
  19. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/adb/__init__.py +0 -0
  20. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/adb/bin/__init__.py +0 -0
  21. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/image/ImageCaptureMethod.py +0 -0
  22. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/image/__init__.py +0 -0
  23. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/windows/BaseWindowsCaptureMethod.py +0 -0
  24. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/windows/BitBltCaptureMethod.py +0 -0
  25. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/windows/DesktopDuplicationCaptureMethod.py +0 -0
  26. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/windows/WindowsGraphicsCaptureMethod.py +0 -0
  27. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/windows/__init__.py +0 -0
  28. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/windows/d3d11.py +0 -0
  29. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/windows/dump.py +0 -0
  30. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/windows/utils.py +0 -0
  31. {ok-script-0.0.83 → ok-script-0.0.85}/ok/capture/windows/window.py +0 -0
  32. {ok-script-0.0.83 → ok-script-0.0.85}/ok/color/Color.py +0 -0
  33. {ok-script-0.0.83 → ok-script-0.0.85}/ok/color/__init__.py +0 -0
  34. {ok-script-0.0.83 → ok-script-0.0.85}/ok/config/Config.py +0 -0
  35. {ok-script-0.0.83 → ok-script-0.0.85}/ok/config/InfoDict.py +0 -0
  36. {ok-script-0.0.83 → ok-script-0.0.85}/ok/config/__init__.py +0 -0
  37. {ok-script-0.0.83 → ok-script-0.0.85}/ok/feature/Box.py +0 -0
  38. {ok-script-0.0.83 → ok-script-0.0.85}/ok/feature/Feature.py +0 -0
  39. {ok-script-0.0.83 → ok-script-0.0.85}/ok/feature/FeatureSet.py +0 -0
  40. {ok-script-0.0.83 → ok-script-0.0.85}/ok/feature/FindFeature.py +0 -0
  41. {ok-script-0.0.83 → ok-script-0.0.85}/ok/feature/__init__.py +0 -0
  42. {ok-script-0.0.83 → ok-script-0.0.85}/ok/firebase/Analytics.py +0 -0
  43. {ok-script-0.0.83 → ok-script-0.0.85}/ok/firebase/__init__.py +0 -0
  44. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/App.py +0 -0
  45. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/Communicate.py +0 -0
  46. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/MainWindow.py +0 -0
  47. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/MessageWindow.py +0 -0
  48. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/StartController.py +0 -0
  49. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/TabTitles.py +0 -0
  50. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/__init__.py +0 -0
  51. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/about/AboutTab.py +0 -0
  52. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/about/HttpTextEdit.py +0 -0
  53. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/about/VersionCard.py +0 -0
  54. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/about/__init__.py +0 -0
  55. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/common/OKIcon.py +0 -0
  56. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/common/__init__.py +0 -0
  57. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/common/config.py +0 -0
  58. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/common/style_sheet.py +0 -0
  59. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/debug/AspectRatioWidget.py +0 -0
  60. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/debug/DebugTab.py +0 -0
  61. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/debug/FrameWidget.py +0 -0
  62. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/debug/InfoWidget.py +0 -0
  63. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/debug/LoggerWidget.py +0 -0
  64. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/debug/Screenshot.py +0 -0
  65. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/debug/__init__.py +0 -0
  66. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/i18n/__init__.py +0 -0
  67. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/i18n/path.py +0 -0
  68. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/i18n/update.py +0 -0
  69. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/icon/__init__.py +0 -0
  70. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/icon/icon.py +0 -0
  71. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/overlay/OverlayWindow.py +0 -0
  72. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/overlay/__init__.py +0 -0
  73. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/qss/__init__.py +0 -0
  74. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/resources.py +0 -0
  75. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/settings/SettingTab.py +0 -0
  76. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/settings/__init__.py +0 -0
  77. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/start/SelectCaptureListView.py +0 -0
  78. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/start/StartCard.py +0 -0
  79. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/start/StartTab.py +0 -0
  80. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/start/__init__.py +0 -0
  81. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/ConfigItemFactory.py +0 -0
  82. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/ConfigLabelAndWidget.py +0 -0
  83. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/LabelAndDoubleSpinBox.py +0 -0
  84. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/LabelAndDropDown.py +0 -0
  85. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/LabelAndLineEdit.py +0 -0
  86. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/LabelAndList.py +0 -0
  87. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/LabelAndSpinBox.py +0 -0
  88. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/LabelAndSwitchButton.py +0 -0
  89. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/LabelAndWidget.py +0 -0
  90. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/ModifyListDialog.py +0 -0
  91. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/ModifyListItem.py +0 -0
  92. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/OneTimeTaskTab.py +0 -0
  93. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/StartButton.py +0 -0
  94. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/TaskCard.py +0 -0
  95. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/TaskOpButton.py +0 -0
  96. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/TooltipTableWidget.py +0 -0
  97. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/TriggerTaskTab.py +0 -0
  98. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/tasks/__init__.py +0 -0
  99. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/util/Alert.py +0 -0
  100. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/util/InitWorker.py +0 -0
  101. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/util/__init__.py +0 -0
  102. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/widget/Card.py +0 -0
  103. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/widget/EmptyCard.py +0 -0
  104. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/widget/FramelessDialog.py +0 -0
  105. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/widget/ListTableWidgetItem.py +0 -0
  106. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/widget/NumericTableWidgetItem.py +0 -0
  107. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/widget/StartLoadingDialog.py +0 -0
  108. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/widget/StatusBar.py +0 -0
  109. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/widget/Tab.py +0 -0
  110. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/widget/TabWidget.py +0 -0
  111. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/widget/UpdateConfigWidgetItem.py +0 -0
  112. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/widget/YesNonWidgetItem.py +0 -0
  113. {ok-script-0.0.83 → ok-script-0.0.85}/ok/gui/widget/__init__.py +0 -0
  114. {ok-script-0.0.83 → ok-script-0.0.85}/ok/interaction/ADBInteraction.py +0 -0
  115. {ok-script-0.0.83 → ok-script-0.0.85}/ok/interaction/BaseInteraction.py +0 -0
  116. {ok-script-0.0.83 → ok-script-0.0.85}/ok/interaction/DoNothingInteraction.py +0 -0
  117. {ok-script-0.0.83 → ok-script-0.0.85}/ok/interaction/Win32Interaction.py +0 -0
  118. {ok-script-0.0.83 → ok-script-0.0.85}/ok/interaction/__init__.py +0 -0
  119. {ok-script-0.0.83 → ok-script-0.0.85}/ok/logging/Logger.py +0 -0
  120. {ok-script-0.0.83 → ok-script-0.0.85}/ok/logging/__init__.py +0 -0
  121. {ok-script-0.0.83 → ok-script-0.0.85}/ok/ocr/OCR.py +0 -0
  122. {ok-script-0.0.83 → ok-script-0.0.85}/ok/ocr/__init__.py +0 -0
  123. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/Windows/Foundation/Collections.py +0 -0
  124. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/Windows/Foundation/__init__.py +0 -0
  125. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/Windows/Globalization/__init__.py +0 -0
  126. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/Windows/Graphics/Capture/__init__.py +0 -0
  127. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/Windows/Graphics/DirectX/Direct3D11/__init__.py +0 -0
  128. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/Windows/Graphics/DirectX/__init__.py +0 -0
  129. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/Windows/Graphics/Imaging/__init__.py +0 -0
  130. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/Windows/Graphics/__init__.py +0 -0
  131. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/Windows/Media/Ocr/__init__.py +0 -0
  132. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/Windows/Media/__init__.py +0 -0
  133. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/Windows/Security/Cryptography/__init__.py +0 -0
  134. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/Windows/Security/__init__.py +0 -0
  135. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/Windows/Storage/Streams/__init__.py +0 -0
  136. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/Windows/Storage/__init__.py +0 -0
  137. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/Windows/__init__.py +0 -0
  138. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/__init__.py +0 -0
  139. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/delegate.py +0 -0
  140. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/export.py +0 -0
  141. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/idldsl.py +0 -0
  142. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/inspectable.py +0 -0
  143. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/roapi.py +0 -0
  144. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/types.py +0 -0
  145. {ok-script-0.0.83 → ok-script-0.0.85}/ok/rotypes/winstring.py +0 -0
  146. {ok-script-0.0.83 → ok-script-0.0.85}/ok/save/BlackBarProcessor.py +0 -0
  147. {ok-script-0.0.83 → ok-script-0.0.85}/ok/save/PostProcessor.py +0 -0
  148. {ok-script-0.0.83 → ok-script-0.0.85}/ok/save/SaveByInterval.py +0 -0
  149. {ok-script-0.0.83 → ok-script-0.0.85}/ok/save/SaveByKeyPress.py +0 -0
  150. {ok-script-0.0.83 → ok-script-0.0.85}/ok/save/SaveMethodBase.py +0 -0
  151. {ok-script-0.0.83 → ok-script-0.0.85}/ok/save/__init__.py +0 -0
  152. {ok-script-0.0.83 → ok-script-0.0.85}/ok/scene/FeatureScene.py +0 -0
  153. {ok-script-0.0.83 → ok-script-0.0.85}/ok/scene/Scene.py +0 -0
  154. {ok-script-0.0.83 → ok-script-0.0.85}/ok/scene/__init__.py +0 -0
  155. {ok-script-0.0.83 → ok-script-0.0.85}/ok/stats/StreamStats.py +0 -0
  156. {ok-script-0.0.83 → ok-script-0.0.85}/ok/stats/__init__.py +0 -0
  157. {ok-script-0.0.83 → ok-script-0.0.85}/ok/task/BaseTask.py +0 -0
  158. {ok-script-0.0.83 → ok-script-0.0.85}/ok/task/ExecutorOperation.py +0 -0
  159. {ok-script-0.0.83 → ok-script-0.0.85}/ok/task/OneTimeTask.py +0 -0
  160. {ok-script-0.0.83 → ok-script-0.0.85}/ok/task/TaskExecutor.py +0 -0
  161. {ok-script-0.0.83 → ok-script-0.0.85}/ok/task/TriggerTask.py +0 -0
  162. {ok-script-0.0.83 → ok-script-0.0.85}/ok/task/__init__.py +0 -0
  163. {ok-script-0.0.83 → ok-script-0.0.85}/ok/update/GithubMultiDownloader.py +0 -0
  164. {ok-script-0.0.83 → ok-script-0.0.85}/ok/update/Updater.py +0 -0
  165. {ok-script-0.0.83 → ok-script-0.0.85}/ok/update/__init__.py +0 -0
  166. {ok-script-0.0.83 → ok-script-0.0.85}/ok/update/gen_md5.py +0 -0
  167. {ok-script-0.0.83 → ok-script-0.0.85}/ok/util/Handler.py +0 -0
  168. {ok-script-0.0.83 → ok-script-0.0.85}/ok/util/__init__.py +0 -0
  169. {ok-script-0.0.83 → ok-script-0.0.85}/ok/util/exit_event.py +0 -0
  170. {ok-script-0.0.83 → ok-script-0.0.85}/ok/util/json.py +0 -0
  171. {ok-script-0.0.83 → ok-script-0.0.85}/ok/util/list.py +0 -0
  172. {ok-script-0.0.83 → ok-script-0.0.85}/ok/util/path.py +0 -0
  173. {ok-script-0.0.83 → ok-script-0.0.85}/ok/util/thread.py +0 -0
  174. {ok-script-0.0.83 → ok-script-0.0.85}/ok/util/win32_process.py +0 -0
  175. {ok-script-0.0.83 → ok-script-0.0.85}/ok/util/yaml.py +0 -0
  176. {ok-script-0.0.83 → ok-script-0.0.85}/ok_script.egg-info/SOURCES.txt +0 -0
  177. {ok-script-0.0.83 → ok-script-0.0.85}/ok_script.egg-info/dependency_links.txt +0 -0
  178. {ok-script-0.0.83 → ok-script-0.0.85}/ok_script.egg-info/requires.txt +0 -0
  179. {ok-script-0.0.83 → ok-script-0.0.85}/ok_script.egg-info/top_level.txt +0 -0
  180. {ok-script-0.0.83 → ok-script-0.0.85}/setup.cfg +0 -0
  181. {ok-script-0.0.83 → ok-script-0.0.85}/tests/__init__.py +0 -0
  182. {ok-script-0.0.83 → ok-script-0.0.85}/tests/test_updater.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ok-script
3
- Version: 0.0.83
3
+ Version: 0.0.85
4
4
  Summary: Automation with Computer Vision for Python
5
5
  Home-page: https://github.com/ok-oldking/ok-script
6
6
  Author: ok-oldking
@@ -114,6 +114,14 @@ class EmulatorInstanceBase:
114
114
 
115
115
  return None
116
116
 
117
+ @property
118
+ def player_id(self):
119
+
120
+ # Find all integer groups in the string that are at the end of the string
121
+ integers = re.findall(r'\d+$', self.name)
122
+ # Return the last integer if it exists, otherwise return 0
123
+ return int(integers[0]) if integers else 0
124
+
117
125
 
118
126
  class EmulatorBase:
119
127
  # Values here must match those in argument.yaml EmulatorInfo.Emulator.option
@@ -42,31 +42,23 @@ class HwndWindow:
42
42
  real_x_offset = 0
43
43
  real_y_offset = 0
44
44
 
45
- def __init__(self, exit_event, title, exe_name=None, frame_width=0, frame_height=0):
45
+ def __init__(self, exit_event, title, exe_name=None, frame_width=0, frame_height=0, player_id=-1):
46
46
  super().__init__()
47
47
  self.app_exit_event = exit_event
48
48
  self.exe_name = exe_name
49
49
  self.title = title
50
50
  self.stop_event = threading.Event()
51
51
  self.visible = False
52
+ self.player_id = player_id
52
53
  self.update_window(title, exe_name, frame_width, frame_height)
53
54
  self.thread = threading.Thread(target=self.update_window_size, name="update_window_size")
54
55
  self.thread.start()
55
56
 
56
- def update_title_and_exe(self, title, exe):
57
- self.title = title
58
- self.exe_name = exe
59
- self.hwnd = None
60
- self.visible = False
61
- self.exists = False
62
- self.width = 0
63
- self.height = 0
64
- self.do_update_window_size()
65
-
66
57
  def stop(self):
67
58
  self.stop_event.set()
68
59
 
69
- def update_window(self, title, exe_name, frame_width, frame_height):
60
+ def update_window(self, title, exe_name, frame_width, frame_height, player_id=-1):
61
+ self.player_id = player_id
70
62
  self.title = title
71
63
  self.exe_name = exe_name
72
64
  self.update_frame_size(frame_width, frame_height)
@@ -100,7 +92,7 @@ class HwndWindow:
100
92
  name, self.hwnd, self.exe_full_path, self.real_x_offset, self.real_y_offset, self.real_width, self.real_height = find_hwnd(
101
93
  self.title,
102
94
  self.exe_name,
103
- self.frame_width, self.frame_height)
95
+ self.frame_width, self.frame_height, player_id=self.player_id)
104
96
  self.exists = self.hwnd is not None
105
97
  if self.hwnd is not None:
106
98
  self.exists = win32gui.IsWindow(self.hwnd)
@@ -152,7 +144,7 @@ class HwndWindow:
152
144
  return f"title:{self.title}_{self.exe_name}_{self.width}x{self.height}_{self.hwnd}_{self.exists}_{self.visible}"
153
145
 
154
146
 
155
- def find_hwnd(title, exe_name, frame_width, frame_height):
147
+ def find_hwnd(title, exe_name, frame_width, frame_height, player_id=-1):
156
148
  results = []
157
149
  if exe_name is None and title is None:
158
150
  return None, None, None, 0, 0, 0, 0
@@ -167,18 +159,22 @@ def find_hwnd(title, exe_name, frame_width, frame_height):
167
159
  return True
168
160
  elif not re.search(title, text):
169
161
  return True
170
- name, full_path = get_exe_by_hwnd(hwnd)
162
+ name, full_path, cmdline = get_exe_by_hwnd(hwnd)
171
163
  x, y, border, title_height, width, height, scaling, ext_left_bounds, ext_top_bounds = get_window_bounds(
172
164
  hwnd)
173
165
  ret = (hwnd, full_path, width, height, x, y, text)
174
166
  if exe_name:
175
167
  if name != exe_name and exe_name != full_path:
176
168
  return True
169
+ if player_id != -1:
170
+ if player_id != get_player_id_from_cmdline(cmdline):
171
+ logger.debug(
172
+ f'player id check failed,cmdline {cmdline} {get_player_id_from_cmdline(cmdline)} != {player_id}')
173
+ return True
177
174
  results.append(ret)
178
175
  return True
179
176
 
180
177
  win32gui.EnumWindows(callback, None)
181
- biggest = None
182
178
  if len(results) > 0:
183
179
  biggest = results[0]
184
180
  for result in results:
@@ -201,6 +197,20 @@ def find_hwnd(title, exe_name, frame_width, frame_height):
201
197
  return None, None, None, 0, 0, 0, 0
202
198
 
203
199
 
200
+ def get_player_id_from_cmdline(cmdline):
201
+ for i in range(len(cmdline)):
202
+ if i != 0:
203
+ if cmdline[i].isdigit():
204
+ return int(cmdline[i])
205
+ for i in range(len(cmdline)):
206
+ if i != 0:
207
+ value = re.search(r'index=(\d+)', cmdline[i])
208
+ # Return the value if it exists, otherwise return None
209
+ if value is not None:
210
+ return int(value.group(1))
211
+ return 0
212
+
213
+
204
214
  def enum_child_windows(biggest, frame_aspect_ratio):
205
215
  ratio_match = []
206
216
  """
@@ -237,7 +247,7 @@ def get_exe_by_hwnd(hwnd):
237
247
 
238
248
  # Get the process name and executable path
239
249
  process = psutil.Process(pid)
240
- return process.name(), process.exe()
250
+ return process.name(), process.exe(), process.cmdline()
241
251
 
242
252
 
243
253
  if __name__ == '__main__':
@@ -101,9 +101,7 @@ class DeviceManager:
101
101
 
102
102
  def do_refresh(self, current=False):
103
103
  self.update_pc_device()
104
-
105
104
  self.refresh_emulators(current)
106
-
107
105
  self.refresh_phones(current)
108
106
 
109
107
  if self.exit_event.is_set():
@@ -131,7 +129,7 @@ class DeviceManager:
131
129
  width, height = self.get_resolution(adb_device)
132
130
  logger.debug(f'refresh_phones found an phone {adb_device}')
133
131
  phone_device = {"address": adb_device.serial, "device": "adb", "connected": True, "imei": imei,
134
- "nick": adb_device.prop.model or imei,
132
+ "nick": adb_device.prop.model or imei, "player_id": -1,
135
133
  "resolution": f'{width}x{height}'}
136
134
  self.device_dict[imei] = phone_device
137
135
 
@@ -149,11 +147,11 @@ class DeviceManager:
149
147
  adb_device = self.adb_connect(emulator.serial)
150
148
  width, height = self.get_resolution(adb_device)
151
149
  name, hwnd, full_path, x, y, width, height = find_hwnd(None,
152
- emulator.path, width, height)
150
+ emulator.path, width, height, emulator.player_id)
153
151
  connected = adb_device is not None and name is not None
154
152
  emulator_device = {"address": emulator.serial, "device": "adb",
155
153
  "full_path": emulator.path, "connected": connected,
156
- "imei": emulator.name,
154
+ "imei": emulator.name, "player_id": emulator.player_id,
157
155
  "nick": name or emulator.name, "emulator": emulator}
158
156
  if adb_device is not None:
159
157
  emulator_device["resolution"] = f"{width}x{height}"
@@ -236,11 +234,11 @@ class DeviceManager:
236
234
  preferred = self.get_preferred_device()
237
235
  return preferred.get('hwnd')
238
236
 
239
- def ensure_hwnd(self, title, exe, frame_width=0, frame_height=0):
237
+ def ensure_hwnd(self, title, exe, frame_width=0, frame_height=0, player_id=-1):
240
238
  if self.hwnd is None:
241
- self.hwnd = HwndWindow(self.exit_event, title, exe, frame_width, frame_height)
239
+ self.hwnd = HwndWindow(self.exit_event, title, exe, frame_width, frame_height, player_id)
242
240
  else:
243
- self.hwnd.update_window(title, exe, frame_width, frame_height)
241
+ self.hwnd.update_window(title, exe, frame_width, frame_height, player_id)
244
242
 
245
243
  def use_windows_capture(self, override_config=None, require_bg=False, use_bit_blt_only=False):
246
244
  if not override_config:
@@ -271,7 +269,7 @@ class DeviceManager:
271
269
  else:
272
270
  width, height = self.get_resolution()
273
271
  if self.config.get('capture') == "windows":
274
- self.ensure_hwnd(None, preferred.get('full_path'), width, height)
272
+ self.ensure_hwnd(None, preferred.get('full_path'), width, height, preferred['player_id'])
275
273
  self.use_windows_capture({'can_bit_blt': True}, require_bg=True, use_bit_blt_only=True)
276
274
  else:
277
275
  if not isinstance(self.capture_method, ADBCaptureMethod):
@@ -281,7 +279,7 @@ class DeviceManager:
281
279
  self.capture_method = ADBCaptureMethod(self, self.exit_event, width=width,
282
280
  height=height)
283
281
  if self.debug and preferred.get('full_path'):
284
- self.ensure_hwnd(None, preferred.get('full_path'), width, height)
282
+ self.ensure_hwnd(None, preferred.get('full_path'), width, height, preferred['player_id'])
285
283
  elif self.hwnd is not None:
286
284
  self.hwnd.stop()
287
285
  self.hwnd = None
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ok-script
3
- Version: 0.0.83
3
+ Version: 0.0.85
4
4
  Summary: Automation with Computer Vision for Python
5
5
  Home-page: https://github.com/ok-oldking/ok-script
6
6
  Author: ok-oldking
@@ -5,7 +5,7 @@ with open("README.md", "r", encoding="utf-8") as fh:
5
5
 
6
6
  setuptools.setup(
7
7
  name="ok-script",
8
- version="0.0.83",
8
+ version="0.0.85",
9
9
  author="ok-oldking",
10
10
  author_email="firedcto@gmail.com",
11
11
  description="Automation with Computer Vision for Python",
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes