| | |
| | | import array |
| | | import ctypes |
| | | import json |
| | | import socket |
| | | import struct |
| | | import sys |
| | | import time |
| | | |
| | |
| | | import win32con |
| | | import win32gui |
| | | |
| | | import constant |
| | | import ocr_util |
| | | import opencv_util |
| | | import setting |
| | |
| | | |
| | | APP_TITLE = "卖票看板" |
| | | APP_ICON = "" |
| | | SERVER_HOST = "192.168.3.252" |
| | | SOCKET_PORT = 9001 |
| | | HTTP_PORT = 9004 |
| | | |
| | |
| | | |
| | | def __request(self, codes): |
| | | client = socket.socket() # 生成socket,连接server |
| | | ip_port = (SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | ip_port = (constant.SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | client.connect(ip_port) |
| | | data = {"type": 201, "data": {"codes": codes}} |
| | | client.send(json.dumps(data).encode("utf-8")) |
| | |
| | | |
| | | return code |
| | | |
| | | |
| | | # |
| | | # # 代码属性 |
| | | # class CodeAttributeFrame(wx.Frame): |
| | |
| | | def __init__(self): |
| | | wx.Frame.__init__(self, None, -1, "悬浮盯盘", style=wx.CAPTION ^ wx.MINIMIZE_BOX ^ wx.CLOSE_BOX ^ wx.STAY_ON_TOP, |
| | | size=(435, 220)) |
| | | # |
| | | self.SetBackgroundColour(wx.Colour(224, 224, 224)) |
| | | self.SetTransparent(230) |
| | | self.Bind(wx.EVT_CLOSE, self.OnExit) |
| | | |
| | | # 设置字体大小 |
| | | font = self.GetFont() |
| | | font.SetPixelSize(wx.Size(0, 11)) |
| | | self.SetFont(font) |
| | | |
| | | # 读取配置信息 |
| | | window_info = setting.get_float_watch_window_info() |
| | | if window_info: |
| | | self.SetPosition(wx.Point(window_info[0], window_info[1])) |
| | | # self.Size = wx.Size(window_info[2], window_info[3]) |
| | | |
| | | boxsier = wx.FlexGridSizer(5, 3, 4, 5) |
| | | bs1 = wx.BoxSizer(wx.HORIZONTAL) |
| | | self.btn_remove_black = wx.Button(self, label="移除黑名单", size=(65, 30)) |
| | | boxsier = wx.BoxSizer(wx.VERTICAL) |
| | | |
| | | # ------所有控件定义-------- |
| | | btn_width = 60 |
| | | |
| | | self.btn_already_canceled = wx.Button(self, label="撤单", size=(-1, 40)) |
| | | self.btn_sell = wx.Button(self, label="卖100%", size=(-1, 40)) |
| | | font = self.btn_already_canceled.GetFont() |
| | | font.SetPixelSize(wx.Size(0, 16)) |
| | | self.btn_already_canceled.SetFont(font) |
| | | self.btn_sell.SetFont(font) |
| | | |
| | | self.btn_remove_black = wx.Button(self, label="移除黑名单", size=(btn_width, 30)) |
| | | |
| | | self.btn_close_buy = wx.Button(self, label="关闭交易", size=(65, 30)) |
| | | self.btn_close_buy.SetForegroundColour("#FF3232") |
| | | bs1.Add(self.btn_remove_black) |
| | | bs1.Add(self.btn_close_buy) |
| | | boxsier.Add(bs1, 0, wx.TOP, 5) |
| | | |
| | | bs1 = wx.BoxSizer(wx.HORIZONTAL) |
| | | self.btn_remove_white = wx.Button(self, label="移除白名单", size=(65, 30)) |
| | | self.btn_remove_white = wx.Button(self, label="移除白名单", size=(btn_width, 30)) |
| | | |
| | | self.btn_open_buy = wx.Button(self, label="开启交易", size=(65, 30), ) |
| | | self.btn_open_buy.SetForegroundColour("#00e600") |
| | | |
| | | bs1.Add(self.btn_open_buy, 0, wx.TOP, 5) |
| | | bs1.Add(self.btn_remove_white, 0, wx.TOP, 5) |
| | | boxsier.Add(bs1, 0, wx.LEFT, 0) |
| | | |
| | | # 买想买 |
| | | bs1 = wx.BoxSizer(wx.HORIZONTAL) |
| | | self.btn_buy_mode_want = wx.Button(self, label="仅买想买", size=(65, 30)) |
| | | self.btn_buy_mode_all = wx.Button(self, label="全部都买", size=(65, 30), ) |
| | | # self.btn_buy_mode_all.SetForegroundColour("#00e600") |
| | | |
| | | bs1.Add(self.btn_buy_mode_want, 0, wx.TOP, 5) |
| | | bs1.Add(self.btn_buy_mode_all, 0, wx.TOP, 5) |
| | | self.check_auto_refresh = wx.CheckBox(self, size=(-1, -1), label="交易刷新") |
| | | self.want_list = wx.Button(self, label="想买单", size=(40, 20)) |
| | | self.btn_want_buy = wx.Button(self, label="加入想买单", size=(btn_width, 30)) |
| | | |
| | | boxsier.Add(bs1, 0, wx.LEFT, 0) |
| | | self.check_auto_click = wx.CheckBox(self, size=(-1, -1), label="分组刷新") |
| | | |
| | | label = wx.StaticText(self, label="交易刷新:") |
| | | bs1 = wx.BoxSizer(wx.HORIZONTAL) |
| | | bs1.Add(label) |
| | | self.check_auto_refresh = wx.CheckBox(self, size=(-1, -1)) |
| | | bs1.Add(self.check_auto_refresh, 0, wx.LEFT, 10) |
| | | boxsier.Add(bs1, 0, wx.TOP, 5) |
| | | # 已撤单 |
| | | self.btn_already_canceled = wx.Button(self, label="已撤单", size=(65, 25)) |
| | | self.check_focus = wx.CheckBox(self, size=(-1, -1), label="抢占焦点") |
| | | |
| | | boxsier.Add(self.btn_already_canceled, 0, wx.TOP, 5) |
| | | bs1 = wx.BoxSizer(wx.HORIZONTAL) |
| | | self.want_list = wx.Button(self, label="想买单", size=(45, 20)) |
| | | bs1.Add(self.want_list, 0, wx.TOP, 2) |
| | | self.btn_want_buy = wx.Button(self, label="加入想买单", size=(65, 25)) |
| | | bs1.Add(self.btn_want_buy) |
| | | self.check_trade_quick_key = wx.CheckBox(self, size=(-1, -1), label="交易快捷键") |
| | | |
| | | boxsier.Add(bs1, 0, wx.LEFT, 20) |
| | | |
| | | label = wx.StaticText(self, label="分组刷新:") |
| | | bs1 = wx.BoxSizer(wx.HORIZONTAL) |
| | | bs1.Add(label) |
| | | self.check_auto_click = wx.CheckBox(self, size=(-1, -1)) |
| | | bs1.Add(self.check_auto_click, 0, wx.LEFT, 10) |
| | | boxsier.Add(bs1) |
| | | |
| | | # 加空白 |
| | | boxsier.Add(wx.BoxSizer(wx.HORIZONTAL), 0, wx.TOP, 5) |
| | | |
| | | self.btn_want_buy_remove = wx.Button(self, label="移除想买单", size=(65, 25)) |
| | | boxsier.Add(self.btn_want_buy_remove, 0, wx.LEFT, 65) |
| | | self.btn_want_buy_remove = wx.Button(self, label="移除想买单", size=(btn_width, 30)) |
| | | |
| | | self.edit_code = wx.TextCtrl(self, size=(80, -1)) |
| | | boxsier.Add(self.edit_code) |
| | | self.edit_code.Show(False) |
| | | |
| | | self.notify_text = wx.StaticText(self, label="", size=(80, -1)) |
| | | boxsier.Add(self.notify_text, 0, wx.LEFT, -45) |
| | | |
| | | # |
| | | bs1 = wx.BoxSizer(wx.HORIZONTAL) |
| | | self.pause_buy_list = wx.Button(self, label="暂不买单", size=(55, 20)) |
| | | bs1.Add(self.pause_buy_list, 0, wx.TOP, 2) |
| | | self.btn_pause_buy = wx.Button(self, label="加入暂不买", size=(65, 25)) |
| | | bs1.Add(self.btn_pause_buy) |
| | | boxsier.Add(bs1, 0, wx.LEFT, 10) |
| | | self.pause_buy_list = wx.Button(self, label="不买单", size=(40, 20)) |
| | | self.btn_pause_buy = wx.Button(self, label="加入暂不买", size=(btn_width, 30)) |
| | | |
| | | # 代码 |
| | | bs1 = wx.BoxSizer(wx.HORIZONTAL) |
| | | self.btn_black = wx.Button(self, label="加入黑名单", size=(65, 30)) |
| | | bs1.Add(self.btn_black) |
| | | self.black_list = wx.Button(self, label="黑名单", size=(45, 20)) |
| | | self.btn_black = wx.Button(self, label="加入黑名单", size=(btn_width, 30)) |
| | | self.black_list = wx.Button(self, label="黑名单", size=(40, 20)) |
| | | self.black_list.SetForegroundColour("#00e600") |
| | | bs1.Add(self.black_list, 0, wx.CENTER | wx.ALL, 0) |
| | | boxsier.Add(bs1, 0, wx.LEFT, 0) |
| | | |
| | | bs1 = wx.BoxSizer(wx.HORIZONTAL) |
| | | self.btn_white = wx.Button(self, label="加入白名单", size=(65, 30)) |
| | | self.white_list = wx.Button(self, label="白名单", size=(45, 20)) |
| | | self.btn_white = wx.Button(self, label="加入白名单", size=(btn_width, 30)) |
| | | self.white_list = wx.Button(self, label="白名单", size=(40, 20)) |
| | | self.white_list.SetForegroundColour("#FF3232") |
| | | bs1.Add(self.white_list, 0, wx.CENTER | wx.ALL, 0) |
| | | bs1.Add(self.btn_white, 0, wx.LEFT, 2) |
| | | |
| | | boxsier.Add(bs1, 0, wx.LEFT, 17) |
| | | self.btn_pause_buy_remove = wx.Button(self, label="移除暂不买", size=(btn_width, 30)) |
| | | |
| | | self.btn_pause_buy_remove = wx.Button(self, label="移除暂不买", size=(65, 25)) |
| | | boxsier.Add(self.btn_pause_buy_remove, 0, wx.LEFT, 65) |
| | | # ------布局-------- |
| | | # 第1排 撤单与卖 |
| | | bs1 = wx.BoxSizer(wx.HORIZONTAL) |
| | | bs1.Add(self.btn_already_canceled, 1, wx.ALL | wx.EXPAND, 2) |
| | | bs1.Add(self.btn_sell, 1, wx.ALL | wx.EXPAND, 2) |
| | | boxsier.Add(bs1, 0, wx.ALL | wx.EXPAND, 0) |
| | | boxsier.Add(wx.StaticText(self, size=wx.Size(-1, 5)), 0, wx.ALL | wx.EXPAND, 0) |
| | | |
| | | # 第2排 白名单 黑名单 暂不买单 想买单 |
| | | bs1 = wx.BoxSizer(wx.HORIZONTAL) |
| | | # 白名单 |
| | | bs2 = wx.BoxSizer(wx.HORIZONTAL) |
| | | bs_v = wx.BoxSizer(wx.VERTICAL) |
| | | bs_v.Add(self.btn_white) |
| | | bs_v.Add(self.btn_remove_white) |
| | | bs2.Add(bs_v) |
| | | bs2.Add(self.white_list, 0, wx.ALL | wx.EXPAND, 0) |
| | | bs1.Add(bs2, 1, wx.ALL | wx.EXPAND, 1) |
| | | |
| | | # 黑名单 |
| | | bs2 = wx.BoxSizer(wx.HORIZONTAL) |
| | | bs_v = wx.BoxSizer(wx.VERTICAL) |
| | | bs_v.Add(self.btn_black) |
| | | bs_v.Add(self.btn_remove_black) |
| | | bs2.Add(bs_v) |
| | | bs2.Add(self.black_list, 0, wx.ALL | wx.EXPAND, 0) |
| | | bs1.Add(bs2, 1, wx.ALL | wx.EXPAND, 1) |
| | | |
| | | # 暂不买单 |
| | | bs2 = wx.BoxSizer(wx.HORIZONTAL) |
| | | bs_v = wx.BoxSizer(wx.VERTICAL) |
| | | bs_v.Add(self.btn_pause_buy) |
| | | bs_v.Add(self.btn_pause_buy_remove) |
| | | bs2.Add(bs_v) |
| | | bs2.Add(self.pause_buy_list, 0, wx.ALL | wx.EXPAND, 0) |
| | | bs1.Add(bs2, 1, wx.ALL | wx.EXPAND, 1) |
| | | |
| | | # 想买单 |
| | | bs2 = wx.BoxSizer(wx.HORIZONTAL) |
| | | bs_v = wx.BoxSizer(wx.VERTICAL) |
| | | bs_v.Add(self.btn_want_buy) |
| | | bs_v.Add(self.btn_want_buy_remove) |
| | | bs2.Add(bs_v) |
| | | bs2.Add(self.want_list, 0, wx.ALL | wx.EXPAND, 0) |
| | | bs1.Add(bs2, 1, wx.ALL | wx.EXPAND, 1) |
| | | |
| | | boxsier.Add(bs1, 0, wx.ALL | wx.EXPAND, 0) |
| | | boxsier.Add(wx.StaticText(self, size=wx.Size(-1, 5))) |
| | | # 第3排 交易操作位 |
| | | bs1 = wx.BoxSizer(wx.HORIZONTAL) |
| | | |
| | | bs_v = wx.BoxSizer(wx.VERTICAL) |
| | | bs_v.Add(self.check_auto_refresh) |
| | | bs_v.Add(self.check_auto_click) |
| | | bs1.Add(bs_v) |
| | | |
| | | bs_v = wx.BoxSizer(wx.VERTICAL) |
| | | bs_v.Add(self.check_focus) |
| | | bs_v.Add(self.check_trade_quick_key) |
| | | bs1.Add(bs_v, 0, wx.LEFT, 5) |
| | | |
| | | blank_label = wx.StaticText(self) |
| | | bs1.Add(blank_label, 1, wx.ALL | wx.EXPAND, 1) |
| | | bs1.Add(self.btn_close_buy) |
| | | bs1.Add(self.btn_open_buy) |
| | | bs1.Add(self.btn_buy_mode_want) |
| | | bs1.Add(self.btn_buy_mode_all) |
| | | |
| | | boxsier.Add(bs1, 0, wx.ALL | wx.EXPAND, 1) |
| | | |
| | | # 绑定 |
| | | self.btn_open_buy.Bind(wx.EVT_BUTTON, self.__open_buy) |
| | |
| | | |
| | | self.check_auto_click.Bind(wx.EVT_CHECKBOX, self.__auto_click_check) |
| | | self.check_auto_refresh.Bind(wx.EVT_CHECKBOX, self.__auto_refresh_check) |
| | | self.check_focus.Bind(wx.EVT_CHECKBOX, self.__auto_focus_check) |
| | | self.check_trade_quick_key.Bind(wx.EVT_CHECKBOX, self.__trade_quick_key_check) |
| | | self.white_list.Bind(wx.EVT_BUTTON, lambda e: self.show_list(e, "白名单列表", 302)) |
| | | self.black_list.Bind(wx.EVT_BUTTON, lambda e: self.show_list(e, "黑名单列表", 301)) |
| | | self.want_list.Bind(wx.EVT_BUTTON, lambda e: self.show_list(e, "想要买列表", 403)) |
| | | self.pause_buy_list.Bind(wx.EVT_BUTTON, lambda e: self.show_list(e, "暂不买列表", 413)) |
| | | |
| | | root_boxsier = wx.BoxSizer(wx.VERTICAL) |
| | | root_boxsier.Add(boxsier, 1, wx.LEFT, 10) |
| | | |
| | | self.label_attribute = wx.StaticText(self, label="") |
| | | self.label_attribute.SetForegroundColour(wx.Colour(255, 0, 0)) |
| | | root_boxsier.Add(self.label_attribute, 0, wx.LEFT, 10) |
| | | root_boxsier.Add(self.label_attribute, 0, wx.LEFT | wx.TOP | wx.RIGHT, 5) |
| | | root_boxsier.Add(boxsier, 1, wx.ALL, 5) |
| | | |
| | | self.SetSizer(root_boxsier) |
| | | |
| | |
| | | self.Bind(wx.EVT_TIMER, self.clear_msg, self.timer) |
| | | |
| | | def clear_msg(self, event): |
| | | self.notify_text.SetLabelText("") |
| | | self.label_attribute.SetLabelText("") |
| | | self.label_attribute.SetForegroundColour("#000000") |
| | | |
| | | def __ocr_code(self): |
| | | code = self.edit_code.GetValue() |
| | |
| | | self.edit_code.SetValue(code) |
| | | |
| | | def show_warning(self, content): |
| | | self.notify_text.SetLabel(content) |
| | | self.notify_text.SetForegroundColour("#FF7F27") |
| | | self.label_attribute.SetLabel(content) |
| | | self.label_attribute.SetForegroundColour("#FF7F27") |
| | | self.timer.Stop() |
| | | self.timer.StartOnce(20000) |
| | | |
| | | def show_info(self, content): |
| | | self.notify_text.SetLabel(content) |
| | | self.notify_text.SetForegroundColour("#008000") |
| | | self.label_attribute.SetLabel(content) |
| | | self.label_attribute.SetForegroundColour("#008000") |
| | | self.timer.Stop() |
| | | self.timer.StartOnce(20000) |
| | | |
| | |
| | | self.check_auto_refresh.SetValue(True) |
| | | else: |
| | | self.check_auto_refresh.SetValue(False) |
| | | |
| | | auto_focus = setting.get_float_frame_auto_focus() |
| | | if auto_focus: |
| | | self.check_focus.SetValue(True) |
| | | else: |
| | | self.check_focus.SetValue(False) |
| | | |
| | | trade_quick_key = setting.get_float_frame_trade_quick_key() |
| | | if trade_quick_key: |
| | | self.check_trade_quick_key.SetValue(True) |
| | | else: |
| | | self.check_trade_quick_key.SetValue(False) |
| | | |
| | | self.__init_trade_state() |
| | | self.__init_trade_mode() |
| | | |
| | |
| | | else: |
| | | setting.set_ths_trade_auto_refresh(False) |
| | | |
| | | def __auto_focus_check(self, event): |
| | | if event.Selection: |
| | | setting.set_float_frame_auto_focus(True) |
| | | else: |
| | | setting.set_float_frame_auto_focus(False) |
| | | |
| | | def __trade_quick_key_check(self, event): |
| | | if event.Selection: |
| | | setting.set_float_frame_trade_quick_key(True) |
| | | else: |
| | | setting.set_float_frame_trade_quick_key(False) |
| | | |
| | | def __request(self, codes, type): |
| | | client = socket.socket() # 生成socket,连接server |
| | | ip_port = (SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | ip_port = (constant.SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | client.connect(ip_port) |
| | | data = {"type": type, "data": {"codes": codes}} |
| | | client.send(json.dumps(data).encode("utf-8")) |
| | |
| | | |
| | | def __request_list(self, type): |
| | | client = socket.socket() # 生成socket,连接server |
| | | ip_port = (SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | ip_port = (constant.SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | client.connect(ip_port) |
| | | data = {"type": type, "data": {}} |
| | | client.send(json.dumps(data).encode("utf-8")) |
| | |
| | | |
| | | def __request_buy(self, is_open): |
| | | client = socket.socket() # 生成socket,连接server |
| | | ip_port = (SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | ip_port = (constant.SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | client.connect(ip_port) |
| | | data = {"type": 501, "data": {"open": is_open}} |
| | | client.send(json.dumps(data).encode("utf-8")) |
| | |
| | | # 获取买入状态 |
| | | def __request_buy_state(self): |
| | | client = socket.socket() # 生成socket,连接server |
| | | ip_port = (SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | ip_port = (constant.SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | client.connect(ip_port) |
| | | data = {"type": 502, "data": {}} |
| | | client.send(json.dumps(data).encode("utf-8")) |
| | |
| | | |
| | | def __request_buy_mode(self): |
| | | client = socket.socket() # 生成socket,连接server |
| | | ip_port = (SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | ip_port = (constant.SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | client.connect(ip_port) |
| | | data = {"type": 504, "data": {}} |
| | | client.send(json.dumps(data).encode("utf-8")) |
| | |
| | | |
| | | def __request_set_buy_mode(self, mode): |
| | | client = socket.socket() # 生成socket,连接server |
| | | ip_port = (SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | ip_port = (constant.SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | client.connect(ip_port) |
| | | data = {"type": 503, "data": {"mode": mode}} |
| | | client.send(json.dumps(data).encode("utf-8")) |
| | |
| | | # 查询是否可以撤单 |
| | | def __request_can_cancel_buy(self, code): |
| | | client = socket.socket() # 生成socket,连接server |
| | | ip_port = (SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | ip_port = (constant.SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | client.connect(ip_port) |
| | | data = {"type": 420, "data": {"codes": [code]}} |
| | | client.send(json.dumps(data).encode("utf-8")) |
| | |
| | | # 撤单 |
| | | def __request_cancel_buy(self, code): |
| | | client = socket.socket() # 生成socket,连接server |
| | | ip_port = (SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | ip_port = (constant.SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | client.connect(ip_port) |
| | | data = {"type": 80, "data": {"code": code}} |
| | | client.send(json.dumps(data).encode("utf-8")) |
| | |
| | | |
| | | def __request_attribute(self, code): |
| | | client = socket.socket() # 生成socket,连接server |
| | | ip_port = (SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | ip_port = (constant.SERVER_HOST, SOCKET_PORT) # server地址和端口号(最好是10000以后) |
| | | client.connect(ip_port) |
| | | data = {"type": 430, "data": {"code": code}} |
| | | client.send(json.dumps(data).encode("utf-8")) |
| | |
| | | client.close() |
| | | return result.decode("gbk") |
| | | |
| | | def focus(self, hwnd, code): |
| | | try: |
| | | int_buffer = array.array("L", [0]) |
| | | char_buffer = array.array('b', |
| | | json.dumps({"type": "set_code", "data": {"code": code}}).encode()) |
| | | int_buffer_address = int_buffer.buffer_info()[0] |
| | | char_buffer_address, char_buffer_size = char_buffer.buffer_info() |
| | | copy_struct = struct.pack("PLP", int_buffer_address, char_buffer_size, char_buffer_address) |
| | | win32gui.SendMessage(hwnd, win32con.WM_COPYDATA, None, copy_struct) |
| | | |
| | | # pythoncom.CoInitialize() |
| | | # shell = client.Dispatch("WScript.Shell") |
| | | # shell.SendKeys('%') |
| | | # # win32gui.ShowWindow(hwnd, win32con.SW_RESTORE) |
| | | # win32gui.SetForegroundWindow(hwnd) |
| | | # win32gui.PumpMessages() |
| | | # win32gui.SetFocus(hwnd) |
| | | # lib = CDLL("D:/workspace/GP/dll/Dll/x64/Debug/Dll.dll") |
| | | # win32gui.SendMessage(hwnd, win32con.WM_SETFOCUS, 0, 0) |
| | | # print("执行结果", lib.focus(hwnd)) |
| | | |
| | | # remote_thread = win32process.GetWindowThreadProcessId(hwnd)[0] |
| | | # tid = win32api.GetCurrentThreadId() |
| | | # win32process.AttachThreadInput(tid, remote_thread, True) |
| | | # prev_handle = win32gui.SetFocus(hwnd) |
| | | # print("之前的焦点句柄", prev_handle,hwnd) |
| | | except Exception as e: |
| | | logging.exception(e) |
| | | pass |
| | | |
| | | def is_admin(self): |
| | | try: |
| | | return ctypes.windll.shell32.IsUserAnAdmin() |
| | | except: |
| | | return False |
| | | |
| | | # 设置代码,请求代码属性 |
| | | def setCode(self, code): |
| | | # 获取代码属性描述 |
| | | #auto_focus = setting.get_float_frame_auto_focus() |
| | | if True: |
| | | print("是否有管理员权限", self.is_admin()) |
| | | # 窗口显示在最前面 |
| | | hwnds = win32_util.search_window("悬浮盯盘") |
| | | if hwnds: |
| | | print("句柄", hwnds[0]) |
| | | time.sleep(0.1) |
| | | wx.CallAfter(lambda: self.focus(hwnds[0], code)) |
| | | |
| | | # wx.CallAfter(lambda: self.SetFocus()) |
| | | |
| | | try: |
| | | result = self.__request_attribute(code) |
| | | result = json.loads(result) |
| | | if result['code'] == 0: |
| | | code_info = result['data']['code_info'] |
| | | desc = f"{code_info[1]} {code_info[0]} {result['data']['desc']}" |
| | | wx.CallAfter(lambda : self.label_attribute.SetLabelText(desc)) |
| | | wx.CallAfter(lambda: self.label_attribute.SetLabelText(desc)) |
| | | except Exception as e: |
| | | wx.CallAfter(lambda: self.label_attribute.SetLabelText(str(e))) |
| | | |
| | |
| | | p.Size = (e.Size[0], p_height) |
| | | self.timer.Stop() |
| | | self.timer.StartOnce(1000) |
| | | |
| | | # 降低重绘频率 |
| | | # self.__re_draw() |
| | | |
| | |
| | | print("设置代码成功回调") |
| | | p2.send("resub") |
| | | self.__re_draw() |
| | | self.timer.Stop() |
| | | self.timer.StartOnce(1000) |
| | | self.Size = wx.Size(self.Size[0], self.Size[1] + 10) |
| | | time.sleep(0.1) |
| | | self.Size = wx.Size(self.Size[0], self.Size[1] - 10) |
| | | |
| | | |
| | | # 绘图管理器 |