Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Закрытая темаСоздание новой темы Создание опроса
> Как запустить программу невидимой 
:(
    Опции темы
Ch0bits
  Дата 28.4.2005, 22:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Нужно запустить некую прогу prog.exe так, чтобы её не было видно.
Как это реализовать?
Пока я распологаю лишь этим кодом запускающим процесс в свёрнутом виде.

Код

procedure RunAndWaitApplication(App:string);
var
   si:TStartUpInfo;
   p:TProcessInformation;
begin
   FillChar(Si,SizeOf(Si),0);
   with Si do begin
      cb:=SizeOf(Si);
      dwFlags:=startf_UseShowWindow;
      wShowWindow:=sw_minimize;
   end;
   Createprocess(nil,pchar(App),nil,nil,false,
                           Create_default_error_mode,nil,nil,si,p);
   Waitforsingleobject(p.hProcess,infinite);
end;


Как бы сделать чтобы прога вообще не появлялась в TaskBar'е?
PM WWW   Вверх
RA
Дата 28.4.2005, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 7
Всего: 115



Не проверял твой код но если он рабочий то wShowWindow:=sw_hide

но если что то можно добавить ShowWindow(p.hProcess, SW_HIDE);


Цитата(Vadim999 @ 28.4.2005, 22:33)
Как бы сделать чтобы прога вообще не появлялась в TaskBar'е?


В смысле из процессов скрыть?

PM   Вверх
Ch0bits
Дата 28.4.2005, 23:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



RAdmin
Это не помогает.

Когда я запускаю программу на экране её нет, но она появляется в свёрнутом виде в TaskBar'е. Мне приходится запускать её таким образом и ждать завершения порядка 300 раз. На это уходит много времени.
Проблема в том, что во время этого процесса нужно что-то делать в других программах, а появление задачи в TaskBar'е приводит к потере фокуса, миганию и перехода фокуса на TaskBar, что мешает использованию других программ.
PM WWW   Вверх
<Spawn>
Дата 29.4.2005, 05:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Око кары:)
****


Профиль
Группа: Экс. модератор
Сообщений: 2776
Регистрация: 29.1.2003
Где: Екатеринбург

Репутация: 1
Всего: 64



Используй параметр SW_HIDE, за место SW_MINIMIZE:

Код

procedure RunAndWaitApplication(App:string);
var
   si:TStartUpInfo;
   p:TProcessInformation;
begin
   FillChar(Si,SizeOf(Si),0);
   with Si do begin
      cb:=SizeOf(Si);
      dwFlags:=startf_UseShowWindow;
      wShowWindow := SW_HIDE;
   end;
   if Createprocess(nil,pchar(App),nil,nil,false,
                           Create_default_error_mode,nil,nil,si,p) then
   begin
      Waitforsingleobject(p.hProcess,infinite);
   end;
end;



--------------------
"Для некоторых людей программирование является такой же внутренней потребностью, подобно тому, как коровы дают молоко, или писатели стремятся писать" - Николай Безруков.
PM MAIL ICQ   Вверх
Ch0bits
Дата 29.4.2005, 13:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Всё равно не помогает. smile

Вот скриншот прилепил.
Добавлено @ 13:28
И почему картинка так сильно исказилась??? У меня Quality100 было!

Присоединённый файл ( Кол-во скачиваний: 23 )
Присоединённый файл  IMAGE00001.jpg
PM WWW   Вверх
Albinos_x
Дата 29.4.2005, 17:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 3
Всего: 108



Код
...
uses
  Forms,
  Windows,
