mirror of
https://git.lyx.org/repos/lyx.git
synced 2024-12-22 13:18:28 +00:00
Ruurd's Win32 code to close the console window immediately after
it is opened. git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@9490 a592a061-630c-0410-9148-cb99ea01b6c8
This commit is contained in:
parent
2365df80bf
commit
65791cb6a1
@ -1,3 +1,9 @@
|
||||
2005-01-17 Angus Leeming <leeming@lyx.org>
|
||||
|
||||
* os_win32.C (init): Add Ruurd's original code to close the
|
||||
console window that Windows opens for us, together with a note
|
||||
explaining the alternative approach.
|
||||
|
||||
2005-01-17 Angus Leeming <leeming@lyx.org>
|
||||
|
||||
* package.C.in (get_binary_path): convert relative paths stored
|
||||
|
@ -35,8 +35,85 @@ namespace lyx {
|
||||
namespace support {
|
||||
namespace os {
|
||||
|
||||
void init(int, char *[])
|
||||
{}
|
||||
void os::init(int /* argc */, char * argv[])
|
||||
{
|
||||
#ifdef _WIN32
|
||||
/* Note from Angus, 17 Jan 2005:
|
||||
*
|
||||
* The code below is taken verbatim from Ruurd's original patch
|
||||
* porting LyX to Win32.
|
||||
*
|
||||
* Windows allows us to define LyX either as a console-based app
|
||||
* or as a GUI-based app. Ruurd decided to define LyX as a
|
||||
* console-based app with a "main" function rather than a "WinMain"
|
||||
* function as the point of entry to the program, but to
|
||||
* immediately close the console window that Windows helpfully
|
||||
* opens for us. Doing so allows the user to see all of LyX's
|
||||
* debug output simply by running LyX from a DOS or MSYS-shell
|
||||
* prompt.
|
||||
*
|
||||
* The alternative approach is to define LyX as a genuine
|
||||
* GUI-based app, with a "WinMain" function as the entry point to the
|
||||
* executable rather than a "main" function, so:
|
||||
*
|
||||
* #if defined (_WIN32)
|
||||
* # define WIN32_LEAN_AND_MEAN
|
||||
* # include <stdlib.h> // for __argc, __argv
|
||||
* # include <windows.h> // for WinMain
|
||||
* #endif
|
||||
*
|
||||
* // This will require the "-mwindows" flag when linking with
|
||||
* // gcc under MinGW.
|
||||
* // For MSVC, use "/subsystem:windows".
|
||||
* #if defined (_WIN32)
|
||||
* int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
|
||||
* {
|
||||
* return mymain(__argc, __argv);
|
||||
* }
|
||||
* #endif
|
||||
*
|
||||
* where "mymain" is just a renamed "main".
|
||||
*
|
||||
* However, doing so means that the lyxerr messages would mysteriously
|
||||
* disappear. They could be resurrected with something like:
|
||||
*
|
||||
* #ifdef WIN32
|
||||
* AllocConsole();
|
||||
* freopen("conin$", "r", stdin);
|
||||
* freopen("conout$", "w", stdout);
|
||||
* freopen("conout$", "w", stderr);
|
||||
* #endif
|
||||
*
|
||||
* This code could be invoked (say) the first time that lyxerr
|
||||
* is called. However, Ruurd has tried this route and found that some
|
||||
* shell scripts failed, for mysterious reasons...
|
||||
*
|
||||
* I've chosen for now, therefore, to simply add Ruurd's original
|
||||
* code as-is.
|
||||
*/
|
||||
// Close the console when run (probably)
|
||||
// not run from command prompt
|
||||
char WindowTitle[1024];
|
||||
HWND hwndFound;
|
||||
GetConsoleTitle(WindowTitle,1024);
|
||||
if ((strcmp(WindowTitle, argv[0]) == 0) ||
|
||||
(strcmp(WindowTitle,"LyX") == 0)) {
|
||||
// format a "unique" newWindowTitle
|
||||
wsprintf(WindowTitle,"%d/%d",
|
||||
GetTickCount(),
|
||||
GetCurrentProcessId());
|
||||
// change current window title
|
||||
SetConsoleTitle(WindowTitle);
|
||||
// ensure window title has been updated
|
||||
Sleep(40);
|
||||
// look for newWindowTitle
|
||||
hwndFound=FindWindow(NULL, WindowTitle);
|
||||
// If found, hide it
|
||||
if ( hwndFound != NULL)
|
||||
ShowWindow( hwndFound, SW_HIDE);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
|
||||
string current_root()
|
||||
@ -97,7 +174,7 @@ string external_path(string const & p)
|
||||
#else // regular Win32
|
||||
dos_path = p;
|
||||
#endif
|
||||
|
||||
|
||||
//No backslashes in LaTeX files
|
||||
dos_path = subst(dos_path,'\\','/');
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user