Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2007, 21:51   #1
malevich
Пользователь
 
Аватар для malevich
 
Регистрация: 01.11.2006
Сообщений: 63
Вопрос function WinExecAndWait

нашел функцию которая ждет пока работа программы не закончится. Только вод код компилироваться не хочет...

*********************************** **********************
function WinExecAndWait(Path: PChar; Visibility: Word): Word;
var
InstanceID: THandle;
Msg: TMsg;
begin
InstanceID := WinExec(Path, Visibility);
if InstanceID < 32 then //çíà÷åíèå ìåíüøå ÷åì 32 óêàçûâàåò íà îøèáêó
WinExecAndWait := InstanceID
else
repeat
while PeekMessage(Msg, 0, 0, 0, pm_Remove) do
begin
if Msg.Message = wm_Quit then Halt(Msg.WParam);
TranslateMessage(Msg);
DispatchMessage(Msg);
end;
until GetModuleUsage(InstanceID) = 0; // Undeclared identifier 'GetModuleUsage'
WinExecAndWait := 0;
end;
*********************************** *********************************** **********************

В чем тут дело, понять не могу..... Помогите
malevich вне форума Ответить с цитированием
Старый 31.01.2007, 22:17   #2
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Естественно: процедура написана, но нигде не объявлена. Советую поискать исполнение самой процедуры GetModuleUsage, т.к. в стандартном наборе описанных процедур Windows (это - WinAPI процедура) ее нет.
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 04.02.2007, 20:36   #3
malevich
Пользователь
 
Аватар для malevich
 
Регистрация: 01.11.2006
Сообщений: 63
По умолчанию

нашел нормальный код.....
*********************************** ****************
Код HTML:
Function WinExecAndWait(FileName:string; Visibility : integer):integer;
var
zAppName:array[0..512] of char;
zCurDir:array[0..255] of char;
WorkDir:string;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
Begin
StrPCopy(zAppName,FileName);
GetDir(0,WorkDir);
StrPCopy(zCurDir,WorkDir);
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb := Sizeof(StartupInfo);
StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow := Visibility;
If not CreateProcess(nil,
zAppName, { óêàçàòåëü êîìàíäíîé ñòðîêè }
nil, { óêàçàòåëü íà ïðîöåññ àòðèáóòîâ áåçîïàñíîñòè }
nil, { óêàçàòåëü íà ïîòîê àòðèáóòîâ áåçîïàñíîñòè }
false, { ôëàã ðîäèòåëüñêîãî îáðàáîò÷èêà }
CREATE_NEW_CONSOLE or { ôëàã ñîçäàíèÿ }
NORMAL_PRIORITY_CLASS,
nil, { óêàçàòåëü íà íîâóþ ñðåäó ïðîöåññà }
nil, { óêàçàòåëü íà èìÿ òåêóùåé äèðåêòîðèè }
StartupInfo, { óêàçàòåëü íà STARTUPINFO }
ProcessInfo) Then Result := -1 { óêàçàòåëü íà PROCESS_INF }
Else
Begin
// WaitforSingleObject(ProcessInfo.hProcess,INFINITE);
While WaitforSingleObject(ProcessInfo.hProcess,200)=WAIT_TIMEOUT do Form1.Repaint;
// GetExitCodeProcess(ProcessInfo.hProcess,Result);
// GetExitCodeProcess(ProcessInfo.hProcess,Mresult); // ????????????
End;
End;
только вот мне непонятно : что это за переменная Visibility, за что она отвечает??
malevich вне форума Ответить с цитированием
Старый 05.02.2007, 12:19   #4
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Visibility... Даже логичеки поразмыслив, можно догадаться, что Данный параметр отвечает за видимость данного окна. Вот пример применения класса StartupInfo (взят из SDK справки Delphi), описан на C, но смысл должен быть ясен любому паскальщику:
Код:
STARTUPINFO si; 
PROCESS_INFORMATION ProcessInformation; 
 
si.cb = sizeof(STARTUPINFO); 
si.lpReserved = NULL; 
si.lpTitle = NULL; 
si.lpDesktop = "WinSta0\\Default"; 
si.dwX = si.dwY = si.dwXSize = si.dwYSize = 0L; 
si.dwFlags = 0; 
si.wShowWindow = SW_SHOW; 
si.lpReserved2 = NULL; 
si.cbReserved2 = 0;
Соответственно Visibility - параметр, задающий видимость окна. Из модуля Windows:
Код:
{ ShowWindow() Commands }
  {$EXTERNALSYM SW_HIDE}
  SW_HIDE = 0;
  {$EXTERNALSYM SW_SHOWNORMAL}
  SW_SHOWNORMAL = 1;
  {$EXTERNALSYM SW_NORMAL}
  SW_NORMAL = 1;
  {$EXTERNALSYM SW_SHOWMINIMIZED}
  SW_SHOWMINIMIZED = 2;
  {$EXTERNALSYM SW_SHOWMAXIMIZED}
  SW_SHOWMAXIMIZED = 3;
  {$EXTERNALSYM SW_MAXIMIZE}
  SW_MAXIMIZE = 3;
  {$EXTERNALSYM SW_SHOWNOACTIVATE}
  SW_SHOWNOACTIVATE = 4;
  {$EXTERNALSYM SW_SHOW}
  SW_SHOW = 5;
  {$EXTERNALSYM SW_MINIMIZE}
  SW_MINIMIZE = 6;
  {$EXTERNALSYM SW_SHOWMINNOACTIVE}
  SW_SHOWMINNOACTIVE = 7;
  {$EXTERNALSYM SW_SHOWNA}
  SW_SHOWNA = 8;
  {$EXTERNALSYM SW_RESTORE}
  SW_RESTORE = 9;
  {$EXTERNALSYM SW_SHOWDEFAULT}
  SW_SHOWDEFAULT = 10;
  {$EXTERNALSYM SW_MAX}
  SW_MAX = 10;
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 05.02.2007, 19:00   #5
malevich
Пользователь
 
Аватар для malevich
 
Регистрация: 01.11.2006
Сообщений: 63
По умолчанию

Век живи, век учись.... спасибо!
malevich вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
function.file-put-contents DJ_MILK PHP 3 23.07.2008 05:48
function ajaxSend ( action ) mager JavaScript, Ajax 2 15.05.2008 16:31
InttoiHex function GAGARIN-NEW Компоненты Delphi 4 27.03.2008 20:21
function procedure Toxa Microsoft Office Access 1 28.11.2007 18:32