# -*- coding: UTF-8 -*- 
'''


@author: niu
'''

__author__ = 'niu'

import win32api
import win32con
import os
import re
import shutil
import win32gui
from ctypes import *
import time

VK_CODE = {
    'backspace':[0x08],
    'tab':[0x09],
    'clear':[0x0C],
    'enter':[0x0D],
    'shift':[0x10],
    'ctrl':[0x11],
    'alt':[0x12],
    'pause':[0x13],
    'caps_lock':[0x14],
    'esc':[0x1B],
    'spacebar':[0x20],
    'page_up':[0x21],
    'page_down':[0x22],
    'end':[0x23],
    'home':[0x24],
    'left_arrow':[0x25],
    'up_arrow':[0x26],
    'right_arrow':[0x27],
    'down_arrow':[0x28],
    'select':[0x29],
    'print':[0x2A],
    'execute':[0x2B],
    'print_screen':[0x2C],
    'ins':[0x2D],
    'del':[0x2E],
    'help':[0x2F],
    '0':[0x30],
    '1':[0x31],
    '2':[0x32],
    '3':[0x33],
    '4':[0x34],
    '5':[0x35],
    '6':[0x36],
    '7':[0x37],
    '8':[0x38],
    '9':[0x39],
    'a':[0x41],
    'A':[0x10,0x41],
    'b':[0x42],
    'B':[0x10,0x42],
    'c':[0x43],
    'C':[0x10,0x43],
    'd':[0x44],
    'D':[0x10,0x44],
    'e':[0x45],
    'E':[0x10,0x45],
    'f':[0x46],
    'F':[0x10,0x46],
    'g':[0x47],
    'G':[0x10,0x47],
    'h':[0x48],
    'H':[0x10,0x48],
    'i':[0x49],
    'I':[0x10,0x49],
    'j':[0x4A],
    'j':[0x10,0x4A],
    'k':[0x4B],
    'K':[0x10,0x4B],
    'l':[0x4C],
    'L':[0x10,0x4C],
    'm':[0x4D],
    'M':[0x10,0x4D],
    'n':[0x4E],
    'N':[0x10,0x4E],
    'o':[0x4F],
    'O':[0x10,0x4F],
    'p':[0x50],
    'P':[0x10,0x50],
    'q':[0x51],
    'Q':[0x10,0x51],
    'r':[0x52],
    'R':[0x10,0x52],
    's':[0x53],
    'S':[0x10,0x53],
    't':[0x54],
    'T':[0x10,0x54],
    'u':[0x55],
    'U':[0x10,0x55],
    'v':[0x56],
    'V':[0x10,0x56],
    'w':[0x57],
    'W':[0x10,0x57],
    'x':[0x58],
    'X':[0x10,0x58],
    'y':[0x59],
    'Y':[0x10,0x59],
    'z':[0x5A],
    'Z':[0x10,0x5A],
    'numpad_0':[0x60],
    'numpad_1':[0x61],
    'numpad_2':[0x62],
    'numpad_3':[0x63],
    'numpad_4':[0x64],
    'numpad_5':[0x65],
    'numpad_6':[0x66],
    'numpad_7':[0x67],
    'numpad_8':[0x68],
    'numpad_9':[0x69],
    'multiply_key':[0x6A],
    'add_key':[0x6B],
    'separator_key':[0x6C],
    'subtract_key':[0x6D],
    'decimal_key':[0x6E],
    'divide_key':[0x6F],
    'F1':[0x70],
    'F2':[0x71],
    'F3':[0x72],
    'F4':[0x73],
    'F5':[0x74],
    'F6':[0x75],
    'F7':[0x76],
    'F8':[0x77],
    'F9':[0x78],
    'F10':[0x79],
    'F11':[0x7A],
    'F12':[0x7B],
    'F13':[0x7C],
    'F14':[0x7D],
    'F15':[0x7E],
    'F16':[0x7F],
    'F17':[0x80],
    'F18':[0x81],
    'F19':[0x82],
    'F20':[0x83],
    'F21':[0x84],
    'F22':[0x85],
    'F23':[0x86],
    'F24':[0x87],
    'num_lock':[0x90],
    'scroll_lock':[0x91],
    'left_shift':[0xA0],
    'right_shift ':[0xA1],
    'left_control':[0xA2],
    'right_control':[0xA3],
    'left_menu':[0xA4],
    'right_menu':[0xA5],
    'browser_back':[0xA6],
    'browser_forward':[0xA7],
    'browser_refresh':[0xA8],
    'browser_stop':[0xA9],
    'browser_search':[0xAA],
    'browser_favorites':[0xAB],
    'browser_start_and_home':[0xAC],
    'volume_mute':[0xAD],
    'volume_Down':[0xAE],
    'volume_up':[0xAF],
    'next_track':[0xB0],
    'previous_track':[0xB1],
    'stop_media':[0xB2],
    'play/pause_media':[0xB3],
    'start_mail':[0xB4],
    'select_media':[0xB5],
    'start_application_1':[0xB6],
    'start_application_2':[0xB7],
    'attn_key':[0xF6],
    'crsel_key':[0xF7],
    'exsel_key':[0xF8],
    'play_key':[0xFA],
    'zoom_key':[0xFB],
    'clear_key':[0xFE],
    '+':[0xBB],
    ',':[0xBC],
    '-':[0xBD],
    '.':[0xBE],
    '/':[0xBF],
    '`':[0xC0],
    ';':[0xBA],
    '[':[0xDB],
    '\\':[0xDC],
    ']':[0xDD],
    "'":[0xDE],
    '`':[0xC0],
    ':':[0x10,0xBA]}
