Страница 1 из 2

Как запустить чужое приложение в фоновом режиме???

Добавлено: 09 фев 2007, 15:40
extreme
Как запустить чужое приложение в фоновом режиме??? т.е. чтобы его небыло видно.
Спасибо....!!!

Re: Как запустить чужое приложение в фоновом режиме???

Добавлено: 09 фев 2007, 15:49
Хыиуду
а что подразумевается под фоновым режимом? В свернутом окне? или в виде иконки в правом нижнем углу? :)

Re: Как запустить чужое приложение в фоновом режиме???

Добавлено: 09 фев 2007, 16:50
LAngel
послать ему Sw_hide ?

Re: Как запустить чужое приложение в фоновом режиме???

Добавлено: 10 фев 2007, 14:46
Blood_Magic
procedure DeComp(const fn:string);
var
zAppName:array[0..512] of char;
zCurDir:array[0..255] of char;
WorkDir:String;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
StrLCopy(zAppName,PChar(fn),Length(fn));
GetDir(0,WorkDir);
StrPCopy(zCurDir,WorkDir);
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb:=Sizeof(StartupInfo);
StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow:=0;
If CreateProcess(nil,zAppName,nil,nil,false,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,nil,nil,StartupInfo,ProcessInfo) then while WaitforSingleObject(ProcessInfo.hProcess,200)=WAIT_TIMEOUT do Application.ProcessMessages
end;

Re: Как запустить чужое приложение в фоновом режиме???

Добавлено: 10 фев 2007, 18:01
Колядин Максим
Если ты имеешь ввиду Паскаль, и "чтобы программа оставалась в фоновом режиме" у тебя означает в оперативной памяти, тогда для этого есть специальная функция keep. Вот пример использования функции.

Код: Выделить всё

Uses Crt, Dos;

Var KbdIntVec : Procedure;
{$F+} 
Procedure Keyclick;
Interrupt;
Begin
 If Port[$60] < $80 Then
  Begin
   Sound(5000);
   Delay(1);
   NoSound;
  End;
 InLine($9C);
 KbdIntVec;
End;
{$F-}

Begin
 GetIntVec($9, KbdIntVec);
 SetIntVec($9, Addr(KeyClick));
 Keep(0);
End.
[code]
 Взято из Help'a паскаля.

Re: Как запустить чужое приложение в фоновом режиме???

Добавлено: 12 фев 2007, 13:45
extreme
Спасибо конечно. Но не работает. Я понимаю так что мне надо передать данной процедуре адрес и имя вызываемой программы.... не работает.
У меня одна программа написана на VC++ а другая на Delphi. Так вот надо из Дельфийской программы вызвать сишную..... но чтобы ее небыло вообще видно.

Blood_Magic писал(а):procedure DeComp(const fn:string);
var
zAppName:array[0..512] of char;
zCurDir:array[0..255] of char;
WorkDir:String;
StartupInfo:TStartupInfo;
ProcessInfo:TProcessInformation;
begin
StrLCopy(zAppName,PChar(fn),Length(fn));
GetDir(0,WorkDir);
StrPCopy(zCurDir,WorkDir);
FillChar(StartupInfo,Sizeof(StartupInfo),#0);
StartupInfo.cb:=Sizeof(StartupInfo);
StartupInfo.dwFlags:=STARTF_USESHOWWINDOW;
StartupInfo.wShowWindow:=0;
If CreateProcess(nil,zAppName,nil,nil,false,CREATE_NEW_CONSOLE or NORMAL_PRIORITY_CLASS,nil,nil,StartupInfo,ProcessInfo) then while WaitforSingleObject(ProcessInfo.hProcess,200)=WAIT_TIMEOUT do Application.ProcessMessages
end;

Re: Как запустить чужое приложение в фоновом режиме???

Добавлено: 12 фев 2007, 13:48
extreme
У меня одна программа написана на VC++ а другая на Delphi. Так вот надо из Дельфийской программы вызвать сишную..... но чтобы ее небыло вообще видно.
т.е. только видна в Диспечере задач.
Sw_hide не работает. А вот минимизация - работает.... но меня это не устраивает....

-----------------------------------

Очень прошу ....... ХЕЛП.......

Re: Как запустить чужое приложение в фоновом режиме???

Добавлено: 12 фев 2007, 14:28
Absurd
Не пробовал такое, но можно создать отдельный виртуальный десктоп (CreateWindowStation()), а потом запустить приложение на этом десктопе (lpDesktop в STARTUPINFO)

Re: Как запустить чужое приложение в фоновом режиме???

Добавлено: 12 фев 2007, 16:25
Blood_Magic
extreme писал(а):У меня одна программа написана на VC++ а другая на Delphi. Так вот надо из Дельфийской программы вызвать сишную..... но чтобы ее небыло вообще видно.
т.е. только видна в Диспечере задач.
Sw_hide не работает. А вот минимизация - работает.... но меня это не устраивает....

-----------------------------------

Очень прошу ....... ХЕЛП.......

где ты видишь Sw_hide??? у меня работает то, что я тебе написал, там STARTF_USESHOWWINDOW стоит, единственное поэксперементируй с параметром CREATE_NEW_CONSOLE. передать надо имя файла (например 'c:\maf\maf.exe')

Re: Как запустить чужое приложение в фоновом режиме???

Добавлено: 12 фев 2007, 17:12
BBB
extreme писал(а):У меня одна программа написана на VC++ а другая на Delphi. Так вот надо из Дельфийской программы вызвать сишную..... но чтобы ее небыло вообще видно.
А если сделать из то программы, которую надо вызывать DLL, а не EXE-шник? Тогда подлинковываешь в твоей дельфийной программе Си-шную DLL и вызываешь проимпортируемую функцию.