Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / DOS - WINDOWS - DOS / 25 сообщений из 54, страница 1 из 3
10.01.2008, 12:39
    #35052448
UNP
UNP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
Здравствуйте!
Вопрос следующий: имеется ли возможность из под WIN98 - WINXP с помощью функций API (или другим способом) из всех запущенных приложений выделить только те, которые работают под DOS-ом. Окна с этими приложениями надо сворачивать в пиктограмму, а затем разворачивать. Пытаюсь это сделать через дескрипторы виндовых окон - получается плохо. Может кто подскажет более лучшее решение.
...
Рейтинг: 0 / 0
10.01.2008, 13:03
    #35052570
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
DOS задачи выполняются под процессом NTVDM.EXE (только под 2000/XP), смотри привязку окна к процессу.

Поспрошай в форуме по С++. Работа с WinAPI им лучше известна.
...
Рейтинг: 0 / 0
10.01.2008, 13:31
    #35052686
UNP
UNP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
Если можно, поточнее...
...
Рейтинг: 0 / 0
10.01.2008, 13:52
    #35052807
PaulWist
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
Опишите задачу, которую пытаетесь решить, что-то мне кажется, что есть более простой способ её решения.
...
Рейтинг: 0 / 0
10.01.2008, 14:45
    #35053052
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
UNPЕсли можно, поточнее...
Искать некогда, если память не изменяет, то по окну можно узнать поток, к которому оно привязано, по потоку процесс, по процессу смотришь какой EXE его запустил. Если NTVDM.EXE (это виртуальная DOS-машина) то значит прога ДОСавая. Но это только для 2000/XP так.

Может есть другие признаки, не знаю, редко с WinAPI работаю.

Я бы посоветовал это на Си написать и в DLL/FLL обернуть. Там много работы со структурами, а из фокса тяжело со структурами работать.
...
Рейтинг: 0 / 0
10.01.2008, 14:47
    #35053061
UNP
UNP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
Задача следующая: из DOS-приложения запускается WIN-приложение. В момент запуска, DOS-приложение должно быть свернуто. После завершения WIN-приложения, DOS-приложение должно быть развернуто.
...
Рейтинг: 0 / 0
10.01.2008, 14:59
    #35053119
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
UNPЗадача следующая: из DOS-приложения запускается WIN-приложение. В момент запуска, DOS-приложение должно быть свернуто. После завершения WIN-приложения, DOS-приложение должно быть развернуто. Так бы сразу и сказал.
Сделай помежуточное консольное приложение на Си, которое вызовет твое WIN-приложение.
У меня так из полноэкранного дос окна работает
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
typedef BOOL (WINAPI *ASFW)(DWORD);

int main(int argc, char* argv[])
{
	HWND hWnd = GetConsoleHwnd();
	// Разрешаем перехват ввода всплываюшими окнами для  2000 /XP
	ASFW AllowSetForeWindow = NULL;
	HMODULE hUser32 = GetModuleHandle("user32");
	AllowSetForeWindow = (ASFW) GetProcAddress(hUser32, _T("AllowSetForegroundWindow"));
	if(AllowSetForeWindow != NULL) AllowSetForeWindow(- 1 );

	// Запуск WinEXE и ожидание завершения
...
	// Возврат консольного окна в исходное состояние
	SetForegroundWindow(hWnd);
	ShowWindow(hWnd , SW_SHOWMAXIMIZED);
	return  0 ;
}
...
Рейтинг: 0 / 0
10.01.2008, 16:08
    #35053415
UNP
UNP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
Дима! Приложения на разных языках, Поэтому из WIN-приложения мне надо определить все запущенные DOS-ие приложения и свернуть их окна, а затем, при завершении WIN-приложения, восстановить свернутые окна.
...
Рейтинг: 0 / 0
10.01.2008, 16:18
    #35053461
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
UNPДима! Приложения на разных языках, Поэтому из WIN-приложения мне надо определить все запущенные DOS-ие приложения и свернуть их окна, а затем, при завершении WIN-приложения, восстановить свернутые окна.
Дос прога запускает "переходник" (заготовку исходника на Си я привел).
Переходник - это консольное Win-приложение, т.е. при запуске ОС дает ему окно ДОС-приложения, потом он запускает твое Win-приложение, ждет пока оно отработает, после разворачивает свое окно и завершается. А так как он в окне дос-проги, то дос прога оказывается обратно развернутой.
Консольное приложение на фоксе не сделать, я на MS VC++ делаю.

