{"action":"created","comment":{"url":"https://api.github.com/repos/pywinauto/pywinauto/pulls/comments/61527234","id":61527234,"diff_hunk":"@@ -0,0 +1,317 @@\n+from ctypes import wintypes\n+from ctypes import windll, CFUNCTYPE, POINTER, c_int, c_uint, c_long, c_longlong, c_ulong, c_void_p, byref, sizeof\n+from ctypes import Structure\n+import atexit\n+\n+if sizeof(POINTER(c_int)) * 8 == 64:\n+    hinstance = c_longlong\n+else:\n+    hinstance = c_long\n+\n+cmp_func = CFUNCTYPE(c_int, c_int, hinstance, POINTER(c_void_p))\n+DWORD = c_ulong\n+\n+windll.kernel32.GetModuleHandleA.restype = wintypes.HMODULE\n+windll.kernel32.GetModuleHandleA.argtypes = [wintypes.LPCWSTR]\n+\n+windll.user32.SetWindowsHookExA.restype = c_int\n+windll.user32.SetWindowsHookExA.argtypes = [c_int, cmp_func, hinstance, DWORD]\n+\n+\n+class MSG(Structure):\n+    \"\"\"MGS Structure for GetMessageW methods\"\"\"\n+    _fields_ = [(\"hWnd\", hinstance),\n+                (\"message\", c_uint),\n+                (\"wParam\", wintypes.WPARAM),\n+                (\"lParam\", wintypes.LPARAM),\n+                (\"time\", wintypes.DWORD),\n+                (\"pt\", wintypes.POINT)]\n+\n+windll.user32.GetMessageW.argtypes = [MSG, hinstance, c_uint, c_uint]\n+windll.user32.TranslateMessage.argtypes = [POINTER(MSG)]\n+windll.user32.DispatchMessageW.argtypes = [POINTER(MSG)]\n+\n+\n+def _callback_pointer(handler):\n+    \"\"\"Create and return C-pointer\"\"\"\n+    return cmp_func(handler)\n+\n+\n+class KeyboardEvent(object):\n+    \"\"\"Is created when keyboard event catch\"\"\"\n+    def __init__(self, current_key=None, event_type=None, pressed_key=None):\n+        self.current_key = current_key\n+        self.event_type = event_type\n+        self.pressed_key = pressed_key\n+\n+\n+class MouseEvent(object):\n+    \"\"\"Is created when mouse event catch\"\"\"\n+\n+    def __init__(self, current_key=None, event_type=None):\n+        self.current_key = current_key\n+        self.event_type = event_type\n+\n+\n+class Hook(object):\n+    \"\"\"Allow hook low level keyboard and mouse events\"\"\"\n+    MOUSE_ID_TO_KEY = {512: 'Move',\n+                       513: 'LButton',\n+                       514: 'LButton',\n+                       516: 'RButton',\n+                       517: 'RButton',\n+                       519: 'WheelButton',\n+                       520: 'WheelButton',\n+                       522: 'Wheel'}\n+\n+    MOUSE_ID_TO_EVENT_TYPE = {512: None,\n+                              513: 'key down',\n+                              514: 'key up',\n+                              516: 'key down',\n+                              517: 'key up',\n+                              519: 'key down',\n+                              520: 'key up',\n+                              522: None}\n+\n+    ID_TO_KEY = {8: 'Back',\n+                 9: 'Tab',\n+                 13: 'Return',\n+                 20: 'Capital',\n+                 27: 'Escape',\n+                 32: 'Space',\n+                 33: 'Prior',\n+                 34: 'Next',\n+                 35: 'End',\n+                 36: 'Home',\n+                 37: 'Left',\n+                 38: 'Up',\n+                 39: 'Right',\n+                 40: 'Down',\n+                 44: 'Snapshot',\n+                 46: 'Delete',\n+                 48: '0',\n+                 49: '1',\n+                 50: '2',\n+                 51: '3',\n+                 52: '4',\n+                 53: '5',\n+                 54: '6',\n+                 55: '7',\n+                 56: '8',\n+                 57: '9',\n+                 65: 'A',\n+                 66: 'B',\n+                 67: 'C',\n+                 68: 'D',\n+                 69: 'E',\n+                 70: 'F',\n+                 71: 'G',\n+                 72: 'H',\n+                 73: 'I',\n+                 74: 'J',\n+                 75: 'K',\n+                 76: 'L',\n+                 77: 'M',\n+                 78: 'N',\n+                 79: 'O',\n+                 80: 'P',\n+                 81: 'Q',\n+                 82: 'R',\n+                 83: 'S',\n+                 84: 'T',\n+                 85: 'U',\n+                 86: 'V',\n+                 87: 'W',\n+                 88: 'X',\n+                 89: 'Y',\n+                 90: 'Z',\n+                 91: 'Lwin',\n+                 92: 'Rwin',\n+                 93: 'App',\n+                 95: 'Sleep',\n+                 96: 'Numpad0',\n+                 97: 'Numpad1',\n+                 98: 'Numpad2',\n+                 99: 'Numpad3',\n+                 100: 'Numpad4',\n+                 101: 'Numpad5',\n+                 102: 'Numpad6',\n+                 103: 'Numpad7',\n+                 104: 'Numpad8',\n+                 105: 'Numpad9',\n+                 106: 'Multiply',\n+                 107: 'Add',\n+                 109: 'Subtract',\n+                 110: 'Decimal',\n+                 111: 'Divide',\n+                 112: 'F1',\n+                 113: 'F2',\n+                 114: 'F3',\n+                 115: 'F4',\n+                 116: 'F5',\n+                 117: 'F6',\n+                 118: 'F7',\n+                 119: 'F8',\n+                 120: 'F9',\n+                 121: 'F10',\n+                 122: 'F11',\n+                 123: 'F12',\n+                 144: 'Numlock',\n+                 160: 'Lshift',\n+                 161: 'Rshift',\n+                 162: 'Lcontrol',\n+                 163: 'Rcontrol',\n+                 164: 'Lmenu',\n+                 165: 'Rmenu',\n+                 186: 'Oem_1',\n+                 187: 'Oem_Plus',\n+                 188: 'Oem_Comma',\n+                 189: 'Oem_Minus',\n+                 190: 'Oem_Period',\n+                 191: 'Oem_2',\n+                 192: 'Oem_3',\n+                 219: 'Oem_4',\n+                 220: 'Oem_5',\n+                 221: 'Oem_6',\n+                 222: 'Oem_7',\n+                 1001: 'mouse left',  # mouse hotkeys\n+                 1002: 'mouse right',\n+                 1003: 'mouse middle',\n+                 1000: 'mouse move',  # single event hotkeys\n+                 1004: 'mouse wheel up',\n+                 1005: 'mouse wheel down',\n+                 1010: 'Ctrl',  # merged hotkeys\n+                 1011: 'Alt',\n+                 1012: 'Shift',\n+                 1013: 'Win'}\n+\n+    event_types = {0x100: 'key down',  # WM_KeyDown for normal keys\n+                   0x101: 'key up',  # WM_KeyUp for normal keys\n+                   0x104: 'key down',  # WM_SYSKEYDOWN, used for Alt key.\n+                   0x105: 'key up',  # WM_SYSKEYUP, used for Alt key.\n+                   }\n+\n+    WH_KEYBOARD_LL = 0x00D\n+    WH_MOUSE_LL = 0x0E\n+    WM_QUIT = 0x0012\n+\n+    def __init__(self):\n+        self.handler = 0\n+        self.pressed_keys = []\n+        self.keyboard_id = None\n+        self.mouse_id = None\n+        self.mouse_is_hook = False\n+        self.keyboard_is_hook = False\n+\n+    def hook(self, keyboard=True, mouse=False):\n+        \"\"\"Hook mouse and/or keyboard events\"\"\"\n+        self.mouse_is_hook = mouse\n+        self.keyboard_is_hook = keyboard\n+\n+        if not self.mouse_is_hook and not self.keyboard_is_hook:\n+            return\n+\n+        if self.keyboard_is_hook:\n+            def keyboard_low_level_handler(code, event_code, kb_data_ptr):\n+                \"\"\"Execute when keyboard low level event was catched\"\"\"\n+                try:\n+                    key_code = 0xFFFFFFFF & kb_data_ptr[0]\n+                    current_key = self.ID_TO_KEY[key_code]\n+                    event_type = self.event_types[0xFFFFFFFF & event_code]\n+\n+                    if event_type == 'key down':\n+                        self.pressed_keys.append(current_key)\n+\n+                    if event_type == 'key up':\n+                        self.pressed_keys.remove(current_key)\n+\n+                    event = KeyboardEvent(current_key, event_type, self.pressed_keys)\n+\n+                    if self.handler != 0:\n+                        self.handler(event)\n+\n+                finally:\n+                    return windll.user32.CallNextHookEx(self.keyboard_id, code, event_code, kb_data_ptr)\n+\n+            keyboard_pointer = _callback_pointer(keyboard_low_level_handler)\n+\n+            self.keyboard_id = windll.user32.SetWindowsHookExA(self.WH_KEYBOARD_LL, keyboard_pointer,\n+                                                               windll.kernel32.GetModuleHandleA(None),\n+                                                               0)\n+\n+        if self.mouse_is_hook:\n+            def mouse_low_level_handler(code, event_code, kb_data_ptr):\n+                \"\"\"Execute when mouse low level event was catched\"\"\"\n+                try:\n+                    current_key = self.MOUSE_ID_TO_KEY[event_code]\n+                    if current_key != 'Move':\n+                        event_type = self.MOUSE_ID_TO_EVENT_TYPE[event_code]\n+                        event = MouseEvent(current_key, event_type)\n+\n+                        if self.handler != 0:\n+                            self.handler(event)\n+\n+                finally:\n+                    return windll.user32.CallNextHookEx(self.mouse_id, code, event_code, kb_data_ptr)\n+\n+            mouse_pointer = _callback_pointer(mouse_low_level_handler)\n+            self.mouse_id = windll.user32.SetWindowsHookExA(self.WH_MOUSE_LL, mouse_pointer,\n+                                                            windll.kernel32.GetModuleHandleA(None), 0)\n+\n+        self.listen()\n+\n+    def unhook_mouse(self):\n+        \"\"\"Unhook mouse events\"\"\"\n+        self.mouse_is_hook = False\n+        windll.user32.UnhookWindowsHookEx(self.mouse_id)\n+\n+    def unhook_keyboard(self):\n+        \"\"\"Unhook keyboard events\"\"\"\n+        self.keyboard_is_hook = False\n+        windll.user32.UnhookWindowsHookEx(self.keyboard_id)\n+\n+    def listen(self):\n+        \"\"\"Listen events\"\"\"\n+        atexit.register(windll.user32.UnhookWindowsHookEx, self.keyboard_id)\n+        atexit.register(windll.user32.UnhookWindowsHookEx, self.mouse_id)\n+\n+        message_pointer = MSG()\n+\n+        while self.mouse_is_hook or self.keyboard_is_hook:\n+            msg = windll.user32.GetMessageW(message_pointer, 0, 0, 0)","path":"pywinauto/hooks.py","position":281,"original_position":281,"commit_id":"1da9eee19ab58c30f34335acc5d3b108335bf290","original_commit_id":"1da9eee19ab58c30f34335acc5d3b108335bf290","user":{"login":"airelil","id":795040,"avatar_url":"https://avatars.githubusercontent.com/u/795040?v=3","gravatar_id":"","url":"https://api.github.com/users/airelil","html_url":"https://github.com/airelil","followers_url":"https://api.github.com/users/airelil/followers","following_url":"https://api.github.com/users/airelil/following{/other_user}","gists_url":"https://api.github.com/users/airelil/gists{/gist_id}","starred_url":"https://api.github.com/users/airelil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/airelil/subscriptions","organizations_url":"https://api.github.com/users/airelil/orgs","repos_url":"https://api.github.com/users/airelil/repos","events_url":"https://api.github.com/users/airelil/events{/privacy}","received_events_url":"https://api.github.com/users/airelil/received_events","type":"User","site_admin":false},"body":"@MaxSamokhvalov you don't check the return value. Did you read the MSDN about [GetMessage](https://msdn.microsoft.com/en-us/library/windows/desktop/ms644936(v=vs.85).aspx) that I pointed out ? I'd still consider to use non-blocking functions. For example, using [PeekMessage](https://msdn.microsoft.com/en-us/library/windows/desktop/ms644943(v=vs.85).aspx) will allow to be more responsive with more frequent checking the main condition ```while self.mouse_is_hook or self.keyboard_is_hook```","created_at":"2016-04-29T01:39:29Z","updated_at":"2016-04-29T01:39:29Z","html_url":"https://github.com/pywinauto/pywinauto/pull/188#discussion_r61527234","pull_request_url":"https://api.github.com/repos/pywinauto/pywinauto/pulls/188","_links":{"self":{"href":"https://api.github.com/repos/pywinauto/pywinauto/pulls/comments/61527234"},"html":{"href":"https://github.com/pywinauto/pywinauto/pull/188#discussion_r61527234"},"pull_request":{"href":"https://api.github.com/repos/pywinauto/pywinauto/pulls/188"}}},"pull_request":{"url":"https://api.github.com/repos/pywinauto/pywinauto/pulls/188","id":67854028,"html_url":"https://github.com/pywinauto/pywinauto/pull/188","diff_url":"https://github.com/pywinauto/pywinauto/pull/188.diff","patch_url":"https://github.com/pywinauto/pywinauto/pull/188.patch","issue_url":"https://api.github.com/repos/pywinauto/pywinauto/issues/188","number":188,"state":"open","locked":false,"title":"hooks.py module (implement #43)","user":{"login":"MaxSamokhvalov","id":5138953,"avatar_url":"https://avatars.githubusercontent.com/u/5138953?v=3","gravatar_id":"","url":"https://api.github.com/users/MaxSamokhvalov","html_url":"https://github.com/MaxSamokhvalov","followers_url":"https://api.github.com/users/MaxSamokhvalov/followers","following_url":"https://api.github.com/users/MaxSamokhvalov/following{/other_user}","gists_url":"https://api.github.com/users/MaxSamokhvalov/gists{/gist_id}","starred_url":"https://api.github.com/users/MaxSamokhvalov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MaxSamokhvalov/subscriptions","organizations_url":"https://api.github.com/users/MaxSamokhvalov/orgs","repos_url":"https://api.github.com/users/MaxSamokhvalov/repos","events_url":"https://api.github.com/users/MaxSamokhvalov/events{/privacy}","received_events_url":"https://api.github.com/users/MaxSamokhvalov/received_events","type":"User","site_admin":false},"body":"hooks.py was added","created_at":"2016-04-26T09:33:50Z","updated_at":"2016-04-29T01:39:29Z","closed_at":null,"merged_at":null,"merge_commit_sha":"0f1a5b8ed4b9f2bffe8a1fb77b479639c6c966de","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/pywinauto/pywinauto/pulls/188/commits","review_comments_url":"https://api.github.com/repos/pywinauto/pywinauto/pulls/188/comments","review_comment_url":"https://api.github.com/repos/pywinauto/pywinauto/pulls/comments{/number}","comments_url":"https://api.github.com/repos/pywinauto/pywinauto/issues/188/comments","statuses_url":"https://api.github.com/repos/pywinauto/pywinauto/statuses/1da9eee19ab58c30f34335acc5d3b108335bf290","head":{"label":"MaxSamokhvalov:UIA","ref":"UIA","sha":"1da9eee19ab58c30f34335acc5d3b108335bf290","user":{"login":"MaxSamokhvalov","id":5138953,"avatar_url":"https://avatars.githubusercontent.com/u/5138953?v=3","gravatar_id":"","url":"https://api.github.com/users/MaxSamokhvalov","html_url":"https://github.com/MaxSamokhvalov","followers_url":"https://api.github.com/users/MaxSamokhvalov/followers","following_url":"https://api.github.com/users/MaxSamokhvalov/following{/other_user}","gists_url":"https://api.github.com/users/MaxSamokhvalov/gists{/gist_id}","starred_url":"https://api.github.com/users/MaxSamokhvalov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MaxSamokhvalov/subscriptions","organizations_url":"https://api.github.com/users/MaxSamokhvalov/orgs","repos_url":"https://api.github.com/users/MaxSamokhvalov/repos","events_url":"https://api.github.com/users/MaxSamokhvalov/events{/privacy}","received_events_url":"https://api.github.com/users/MaxSamokhvalov/received_events","type":"User","site_admin":false},"repo":{"id":57081285,"name":"pywinauto","full_name":"MaxSamokhvalov/pywinauto","owner":{"login":"MaxSamokhvalov","id":5138953,"avatar_url":"https://avatars.githubusercontent.com/u/5138953?v=3","gravatar_id":"","url":"https://api.github.com/users/MaxSamokhvalov","html_url":"https://github.com/MaxSamokhvalov","followers_url":"https://api.github.com/users/MaxSamokhvalov/followers","following_url":"https://api.github.com/users/MaxSamokhvalov/following{/other_user}","gists_url":"https://api.github.com/users/MaxSamokhvalov/gists{/gist_id}","starred_url":"https://api.github.com/users/MaxSamokhvalov/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/MaxSamokhvalov/subscriptions","organizations_url":"https://api.github.com/users/MaxSamokhvalov/orgs","repos_url":"https://api.github.com/users/MaxSamokhvalov/repos","events_url":"https://api.github.com/users/MaxSamokhvalov/events{/privacy}","received_events_url":"https://api.github.com/users/MaxSamokhvalov/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/MaxSamokhvalov/pywinauto","description":"Windows GUI Automation with Python (64-bit Py3 compatible)","fork":true,"url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto","forks_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/forks","keys_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/keys{/key_id}","collaborators_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/teams","hooks_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/hooks","issue_events_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/issues/events{/number}","events_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/events","assignees_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/assignees{/user}","branches_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/branches{/branch}","tags_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/tags","blobs_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/git/refs{/sha}","trees_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/git/trees{/sha}","statuses_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/statuses/{sha}","languages_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/languages","stargazers_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/stargazers","contributors_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/contributors","subscribers_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/subscribers","subscription_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/subscription","commits_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/commits{/sha}","git_commits_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/git/commits{/sha}","comments_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/comments{/number}","issue_comment_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/issues/comments{/number}","contents_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/contents/{+path}","compare_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/compare/{base}...{head}","merges_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/merges","archive_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/downloads","issues_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/issues{/number}","pulls_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/pulls{/number}","milestones_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/milestones{/number}","notifications_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/labels{/name}","releases_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/releases{/id}","deployments_url":"https://api.github.com/repos/MaxSamokhvalov/pywinauto/deployments","created_at":"2016-04-25T22:46:06Z","updated_at":"2016-04-25T22:46:07Z","pushed_at":"2016-04-28T20:31:19Z","git_url":"git://github.com/MaxSamokhvalov/pywinauto.git","ssh_url":"git@github.com:MaxSamokhvalov/pywinauto.git","clone_url":"https://github.com/MaxSamokhvalov/pywinauto.git","svn_url":"https://github.com/MaxSamokhvalov/pywinauto","homepage":"http://pywinauto.github.io/","size":20421,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":false,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"pywinauto:UIA","ref":"UIA","sha":"65fd517fce7d762c7863d60c9fc69a214a7e31af","user":{"login":"pywinauto","id":12541065,"avatar_url":"https://avatars.githubusercontent.com/u/12541065?v=3","gravatar_id":"","url":"https://api.github.com/users/pywinauto","html_url":"https://github.com/pywinauto","followers_url":"https://api.github.com/users/pywinauto/followers","following_url":"https://api.github.com/users/pywinauto/following{/other_user}","gists_url":"https://api.github.com/users/pywinauto/gists{/gist_id}","starred_url":"https://api.github.com/users/pywinauto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pywinauto/subscriptions","organizations_url":"https://api.github.com/users/pywinauto/orgs","repos_url":"https://api.github.com/users/pywinauto/repos","events_url":"https://api.github.com/users/pywinauto/events{/privacy}","received_events_url":"https://api.github.com/users/pywinauto/received_events","type":"Organization","site_admin":false},"repo":{"id":36223210,"name":"pywinauto","full_name":"pywinauto/pywinauto","owner":{"login":"pywinauto","id":12541065,"avatar_url":"https://avatars.githubusercontent.com/u/12541065?v=3","gravatar_id":"","url":"https://api.github.com/users/pywinauto","html_url":"https://github.com/pywinauto","followers_url":"https://api.github.com/users/pywinauto/followers","following_url":"https://api.github.com/users/pywinauto/following{/other_user}","gists_url":"https://api.github.com/users/pywinauto/gists{/gist_id}","starred_url":"https://api.github.com/users/pywinauto/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/pywinauto/subscriptions","organizations_url":"https://api.github.com/users/pywinauto/orgs","repos_url":"https://api.github.com/users/pywinauto/repos","events_url":"https://api.github.com/users/pywinauto/events{/privacy}","received_events_url":"https://api.github.com/users/pywinauto/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/pywinauto/pywinauto","description":"Windows GUI Automation with Python (64-bit Py3 compatible)","fork":false,"url":"https://api.github.com/repos/pywinauto/pywinauto","forks_url":"https://api.github.com/repos/pywinauto/pywinauto/forks","keys_url":"https://api.github.com/repos/pywinauto/pywinauto/keys{/key_id}","collaborators_url":"https://api.github.com/repos/pywinauto/pywinauto/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/pywinauto/pywinauto/teams","hooks_url":"https://api.github.com/repos/pywinauto/pywinauto/hooks","issue_events_url":"https://api.github.com/repos/pywinauto/pywinauto/issues/events{/number}","events_url":"https://api.github.com/repos/pywinauto/pywinauto/events","assignees_url":"https://api.github.com/repos/pywinauto/pywinauto/assignees{/user}","branches_url":"https://api.github.com/repos/pywinauto/pywinauto/branches{/branch}","tags_url":"https://api.github.com/repos/pywinauto/pywinauto/tags","blobs_url":"https://api.github.com/repos/pywinauto/pywinauto/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/pywinauto/pywinauto/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/pywinauto/pywinauto/git/refs{/sha}","trees_url":"https://api.github.com/repos/pywinauto/pywinauto/git/trees{/sha}","statuses_url":"https://api.github.com/repos/pywinauto/pywinauto/statuses/{sha}","languages_url":"https://api.github.com/repos/pywinauto/pywinauto/languages","stargazers_url":"https://api.github.com/repos/pywinauto/pywinauto/stargazers","contributors_url":"https://api.github.com/repos/pywinauto/pywinauto/contributors","subscribers_url":"https://api.github.com/repos/pywinauto/pywinauto/subscribers","subscription_url":"https://api.github.com/repos/pywinauto/pywinauto/subscription","commits_url":"https://api.github.com/repos/pywinauto/pywinauto/commits{/sha}","git_commits_url":"https://api.github.com/repos/pywinauto/pywinauto/git/commits{/sha}","comments_url":"https://api.github.com/repos/pywinauto/pywinauto/comments{/number}","issue_comment_url":"https://api.github.com/repos/pywinauto/pywinauto/issues/comments{/number}","contents_url":"https://api.github.com/repos/pywinauto/pywinauto/contents/{+path}","compare_url":"https://api.github.com/repos/pywinauto/pywinauto/compare/{base}...{head}","merges_url":"https://api.github.com/repos/pywinauto/pywinauto/merges","archive_url":"https://api.github.com/repos/pywinauto/pywinauto/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/pywinauto/pywinauto/downloads","issues_url":"https://api.github.com/repos/pywinauto/pywinauto/issues{/number}","pulls_url":"https://api.github.com/repos/pywinauto/pywinauto/pulls{/number}","milestones_url":"https://api.github.com/repos/pywinauto/pywinauto/milestones{/number}","notifications_url":"https://api.github.com/repos/pywinauto/pywinauto/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/pywinauto/pywinauto/labels{/name}","releases_url":"https://api.github.com/repos/pywinauto/pywinauto/releases{/id}","deployments_url":"https://api.github.com/repos/pywinauto/pywinauto/deployments","created_at":"2015-05-25T09:50:40Z","updated_at":"2016-04-28T19:55:45Z","pushed_at":"2016-04-28T20:31:20Z","git_url":"git://github.com/pywinauto/pywinauto.git","ssh_url":"git@github.com:pywinauto/pywinauto.git","clone_url":"https://github.com/pywinauto/pywinauto.git","svn_url":"https://github.com/pywinauto/pywinauto","homepage":"http://pywinauto.github.io/","size":21886,"stargazers_count":165,"watchers_count":165,"language":"Python","has_issues":true,"has_downloads":false,"has_wiki":true,"has_pages":false,"forks_count":60,"mirror_url":null,"open_issues_count":42,"forks":60,"open_issues":42,"watchers":165,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/pywinauto/pywinauto/pulls/188"},"html":{"href":"https://github.com/pywinauto/pywinauto/pull/188"},"issue":{"href":"https://api.github.com/repos/pywinauto/pywinauto/issues/188"},"comments":{"href":"https://api.github.com/repos/pywinauto/pywinauto/issues/188/comments"},"review_comments":{"href":"https://api.github.com/repos/pywinauto/pywinauto/pulls/188/comments"},"review_comment":{"href":"https://api.github.com/repos/pywinauto/pywinauto/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/pywinauto/pywinauto/pulls/188/commits"},"statuses":{"href":"https://api.github.com/repos/pywinauto/pywinauto/statuses/1da9eee19ab58c30f34335acc5d3b108335bf290"}}}}