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

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

extreme
Сообщения: 7
Зарегистрирован: 09 фев 2007, 15:37

Как запустить чужое приложение в фоновом режиме??? т.е. чтобы его небыло видно.
Спасибо....!!!
Хыиуду
Сообщения: 2442
Зарегистрирован: 06 мар 2005, 21:03
Откуда: Москва
Контактная информация:

а что подразумевается под фоновым режимом? В свернутом окне? или в виде иконки в правом нижнем углу? :)
Искусство программирования - заставить компьютер делать все то, что вам делать лень.
Для "спасибо" есть кнопка "Спасибо" в виде звездочки внизу под ником автора поста.
Аватара пользователя
LAngel
Сообщения: 277
Зарегистрирован: 30 мар 2005, 08:19
Откуда: Ульяновск
Контактная информация:

послать ему Sw_hide ?
С уважением, Lost Angel...
Blood_Magic
Сообщения: 273
Зарегистрирован: 30 июн 2005, 14:53

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;
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
Аватара пользователя
Колядин Максим
Сообщения: 297
Зарегистрирован: 16 ноя 2006, 19:09
Откуда: Seattle, WA
Контактная информация:

Если ты имеешь ввиду Паскаль, и "чтобы программа оставалась в фоновом режиме" у тебя означает в оперативной памяти, тогда для этого есть специальная функция 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 паскаля.
Программист - это человек, который решает способом, который вы не понимаете, проблемы, о которых вы даже не подозревали...
extreme
Сообщения: 7
Зарегистрирован: 09 фев 2007, 15:37

Спасибо конечно. Но не работает. Я понимаю так что мне надо передать данной процедуре адрес и имя вызываемой программы.... не работает.
У меня одна программа написана на 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;
extreme
Сообщения: 7
Зарегистрирован: 09 фев 2007, 15:37

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

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

Очень прошу ....... ХЕЛП.......
Absurd
Сообщения: 1228
Зарегистрирован: 26 фев 2004, 13:24
Откуда: Pietari, Venäjä
Контактная информация:

Не пробовал такое, но можно создать отдельный виртуальный десктоп (CreateWindowStation()), а потом запустить приложение на этом десктопе (lpDesktop в STARTUPINFO)
2B OR NOT(2B) = FF
Blood_Magic
Сообщения: 273
Зарегистрирован: 30 июн 2005, 14:53

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

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

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

где ты видишь Sw_hide??? у меня работает то, что я тебе написал, там STARTF_USESHOWWINDOW стоит, единственное поэксперементируй с параметром CREATE_NEW_CONSOLE. передать надо имя файла (например 'c:\maf\maf.exe')
- Чем юзер похож на обезьяну?
- Он жмет на все, что жмется, дергает все, что дергается и крутит все, что крутится.
- Чем юзер отличается от обезьяны?
- У обезьяны хватает ума не воспроизводить ту последовательность, которая приводит к краху системы.
BBB
Сообщения: 1298
Зарегистрирован: 27 дек 2005, 13:37

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