Post a reply

Options
Add an Attachment

If you do not want to add an Attachment to your Post, please leave the Fields blank.

(maximum 10 MB; please compress large files; only common media, archive, text and programming file formats are allowed)

Options

Topic review

it.tgm

I was wondering if you had ever come up with a solution on how to add in the COMEvent Handler?
salam4ik

Session event handler through COM interface using pywin32

I try to use pywin32 to work with webdav server using COM interface. All work good, but now I want to see file transfer progress and try to handle FileTransferProgress event of session object. But with no luck.
Simple python 3.5 script:
# -*- coding: utf-8

import win32com.client as win32

class WinScp_ISessionEvents:
    def OnFileTransferProgress(self, e):
        print(e.FileProgress)

if __name__ == "__main__":
    wcpSession = win32.dynamic.Dispatch('WinSCP.Session')
    winscp_session_option = win32.dynamic.Dispatch('WinSCP.SessionOptions')
    winscp_session_option.Protocol = 3
    winscp_session_option.HostName = "webdav.yandex.ru/"
    winscp_session_option.UserName = "user"
    winscp_session_option.Password = "password"
    win32.WithEvents(wcpSession, WinScp_ISessionEvents)
    wcpSession.open(winscp_session_option)
    wcpSession.PutFiles('E:\Exchange\File.xls', '/File.xls')

its crash with error:
C:\Miniconda3\python.exe E:/backup_1c/winscp.py

Traceback (most recent call last):
  File "E:/backup_1c/winscp.py", line 16, in <module>
    wcpSession.open(winscp_session_option)
  File "<COMObject WinSCP.Session>", line 2, in open
pywintypes.com_error: (-2147352567, 'Error.', (0, 'mscorlib', 'Member group not found. (Exception HRESULT: 0x80020003 (DISP_E_MEMBERNOTFOUND))', None, 0, -2147352573), None)

Process finished with exit code 1

According to error message the problem is wrong function name in WinScp_ISessionEvents class. I have tried a lot of name variants such as OnFileTransferProgress, FileTransferProgress, Session_OnFileTransferProgress, Session_FileTransferProgress, etc. But error still raised.