......
begin
  Application.Initialize;
  SetWindowLong(Application.Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
  Application.CreateForm(TForm1, Form1);
......


Это в главный модуль...




Это сообщение отредактировал(а) Albinos_x - 29.4.2005, 17:52


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Ch0bits
Дата 29.4.2005, 17:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Этот код скрывает из TaskBar'а основную программу, а мне нужно скрыть дочернюю.
У меня на скриншоте показано появление дочерней программы.
PM WWW   Вверх
Albinos_x
Дата 29.4.2005, 18:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 3
Всего: 108



к этому добавляешь в свойстве формы Visible:=false (в инспекторе объектов)

Ни формы ни в таскбаре её не будет


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Girder
Дата 29.4.2005, 18:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155



Vadim999 твое сообщение о премировании я удалил. Енто не есть хорошо! Да и проблемма очень простая... smile

PS: Даю подсказку... smile ... :=CreateDesktop(...);

Код
//когда-то данный код был скрыт и посте его не видели :) PS: Сегодня уже не актуально... так что убираю скрытие.
procedure RunAndWaitApplication(App:string);
var
   si:TStartUpInfo;
   p:TProcessInformation;
   Desk:HDESK;
   s:string;
begin
   s:='NewDeskX';
   FillChar(Si,SizeOf(Si),0);
   Desk:=CreateDesktop(PChar(s),nil,nil,DF_ALLOWOTHERACCOUNTHOOK,DESKTOP_CREATEWINDOW,nil);
   si.lpDesktop:=PChar(s);
   with Si do begin
      cb:=SizeOf(Si);
      dwFlags:=startf_UseShowWindow;
      wShowWindow:=sw_show;
   end;
   Createprocess(nil,pchar(App),nil,nil,false,
                           Create_default_error_mode,nil,nil,si,p);
   Waitforsingleobject(p.hProcess,infinite);
   CloseDesktop(Desk);
   //...
end;



--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
_hunter
Дата 29.4.2005, 18:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



Цитата
Этот код скрывает из TaskBar'а основную программу, а мне нужно скрыть дочернюю.

о... вот с этого нужно было начинать. если окон несколько по всем ним нужно будет пройтись... + чуть подробнее раскажи об этой программе ( что за дочерняя программа )


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Albinos_x
Дата 29.4.2005, 18:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 3
Всего: 108



возможно я не понял, нужно скрыть другую программу из твоей?

если да, то попробуй так, не проверял но возможно сработает:
Код
...
var myhwnd: HWND
...
myhwnd:=   {здесь передаёш дискриптор запускаемой программы}
...
SetWindowLong(MyhWnd,GWL_EXSTYLE,WS_EX_TOOLWINDOW);
...



--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
RA
Дата 29.4.2005, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 7
Всего: 115



Проверил, оказалось что в xp параметр SW_HIDE игнорируется при запуске файлов через (WinExec, ShellExecute, CreateProcess).


ЗЫ: ShowWindow(...);

PM   Вверх
Ch0bits
Дата 29.4.2005, 19:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Ыыыы! Совсем запутался, я же не системщик.
На делфи со вчерашнего дня тока юзаю. Жизнь заставляет.

ShowWindow убираю нафиг!

Как получить HWND процесса?
PM WWW   Вверх
RA
Дата 29.4.2005, 20:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Брутальный буратина
****


Профиль
Группа: Участник Клуба
Сообщений: 3497
Регистрация: 31.3.2002
Где: Лес

Репутация: 7
Всего: 115



Мда, все обленились, приходится мне писать. smile
Вобщем всё теперь работает.
Код


procedure RunAndWaitApplication(App:string);
procedure HideApp(ProcessID: DWORD);
type
  PEnumWinRec = ^TEnumWinRec;
  TEnumWinRec = record
    ProcessID: DWORD;
  end;
var
  EnumWinRec: TEnumWinRec;

  function EnumWinProc(Wnd: HWND; Param: PEnumWinRec): BOOL; stdcall;
  var
    PID, TID: DWORD;
  begin
    TID := GetWindowThreadProcessId(Wnd, @PID);
    if PID = Param.ProcessID then
       ShowWindow(Wnd,SW_HIDE);
  end;

begin
  EnumWinRec.ProcessID := ProcessID;
  EnumWindows(@EnumWinProc, Integer(@EnumWinRec));
end;

var
   si:TStartUpInfo;
   p:TProcessInformation;
begin
   FillChar(Si,SizeOf(Si),0);
   with Si do begin
      cb:=SizeOf(Si);
      dwFlags:=startf_UseShowWindow;
      wShowWindow:=sw_minimize;
   end;

    if Createprocess(nil,pchar(App),nil,nil,false,Create_default_error_mode,nil,nil,si,p) then
    begin
        sleep(100);
        HideApp(p.dwProcessId);
    end;

Waitforsingleobject(p.hProcess,infinite);


end;




Это сообщение отредактировал(а) RAdmin - 29.4.2005, 20:43
PM   Вверх
Ch0bits
Дата 29.4.2005, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



Спасибо конечно...

НО конечная цель моего цензура - это чтобы программа уже запускалась скрытой, а у Вас она появляется и быстро исчезает. smile

Вы продвинулись дальше всех smile
М
 
Удалено. По моему... уже говорил что не хорошо выпрашивать код в обмен на поощрение. И без мата!


Это сообщение отредактировал(а) Girder - 29.4.2005, 21:23
PM WWW   Вверх
Ch0bits
Дата 30.4.2005, 09:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Python Dev.
****


Профиль
Группа: Завсегдатай
Сообщений: 2124
Регистрация: 21.2.2005
Где: Казань

Репутация: нет
Всего: 62



to Moderator:
Не знаю как у Вас там... а у Нас в России это не матерное слово!
М
 
Не знаю как у тебя там... в России... а у нас в Москве енто мат.


Цитата(Vadim999 @ 29.4.2005, 21:13)
уже говорил

Незнаю кому Вы чего говорили, но только не мне.
М
 
См. выше


RAdmin
+1 smile Спасибки!

Это сообщение отредактировал(а) Girder - 30.4.2005, 11:08
PM WWW   Вверх
Страницы: (2) [Все] 1 2 
Закрытая темаСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.0601 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.