Операционная система Microsoft Windows 3.1 для программиста. Дополнительные главы


Листинг 5.18. Файл wast\wast.cpp - часть 2


// Если не удалось открыть загружаемый драйвер, // выводим сообщение об ошибке else { MessageBox(NULL, "Error Loading WAST\n" "Driver wastdrv.dll not found", "Windows Application Starter", MB_OK | MB_ICONHAND); return FALSE; }

MSG msg;

while(GetMessage(&msg, NULL, 0, 0)) { // Это сообщение посылается загружаемым драйвером // wastdrv.dll, когда VxD-драйвер фиксирует запуск // программы любой виртуальной машиной MS-DOS if (msg.message == WM_STARTWINAPP) { // Создаем и активируем временное невидимое окно, // переключая системную виртуальную машину из фонового // режима в основной режим HWND hDummyWnd = CreateWindow("static", "", WS_POPUP, 0, 0, 0, 0, HWND_DESKTOP, NULL, hInstance, NULL);

ShowWindow(hDummyWnd, SW_SHOW); DestroyWindow(hDummyWnd);

// Адрес командной строки lpszCmd = (LPSTR)msg.lParam + 65;

// Адрес строки параметров lpszParm = (LPSTR)msg.lParam + 65 + 128;

// Устанавливаем текущий каталог setdisk(*LPSTR(msg.lParam)); szBuf[0] = *LPSTR(msg.lParam) + 'A'; szBuf[1] = ':'; szBuf[2] = '\\'; lstrcpy(szBuf + 3, LPSTR(msg.lParam) + 1); chdir(szBuf);

// Готовим параметры для LoadModule lstrcpy(szBuf, (LPCSTR)" "); lstrcat(szBuf, (LPCSTR)lpszParm); *szBuf = (BYTE)lstrlen(lpszParm);

if(lstrlen(lpszParm) != 0) parms.lpszCmdLine = (LPSTR)szBuf; else parms.lpszCmdLine = (LPSTR)"";

parms.segEnv = 0; parms.lpwShow = (LPWORD) awShow; parms.lpwReserved = (LPWORD) NULL;

// Копируем командную строку и параметры // lstrcpy(szTempBuf, (LPSTR)msg.lParam + 65); // lstrcat(szTempBuf, (LPSTR)msg.lParam + 65 + 128);

// Запускаем приложение Windows LoadModule(lpszCmd, &parms);

// WinExec(szTempBuf, SW_SHOW); }

// Это сообщение поступает от загружаемого драйвера // при его удалении, выполняемом из приложения // Control Panel else if (msg.message == WM_UNLOADWAST) PostQuitMessage(0); else DispatchMessage(&msg); }

// Отменяем регистрацию текущей задачи SendDriverMessage(hDriver, UDRV_UNREGISTERTASK, (LPARAM)hTask, NULL);




Начало  Назад  Вперед



Книжный магазин