Skip to content

Commit 69c9247

Browse files
committed
update
1 parent 1c4b55a commit 69c9247

13 files changed

+50
-6
lines changed
78 Bytes
Binary file not shown.
0 Bytes
Binary file not shown.
-43 Bytes
Binary file not shown.
1.11 KB
Binary file not shown.
221 Bytes
Binary file not shown.
1.05 KB
Binary file not shown.

MBPython/bindwebview.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ def bind_webview(self,hwnd=0,isTransparent=False,isZoom=True):
3939
self.mb.wkeSetTransparent(self.m_webview,0)
4040

4141

42-
tmp_WndProc=WndProcHook(self.m_webview,hwnd)
42+
tmp_WndProc=WndProcHook(hwnd,self.m_webview)
4343
tmp_WndProc.onWndProcCallback=self.__myWndProcCallBack
4444
tmp_WndProc.hook_WndProc()
4545

MBPython/wkeStruct.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
)
1616

1717
from ctypes.wintypes import (
18+
LPARAM,
1819
DWORD,
1920
LONG,
2021
WORD,
@@ -106,7 +107,10 @@ class BITMAPINFO(Structure):
106107

107108
_fields_ = [("bmiHeader", BITMAPINFOHEADER), ("bmiColors", DWORD * 3)]
108109

110+
class COPYDATASTRUCT(Structure):
111+
_fields_ = [('dwData', LPARAM),('cbData', DWORD),('lpData', c_char_p)]
109112

113+
110114
from . import _LRESULT
111115
class PAINTSTRUCT(Structure):
112116
_fields_=[('hdc',_LRESULT),('fErase',c_int),('rcPaint',Rect),('fRestore',c_int),('fIncUpdate',c_int),('rgbReserved',c_char *32)]

MBPython/wndproc.py

Lines changed: 44 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,14 @@
11
# -*- coding:utf-8 -*-
22
from .winConst import WinConst
3+
from .wkeStruct import COPYDATASTRUCT
4+
from ctypes import (cast,c_char_p,py_object,sizeof,byref,string_at,create_string_buffer,POINTER)
35
import win32gui
46
import win32api
7+
import json
58

6-
9+
PCOPYDATASTRUCT = POINTER(COPYDATASTRUCT)
710
class WndProcHook:
8-
def __init__(self,webview,hwnd):
11+
def __init__(self,hwnd,webview=None):
912
self.webview=webview
1013
self.hwnd=hwnd
1114
self.msg_func_dict = {}
@@ -18,7 +21,18 @@ def add_msg_func(self,webview,hwnd,msg,msg_func):
1821
def _onWndProcCallback(self, hwnd, msg, wParam, lParam):
1922

2023
if msg in self.msg_func_dict:
21-
ret=self.msg_func_dict[msg](self.webview,hwnd,wParam, lParam)
24+
argcount=self.msg_func_dict[msg].__code__.co_argcount
25+
ret=None
26+
if argcount==5:
27+
arg_vals=self.msg_func_dict[msg].__code__.co_varnames
28+
if arg_vals[0]=='self':
29+
ret=self.msg_func_dict[msg](self.webview,hwnd,wParam, lParam)
30+
elif argcount==4:
31+
ret=self.msg_func_dict[msg](self.webview,hwnd,wParam, lParam)
32+
elif argcount==3:
33+
ret=self.msg_func_dict[msg](hwnd,wParam, lParam)
34+
elif argcount==2:
35+
ret=self.msg_func_dict[msg](wParam, lParam)
2236
if ret!=None:
2337
return ret
2438
if hasattr(self,'onWndProcCallback'):
@@ -27,4 +41,30 @@ def _onWndProcCallback(self, hwnd, msg, wParam, lParam):
2741
return ret
2842
if msg == WinConst.WM_DESTROY:
2943
self.unhook_WndProc()
30-
return win32gui.CallWindowProc(self.oldWndProc, hwnd, msg, wParam, lParam)
44+
return win32gui.CallWindowProc(self.oldWndProc, hwnd, msg, wParam, lParam)
45+
46+
@staticmethod
47+
def value_to_msg(value,copydate=False):
48+
if copydate:
49+
cds=COPYDATASTRUCT()
50+
cds.dwData=0
51+
value=json.dumps(value).encode()
52+
cds.cbData = sizeof(create_string_buffer(value))
53+
cds.lpData = c_char_p(value)
54+
return byref(cds)
55+
else:
56+
value=json.dumps(value).encode()
57+
return c_char_p(value)
58+
@staticmethod
59+
def msg_to_value(wParam,lParam,copydate=False):
60+
if lParam!=0:
61+
try:
62+
if copydate:
63+
pCDS=cast(lParam, PCOPYDATASTRUCT)
64+
value=string_at(pCDS.contents.lpData).decode()
65+
else:
66+
value=cast(lParam, c_char_p).value.decode()
67+
except:
68+
return
69+
value=json.loads(value)
70+
return value

dist/MBPython-0.2.1.tar.gz

-17 KB
Binary file not shown.

0 commit comments

Comments
 (0)