#save="E:/versions/tomcatCsv/"
class POINT(Structure):
    _fields_ = [("x", c_ulong),("y", c_ulong)]

def printEachFile(filepath):
    pathDir =  os.listdir(filepath)
    for allDir in pathDir:
        child = os.path.join('%s%s' % (filepath, allDir))
        print child.decode('gbk')

def get_mouse_point():
    po = POINT()
    windll.user32.GetCursorPos(byref(po))
    return int(po.x), int(po.y)

def mouse_click(x=None,y=None):
    if not x is None and not y is None:
        mouse_move(x,y)
        time.sleep(0.05)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    time.sleep(0.05)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

def leftOneClick(x=None,y=None):
    if not x is None and not y is None:
        mouse_move(x,y)
        time.sleep(0.05)
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
        time.sleep(0.05)
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
    time.sleep(0.5)

def mouse_move(x,y):
    windll.user32.SetCursorPos(x, y)

def key_input(str=''):
    for c in str:
        for combine in VK_CODE[c]:
            win32api.keybd_event(combine,0,0,0)
        time.sleep(0.02)
        for combine in VK_CODE[c]:
            win32api.keybd_event(combine,0,win32con.KEYEVENTF_KEYUP,0)
    time.sleep(0.2)
    
def key_Ok():
    win32api.keybd_event(0x0D,0,0,0)
    time.sleep(0.1)
    win32api.keybd_event(0x0D,0,win32con.KEYEVENTF_KEYUP,0)
    time.sleep(0.5)
def key_del():
    for i in range(1,50):
        win32api.keybd_event(0x08,0,0,0)
        time.sleep(0.01)
        win32api.keybd_event(0x08,0,win32con.KEYEVENTF_KEYUP,0)
        time.sleep(0.01)
        
def createProject(fileName,save,projectName):
    leftOneClick(17,32)
    leftOneClick(100,56)
    leftOneClick(305,56)
    key_Ok()
    time.sleep(1)
    procHandle = win32gui.FindWindow(None,"New Project Wizard - Understand - (Build 857)")
    win32gui.SetWindowPos(procHandle,win32con.HWND_TOPMOST,200,200,0,0,win32con.SWP_NOSIZE);
    time.sleep(0.5)
    
    leftDoubleClick(661,446)
    key_input(fileName)
    key_Ok()
    time.sleep(1)
    key_Ok()
    
    leftOneClick(580,254)
    time.sleep(1)
    procHandle = win32gui.FindWindow(None,"Add a Project Directory - Understand - (Build 857)")
    win32gui.SetWindowPos(procHandle,win32con.HWND_TOPMOST,200,200,0,0,win32con.SWP_NOSIZE);
    time.sleep(0.5)
    leftOneClick(662,251)
    leftOneClick(799,423)
    leftOneClick(214,140)
    key_Ok()
    time.sleep(1)
    key_Ok()
    time.sleep(1)
    key_Ok()
    time.sleep(1)
    key_Ok()
    time.sleep(1)
    key_Ok()
    time.sleep(35)
    
    leftOneClick(234,34) #import csv start with the report
    leftOneClick(267,130)
    leftOneClick(449,158)
    leftOneClick(654,158)
    time.sleep(2)
    procHandle = win32gui.FindWindow(None,"File Dependencies Export Options - Understand - (Build 857)")
    win32gui.SetWindowPos(procHandle,win32con.HWND_TOPMOST,200,200,0,0,win32con.SWP_NOSIZE);
    time.sleep(0.5)
    leftDoubleClick(500,278)
    key_del()
    key_input(save+fileName+".csv")
    leftOneClick(397,338)
    leftOneClick(396,360)
    leftOneClick(236,388)
    
    leftOneClick(235,468)
    key_Ok()
    

def leftDoubleClick(x,y):
    mouse_move(x,y)
    time.sleep(0.05)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)
    time.sleep(0.05)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0)
    win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP, 0, 0, 0, 0)

def understand(filepath,save,projectName):
    # win32api.ShellExecute(0, 'open', 'D:\\Program Files (x86)\\SciTools\\bin\\pc-win32\\understand.exe', '', '', 1)
    files=os.listdir(filepath)
    versionNums=[]
    for fileName in files:
        if os.path.isdir(filepath+"\\"+fileName):
            n=re.findall(r"\d+\.?\d*",fileName)
            versionNums.append(int(n[0]))
    #sorted(versionNums)
    versionNums.sort()
    print versionNums
    for version in versionNums:
        fileName=projectName+str(version)
        print fileName
        createProject(fileName,save,projectName)
        path = filepath+"\\"+str(version)
        shutil.rmtree(path)   
        time.sleep(5)

if __name__ == "__main__":
    time.sleep(5)
    understand("D:\\understand\\tomcatVersions","E:/versions/tomcatCsv/","tomcat")