У меня так библиотека сбербанка для расчетов по картам из кассовой проги (в полноэкранном режиме) на FPD вызывается.
Работа с Win-драйвером фискального регистратора через COM тоже через консольную прогу из доса.
...
Рейтинг: 0 / 0
10.01.2008, 16:27
    #35053494
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
И еще
сворачивание ДОС-окна:
Код: plaintext
1.
	ShowWindow(hWnd , SW_SHOWMINIMIZED);

Поизучай сказанное. Если не разберешься пиши завтра к вечеру. Время будет слеплю тебе прогу которая сворачивает свое окно, запускает другую (переданную как параметр), ждет завершения и разворачивает окно обратно.

Не заметил. GetConsoleHwnd() не WinAPI функция.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
//*******************************************************************
// Получение хэндла консольного окна
HWND GetConsoleHwnd(void)
{
#define MY_BUFSIZE  1024  // Buffer size for console window titles.
HWND hwndFound; // This is what is returned to the caller.
char pszNewWindowTitle[MY_BUFSIZE]; // Contains fabricated
// WindowTitle.
char pszOldWindowTitle[MY_BUFSIZE]; // Contains original
// WindowTitle.

// Fetch current window title.

GetConsoleTitle(pszOldWindowTitle, MY_BUFSIZE);

// Format a "unique" NewWindowTitle.

wsprintf(pszNewWindowTitle,"%d/%d",
GetTickCount(),
GetCurrentProcessId());

// Change current window title.

SetConsoleTitle(pszNewWindowTitle);

// Ensure window title has been updated.

Sleep( 40 );

// Look for NewWindowTitle.

hwndFound=FindWindow(NULL, pszNewWindowTitle);

// Restore original window title.

SetConsoleTitle(pszOldWindowTitle);

return(hwndFound);
}
...
Рейтинг: 0 / 0
11.01.2008, 09:48
    #35054831
UNP
UNP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
Дима! Приложение на VFP9 я вызываю из FPD2 и для чего переходник на СИ? DOS-ское окно с приложением сворачивается и разворачивается нормально если оно в оконном режиме. Проблемы начинаются, если изначально DOS-ское окно полностью развёрнуто. В этом случае в первый раз его нужно свернуть с клавиатуры (только после этого формируется нормальный дескриптор окна). При последующих вызовах VFP9, DOS-ское окно сворачивается нормально, но при завершении работы приложения VFP9, DOS-ское окно не могу развернуть, хотя знаю его дескриптор.
И ещё, уточните, что Вы понимаете под консольным WIN приложением.
Ниже программный код:

. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

****** Сначала сворачиваем все окна с 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
DECLARE INTEGER ShowWindow IN user32 INTEGER hwnd, INTEGER nCmdShow
DECLARE INTEGER SetWindowText IN user32 INTEGER hWnd, STRING lpString

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 WTK WITH cNameWinFile && Вызов приложения на 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
= ShowWindow(lnHwndChild, 9)

ENDIF

lnHwndChild = GetWindow (lnHwndChild, 2) && Получить дескриптер следующего окна
ENDDO

CLEAR DLLS && Закрываем функции API
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
...
Рейтинг: 0 / 0
11.01.2008, 11:08
    #35055123
ValeraSH
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
DimaTПоизучай сказанное. Если не разберешься пиши завтра к вечеру. Время будет слеплю тебе прогу которая сворачивает свое окно, запускает другую (переданную как параметр), ждет завершения и разворачивает окно обратно.
Дима и могли бы вы слепить такую программку, я лично был бы очень вам благодарен...
...
Рейтинг: 0 / 0
11.01.2008, 16:42
    #35056563
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
UNPИ ещё, уточните, что Вы понимаете под консольным WIN приложением.
Что и все.
Консольное приложение - это Win приложение без графического интерфейса с выводом в текстовую консоль (например FAR). Подробности в инете.

Одна из особенностей работы консольных приложений - если одно вызывает второе, то второму ОС дает эту же консоль. На этом и построен мой пример.

ValeraSHДима и могли бы вы слепить такую программку, я лично был бы очень вам благодарен... Сделаю. Если сегодня не успею то завтра выложу сюда
...
Рейтинг: 0 / 0
11.01.2008, 17:33
    #35056737
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
Все в архиве. Запускать из FPD:
Код: plaintext
!RunWin notepad.exe

PS Исходники на MS VC6 там же
...
Рейтинг: 0 / 0
14.01.2008, 15:00
    #35060088
