From 2096f5d482b49a3a50b8aaba107887bc5a6e3131 Mon Sep 17 00:00:00 2001
From: vCaesar <vzvway@gmail.com>
Date: Mon, 21 Nov 2016 17:08:11 +0800
Subject: [PATCH] Add Process

---
 window/process.h | 133 +++++++++++++++++++++++++++++++++++++++++++++++
 window/window.h  |  67 +-----------------------
 2 files changed, 134 insertions(+), 66 deletions(-)
 create mode 100644 window/process.h

diff --git a/window/process.h b/window/process.h
new file mode 100644
index 0000000..ecbe46e
--- /dev/null
+++ b/window/process.h
@@ -0,0 +1,133 @@
+// Copyright 2016 The go-vgo Project Developers. See the COPYRIGHT
+// file at the top-level directory of this distribution and at
+// http://www.
+//
+// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
+// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
+// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
+// option. This file may not be copied, modified, or distributed
+// except according to those terms.
+
+// #include <regex.h>
+#include <string.h>
+#if defined(IS_MACOSX)
+	#if defined (__x86_64__)
+		#define RobotGo_64
+	#else
+		#define RobotGo_32
+	#endif
+	// #include <sys/utsname.h>
+	// #include <mach/task.h>
+	// #include <mach/mach_vm.h>
+
+	// Apple process API
+	#include <libproc.h>
+	#include <dlfcn.h>
+	#include <ApplicationServices/ApplicationServices.h>
+
+	#ifdef MAC_OS_X_VERSION_10_11
+		#define kAXValueCGPointType kAXValueTypeCGPoint
+		#define kAXValueCGSizeType  kAXValueTypeCGSize
+	#endif
+
+	#ifndef EXC_MASK_GUARD
+	#define EXC_MASK_GUARD 0
+	#endif
+#elif defined(USE_X11)
+	#if defined (__x86_64__)
+		#define RobotGo_64
+	#else
+		#define RobotGo_32
+	#endif
+
+	#include <X11/Xlib.h>
+	#include <X11/Xatom.h>
+
+	#ifndef X_HAVE_UTF8_STRING
+		#error It appears that X_HAVE_UTF8_STRING is not defined - \
+			   please verify that your version of XLib is supported
+	#endif
+#elif defined(IS_WINDOWS)
+	#if defined (_WIN64)
+		#define RobotGo_64
+	#else
+		#define RobotGo_32
+	#endif
+
+	#include <winuser.h>
+	#include <tchar.h>
+#endif
+
+typedef signed char			int8;		// Signed  8-Bit integer
+typedef signed short		int16;		// Signed 16-Bit integer
+typedef signed int			int32;		// Signed 32-Bit integer
+typedef signed long long	int64;		// Signed 64-Bit integer
+
+typedef unsigned char		uint8;		// Unsigned  8-Bit integer
+typedef unsigned short		uint16;		// Unsigned 16-Bit integer
+typedef unsigned int		uint32;		// Unsigned 32-Bit integer
+typedef unsigned long long	uint64;		// Unsigned 64-Bit integer
+
+typedef float				real32;		// 32-Bit float value
+typedef double				real64;		// 64-Bit float value
+
+#ifdef RobotGo_64
+
+	typedef  int64			 intptr;	//   Signed pointer integer
+	typedef uint64			uintptr;	// Unsigned pointer integer
+
+#else
+
+	typedef  int32			 intptr;	//   Signed pointer integer
+	typedef uint32			uintptr;	// Unsigned pointer integer
+
+#endif
+//
+
+struct _PData{
+	int32		ProcID;			// The process ID
+
+	char*		Name;			// Name of process
+	char*		Path;			// Path of process
+
+	bool		Is64Bit;		// Process is 64-Bit
+
+#if defined(IS_MACOSX)
+
+	task_t		Handle;			// The mach task
+
+#elif defined(USE_X11)
+
+	uint32		Handle;			// Unused handle
+
+#elif defined(IS_WINDOWS)
+
+	HANDLE		Handle;			// Process handle
+
+#endif
+};
+
+struct _PPData{
+	int32		ProcID;			// The process ID
+
+	char**		Name;			// Name of process
+	char**		Path;			// Path of process
+
+	bool		Is64Bit;		// Process is 64-Bit
+
+#if defined(IS_MACOSX)
+
+	task_t		Handle;			// The mach task
+
+#elif defined(USE_X11)
+
+	uint32		Handle;			// Unused handle
+
+#elif defined(IS_WINDOWS)
+
+	HANDLE		Handle;			// Process handle
+
+#endif
+};
+
+typedef struct _PData PData;
diff --git a/window/window.h b/window/window.h
index 344da8a..a20b39b 100644
--- a/window/window.h
+++ b/window/window.h
@@ -10,72 +10,7 @@
 
 // #include "../base/os.h"
 // #include <stdlib.h>
-
-#if defined(IS_MACOSX)
-	#if defined (__x86_64__)
-		#define RobotGo_64
-	#else
-		#define RobotGo_32
-	#endif
-
-	#include <dlfcn.h>
-	#include <ApplicationServices/ApplicationServices.h>
-	// #include <RunningApplications.h>
-	// #include <Foundation/Foundation.h>
-
-	#ifdef MAC_OS_X_VERSION_10_11
-		#define kAXValueCGPointType kAXValueTypeCGPoint
-		#define kAXValueCGSizeType  kAXValueTypeCGSize
-	#endif
-#elif defined(USE_X11)
-	#if defined (__x86_64__)
-		#define RobotGo_64
-	#else
-		#define RobotGo_32
-	#endif
-	#include <X11/Xlib.h>
-	#include <X11/Xatom.h>
-
-	#ifndef X_HAVE_UTF8_STRING
-		#error It appears that X_HAVE_UTF8_STRING is not defined - \
-			   please verify that your version of XLib is supported
-	#endif
-#elif defined(IS_WINDOWS)
-	#if defined (_WIN64)
-		#define RobotGo_64
-	#else
-		#define RobotGo_32
-	#endif
-
-	#include <winuser.h>
-	//#include <windows.h>
-	#include <tchar.h>
-#endif
-
-typedef signed char			int8;		// Signed  8-Bit integer
-typedef signed short		int16;		// Signed 16-Bit integer
-typedef signed int			int32;		// Signed 32-Bit integer
-typedef signed long long	int64;		// Signed 64-Bit integer
-
-typedef unsigned char		uint8;		// Unsigned  8-Bit integer
-typedef unsigned short		uint16;		// Unsigned 16-Bit integer
-typedef unsigned int		uint32;		// Unsigned 32-Bit integer
-typedef unsigned long long	uint64;		// Unsigned 64-Bit integer
-
-typedef float				real32;		// 32-Bit float value
-typedef double				real64;		// 64-Bit float value
-
-#ifdef RobotGo_64
-
-	typedef  int64			 intptr;	//   Signed pointer integer
-	typedef uint64			uintptr;	// Unsigned pointer integer
-
-#else
-
-	typedef  int32			 intptr;	//   Signed pointer integer
-	typedef uint32			uintptr;	// Unsigned pointer integer
-
-#endif
+#include "process.h"
 
 struct _MData{
 #if defined(IS_MACOSX)