summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sapi/cli/php_cli.c3
-rw-r--r--win32/console.c12
-rw-r--r--win32/console.h5
3 files changed, 18 insertions, 2 deletions
diff --git a/sapi/cli/php_cli.c b/sapi/cli/php_cli.c
index 07e8a8c803..d1fa6a6d00 100644
--- a/sapi/cli/php_cli.c
+++ b/sapi/cli/php_cli.c
@@ -675,8 +675,7 @@ static int do_cli(int argc, char **argv) /* {{{ */
char *arg_free=NULL, **arg_excp=&arg_free;
char *script_file=NULL, *translated_path = NULL;
#if defined(PHP_WIN32) && !defined(PHP_CLI_WIN32_NO_CONSOLE) && (HAVE_LIBREADLINE || HAVE_LIBEDIT) && !defined(COMPILE_DL_READLINE)
- DWORD pl[1];
- int interactive = (GetConsoleProcessList(pl, 1) == 1) && !IsDebuggerPresent();
+ int interactive = php_win32_console_is_own();
#else
int interactive=0;
#endif
diff --git a/win32/console.c b/win32/console.c
index 78836493e4..07e6afa940 100644
--- a/win32/console.c
+++ b/win32/console.c
@@ -91,3 +91,15 @@ PHP_WINUTIL_API BOOL php_win32_console_fileno_set_vt100(zend_long fileno, BOOL e
}
return result;
}
+
+PHP_WINUTIL_API BOOL php_win32_console_is_own(void)
+{
+ CONSOLE_SCREEN_BUFFER_INFO csbi;
+
+ if (GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &csbi) && !IsDebuggerPresent()) {
+ return !csbi.dwCursorPosition.X && !csbi.dwCursorPosition.Y;
+ }
+
+ return FALSE;
+}
+
diff --git a/win32/console.h b/win32/console.h
index 0a2213c7ef..ab62a6ba35 100644
--- a/win32/console.h
+++ b/win32/console.h
@@ -56,4 +56,9 @@ associated to a file descriptor
*/
PHP_WINUTIL_API BOOL php_win32_console_fileno_set_vt100(zend_long fileno, BOOL enable);
+/* Check, whether the program has its own console. If a process was launched
+ through a GUI, it will have it's own console. For more info see
+ http://support.microsoft.com/kb/99115 */
+PHP_WINUTIL_API BOOL php_win32_console_is_own(void);
+
#endif