powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вызов приложения VFP9.0 из FPD26 (DOS)
1 сообщений из 1, страница 1 из 1
Вызов приложения VFP9.0 из FPD26 (DOS)
    #34859028
UNP
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
UNP
Гость
Здравствуйте, коллеги!
Если кто-либо сталкивался с такой проблемой, пожалуйста, подскажите как её решить.
Есть приложение, написанное на FPD26 (DOS). Из него (в цикле) вызывается приложение на VFP9. При старте виндового приложения, окно с DOS приложением должно сворачиваться, а при завершении виндового приложения - окно с DOS приложением должно восстановить свой первоначальный размер.
Если DOS-приложение запущено в оконном режиме, окна сворачиваются и разворачиваются нормально.
Если DOS-приложение запущено в полно экранном режиме (размер DOS-окна во весь экран), то ПЕРВЫЙ РАЗ свернуть DOS-окно можно только с помощью клавиши <WIN> (на клавиатуре справа от <Ctrl>). Почему-то API-функции (см. пример) не видят его. При последующих вызовах DOS-окно сворачивается и разворачивается нормально. В чём у меня ошибка ?

Вызов Windows-приложения из FPD26:
. . .
!D:\TK\TK.exe
. . .
Окна сворачиваю и разворачиваю следующим образом:

. . .
****** Сначала сворачиваем все окна с DOS режимом. После завершения программы
****** восстанавливаем их первоначальный размер

DECLARE Integer GetTopWindow IN Win32API Integer nHwndTop
DECLARE Integer GetWindow IN Win32API Integer nHwndOrig, Integer nRelFlag
DECLARE Integer GetWindowText IN Win32API Integer nHwnd, String cTextBuff, Integer nMaxCountBuff
DECLARE INTEGER CloseWindow IN Win32API INTEGER hWnd
DECLARE INTEGER OpenIcon IN Win32API INTEGER hWnd

LOCAL lcTextBuffer, lnHwndChild
lcTextBuffer = SPACE (100) &&Пустая строка

lnHwndChild = GetTopWindow (0) &&Получить указатель активного окна
lnHwndChild = GetWindow (lnHwndChild, 0) &&Получить указатель активного окна

*** Свернуть все окна с DOS режимом

DO WHILE lnHwndChild # 0 && Просмотреть все окна
lcTextBuffer = SPACE (100) &&Пустая строка
GetWindowText (lnHwndChild, @lcTextBuffer, 100) &&Получить строку заголовка окна
lcTextBuffer = ALLTRIM (lcTextBuffer)
IF "cmd.exe" $ lcTextBuffer && В заголовке окна вызова режима DOS есть такая подстрока
CloseWindow (lnHwndChild) && Свернуть окно с DOS
ENDIF
lnHwndChild = GetWindow (lnHwndChild, 2) && Получить дескриптер следующего окна
ENDDO

DO FORM TK && Вызов приложения на VFP 9.0
READ EVENTS
CLOSE DATABASES ALL

*** Восстановить размеры всех окон с DOS режимом

lnHwndChild = GetTopWindow (0) &&Получить указатель активного окна
lnHwndChild = GetWindow (lnHwndChild, 0)

DO WHILE lnHwndChild # 0 && Просмотреть все окна
lcTextBuffer = SPACE (100) &&Пустая строка
GetWindowText (lnHwndChild, @lcTextBuffer, 100) &&Получить Title окна
lcTextBuffer = ALLTRIM (lcTextBuffer)
IF "cmd.exe" $ lcTextBuffer && В заголовке окна вызова режима DOS есть такая подстрока
OpenIcon (lnHwndChild) && Восстановить первоначальные размеры окна с DOS
ENDIF
lnHwndChild = GetWindow (lnHwndChild, 2) && Получить дескриптер следующего окна
ENDDO

CLEAR DLLS && Закрываем функции API

. . .
...
Рейтинг: 0 / 0
1 сообщений из 1, страница 1 из 1
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / Вызов приложения VFP9.0 из FPD26 (DOS)
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]