ValeraSh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
DimaT, спасибо за программку - помогла.
...
Рейтинг: 0 / 0
16.01.2008, 10:30
    #35064549
UNP
UNP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
Дима! За программу спасибо - отличная. Только есть нюанс:
Вашу программу вызываю из FPD (в полноэкранном режиме) несколько раз, при её вызове в первый раз, экран (с FPD) не сворачивается - приходится его свернуть ручками, при последующих вызывах всё работает (экран сворачивается и разворачивается) нормально. Как победить это?
У меня: WIN XP SP2, FPD 2.0, VFP 9.0 SP2
...
Рейтинг: 0 / 0
16.01.2008, 10:54
    #35064661
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
Нету у меня такой проблемы

Тест: Запускаю FoxPro.exe test.prg (FPD 2.6) В ярлыке поставил полноэкранный режим. XPHE SP2
Test.prg
Код: plaintext
1.
2.
3.
wait
!runwin notepad.exe
wait
quit
Появляется "Press any key..."
нажимаю, окно FPD сворачивается, запускается блокнот. Блокнот закрываю, FPD открывается на весь экран.

Попробуй как я написал проверить, на другом компе.

Может в VFP коде что-нибудь осталось от твоего перебора окон.
...
Рейтинг: 0 / 0
16.01.2008, 13:30
    #35065298
UNP
UNP
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
Дима! Большое спасибо. Все свои проблемы победил!
С уважением UNP
...
Рейтинг: 0 / 0
24.07.2008, 09:11
    #35448618
Boban5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
Просьба к Dima T.
Не могли бы Вы доработать свою утилиту RunWin, включив обработку еще одного параметра.
Допустим :
1 - родительское окно сворачивается всегда (текущий режим
работы утилиты)
2 - родительское окно не сворачивается, но разворачивается если в результате работы
свернулось (нужно для запуска консольных win приложений, при запуске которых иногда
окна fpd сворачиволось)
3 - (если возможно) родительское окно сворачивается если оно было полноэкранным,
если нет , то = пар.2
...
Рейтинг: 0 / 0
24.07.2008, 09:26
    #35448636
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
Boban52 - родительское окно не сворачивается, но разворачивается если в результате работы
свернулось (нужно для запуска консольных win приложений, при запуске которых иногда
окна fpd сворачиволось)
Это добавлю

Boban53 - (если возможно) родительское окно сворачивается если оно было полноэкранным,
если нет , то = пар.2
Это пока не знаю. Если найду как проверить полноэкранный режим или окно, то добавлю.
...
Рейтинг: 0 / 0
24.07.2008, 10:50
    #35448834
ValeraSh
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
Было бы неплохо...
...
Рейтинг: 0 / 0
24.07.2008, 12:26
    #35449198
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
Поправил. В архиве RunWin.exe и исходники.

Командная строка такая
1. Как было. Свернулся - запустил
RunWin.exe [PATH]\\Name.exe

2. Без минимизации окна
RunWin.exe [PATH]\\Name.exe NOMIN

3. Без минимизации окна если в оконном режиме
RunWin.exe [PATH]\\Name.exe NOMINWIN

PS В третьем случае тип окна определяется только для 2000/XP. Для 95/98 решения не нашел, под 95/98 прога всегда считает что она в полноэкранном режиме.
...
Рейтинг: 0 / 0
24.07.2008, 13:15
    #35449383
Boban5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
Спасибо. Сейчас потестим...
...
Рейтинг: 0 / 0
24.07.2008, 16:21
    #35449990
Boban5
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
Boban5Спасибо. Сейчас потестим...

А можно добавить параметр управление параметрами окна запускаемых Win приложений (максимизировано, минимизировано) ? А то некоторые вьюверы придется распахивать вручную.

P.S. Не спец в C.
P.P.S. Аппетит приходи во время тестирования 8-)
...
Рейтинг: 0 / 0
25.07.2008, 13:07
    #35451987
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
DOS - WINDOWS - DOS
Boban5А можно добавить параметр управление параметрами окна запускаемых Win приложений (максимизировано, минимизировано) ? А то некоторые вьюверы придется распахивать вручную.
Можно, только позже, пока некогда.

Boban5P.S. Не спец в C.
Может уже пора начинать осваивать потихоньку?

PS Может пора уже думать как с FPD расстаться, а не навешивать на него всякую всячину?
...
Рейтинг: 0 / 0
Форумы / FoxPro, Visual FoxPro [игнор отключен] [закрыт для гостей] / DOS - WINDOWS - DOS / 25 сообщений из 54, страница 1 из 3
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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