Python登录Sap
需要准备的工具:
Spy++:可以查看程序的句柄和类。
Python需要安装的库:pywin32
import win32api,win32gui,win32con,time, subprocess
class Face:
def __init__(self, fgFilePath):
self.Mhandle = win32gui.FindWindow("#32770", "SAP Logon 760")
def find_idxSubHandle(pHandle, winClass, index):
assert type(index) == int and index >= 0
handle = win32gui.FindWindowEx(p.Mhandle, 0, winClass, None)
while index > 0:
handle = win32gui.FindWindowEx(p.Mhandle, handle, winClass, None)
index -= 1
return handle
def find_subHandle(pHandle,winClassList):
assert type(winClassList) == list
if len(winClassList) == 1:
return p.find_idxSubHandle(winClassList[0][0], winClassList[0][1])
else:
pHandle = p.find_idxSubHandle(p.Mhandle, winClassList[0][0], winClassList[0][1])
return p.find_subHandle(pHandle,winClassList[1:])
sap_app = r"C:\Program Files (x86)\SAP\FrontEnd\SAPgui\saplogon.exe"
subprocess.Popen(sap_app)
hwnd = win32gui.FindWindow('#32770', "SAP Logon 760")
while hwnd == 0:
hwnd = win32gui.FindWindow('#32770', "SAP Logon 760")
if hwnd == 0:
print('请等待。。。')
time.sleep(1)
p=Face('None')
pHandle=p.Mhandle
q = p.find_subHandle([("Edit", 1)])
win32gui.SendMessage(q,win32con.WM_SETTEXT,None,"服务器")
time.sleep(0.1)
dlg = win32gui.FindWindowEx(hwnd, None, "Button", None)
win32gui.SendMessage(dlg, win32con.WM_LBUTTONDOWN, 0)
win32gui.SendMessage(dlg, win32con.WM_LBUTTONUP, 0)
time.sleep(1)
id=['53','53','53','53','53','53','9']
pwd=['49','50','51','52','53','54']
for i in id:
win32api.keybd_event(int(i), 0, 0, 0)
win32api.keybd_event(int(i),0,win32con.KEYEVENTF_KEYUP,0)
time.sleep(0.5)
win32api.keybd_event(16, 0, 0, 0)
win32api.keybd_event(16,0,win32con.KEYEVENTF_KEYUP,0)
for i in pwd:
win32api.keybd_event(int(i), 0, 0, 0)
win32api.keybd_event(int(i),0,win32con.KEYEVENTF_KEYUP,0)
win32api.keybd_event(13, 0, 0, 0)
win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)
classname = "#32770"
titlename = "多次登录许可证信息"
time.sleep(1)
hwnd = win32gui.FindWindow(classname, titlename)
if hwnd!=0:
left, top, right, bottom = win32gui.GetWindowRect(hwnd)
height=(bottom-top)*0.43
place=top+int(height)
win32api.SetCursorPos([left+10,place])
win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)