Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

CreateProcess problem

[es] :: Pascal / Delphi / Kylix :: CreateProcess problem

[ Pregleda: 3500 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

IgLo
Igor Lovric
Sremski Karlovci

Član broj: 19524
Poruke: 129
*.neobee.net.

Sajt: www.unicornsoft.net


Profil

icon CreateProcess problem04.04.2005. u 20:14 - pre 232 meseci
Dali neko ima ideju zasto ovo ne radi kako treba. Program koji zelim da startujem se pokrene, ali nije minimizovan (moram da koristim CreateProcess - ne pomaze mi ShellExecute)

Code:

procedure TForm1.Button1Click(Sender: TObject);
Var
  X : Integer;
  ProcInfo: TProcessInformation;
  StartInfo: TStartupInfo;

Begin

            FillChar(ProcInfo, SizeOf(TProcessInformation), 0);
            FillChar(StartInfo, SizeOf(TStartupInfo), 0);
            StartInfo.CB := SizeOf(TStartupInfo);

            StartInfo.dwFlags := STARTF_USESHOWWINDOW;
            StartInfo.wShowWindow := SW_SHOWMINIMIZED;
            CreateProcess('D:\2\EXAMPLE\DialUpT.exe', Nil, Nil, Nil, FALSE, 0, Nil, Nil, StartInfo, ProcInfo );
end;


Probao sam da pokrenem i neki drugi program, isto se desava.
 
Odgovor na temu

reiser

Član broj: 7895
Poruke: 2314



+102 Profil

icon Re: CreateProcess problem04.04.2005. u 20:40 - pre 232 meseci
Samo stavi putanju do procesa kao drugi parametara - prvi neka ti bude nil.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: CreateProcess problem04.04.2005. u 22:51 - pre 232 meseci
Program koji pokreces ne mora da bude minimizovan cak i ako postavis taj flag. Ja sam pravio neki instaler koji se uvek prikaze normalno cak i kada je minimize flag postavljen. Proces se pokrene minimizovan, ali u programu proveravam da li je prozor minimizovan i ako jeste ponovo ga prikazem tako da ako DialUpT.exe ne zeli da se minimizuje tesko ces ga naterati
 
Odgovor na temu

IgLo
Igor Lovric
Sremski Karlovci

Član broj: 19524
Poruke: 129
*.neobee.net.

Sajt: www.unicornsoft.net


Profil

icon Re: CreateProcess problem04.04.2005. u 23:29 - pre 232 meseci
Citat:
Marko Paunovic: Samo stavi putanju do procesa kao drugi
parametara - prvi neka ti bude nil.


Nije to, probao sam i ranije posto sam u raznim primerima video da ljudi rade ovako kao sto si rekao.

Citat:
Srki_82: Program koji pokreces ne mora da bude minimizovan cak i ako postavis taj flag.


Da, znam, ali sto je najgore, program nema nista posebno sto mu ne bi dalo da se minimizuje, obicna forma sa par dugmica - ja ga kompajlirao, tako da nema nekih skrivenih stvari. A kao sto rekoh probao sam i sa drugim programima.

Sve u svemu, pored svih primera skinutih sa net-a koji izgleda rade svuda osim kod mene i 2 sata cackanja, uspeo sam da ga minimizujem, ali sam SW_SHOWMINIMIZED zamenio sa SW_SHOWMINNOACTIVE. Idiotizam, ali bar radi

Sada nastupa drugi problem, da vidimo da li neko ima resenje za ovo:

Kada sam konacno uspeo da pokrenem programe i sve ih minimizovao (svi se minimizuju u SystemTry) i na kraju ih ubio sa TerminateProcess, njihove ikonice ostaju u SystemTry-u dok preko njih ne prevucem misa. Imali neko ideju kako da uradim nesto tipa SystemTry.Refresh Nemojte mi samo reci da iz mog programa simuliram prevlacenje misa preko SysTray-a, mislim moze i tako, ali ja bih elegantnije
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: CreateProcess problem04.04.2005. u 23:36 - pre 232 meseci
Nemoj da pozivas TerminateProcess. Ta funkcija koliko znam ne dozvoljava procesu da oslobodi svu memoriju koju je zauzeo, da skine ikonice iz SysTray-a i slicno. Posalji poruku WM_QUIT prozoru koji hoces da zatvoris (PostMessage) ili ako bas moras da posaljes poruku odredjenom thread-u mozes koristiti PostThreadMessage.
 
Odgovor na temu

IgLo
Igor Lovric
Sremski Karlovci

Član broj: 19524
Poruke: 129
*.neobee.net.

Sajt: www.unicornsoft.net


Profil

icon Re: CreateProcess problem05.04.2005. u 12:13 - pre 232 meseci
Pokusao sam sa PostMessage, neke programe zatvori a neke ne. Cak ne mogu ni da detektujem da li ih je zatvorio jer mi PostMessage za neke od programa koje ne zatvori vraca True a za neke False. Sto se tice PostThreadMessage, on mi ne zatvori ni jedan program. Inace, sto se tice PostMessage, i posle njega ostaju ikonice od programa koje je uspeo da zatvori . Mislim, mogao je Microsoft i malo vise da ga zakomplikuje... Sve bi bilo uredu da funkcija ExitProces (koja radi bas ono sto mi treba) moze kao parametar da primi Handle od procesa kao i TerminateProcess.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: CreateProcess problem05.04.2005. u 17:07 - pre 231 meseci
Za divno cudo kod mene PostMessage sa WM_QUIT komandom radi za sve programe i iskljuce ikonice iz tray-a. Probao sam na Opera, Yahoo, MSN, ICQ Messenger, McAfee SC, Virtual CD 7, GetRight.
Za koje programe tebi nije radio kako treba ovaj pristup?
 
Odgovor na temu

IgLo
Igor Lovric
Sremski Karlovci

Član broj: 19524
Poruke: 129
*.neobee.net.

Sajt: www.unicornsoft.net


Profil

icon Re: CreateProcess problem05.04.2005. u 18:52 - pre 231 meseci
Onda mora da ja negde gresim ali nemam pojma gde. U pitanju je 5 programa: SpamPal, FlashGet (on se jedini ugasi), AdMuncher, YahooPOPs i NeoBee Speedy.

Ako ima neko da mu nije tesko da pogleda ove dve procedure, meni su vec oci ispale i nemam ideja...

Code:

Procedure TMainForm.RunPrograms;

Var
  X : Integer;
  ProcInfo: TProcessInformation;
  StartInfo: TStartupInfo;

Begin
  With RunOnConnectForm.lv_Programs Do
    For X := 0 To Items.Count - 1 Do
      Begin
        If Items [x].Checked And FileExists (Items [x].Caption) Then
          Begin
            FillChar(ProcInfo, SizeOf(TProcessInformation), 0);
            FillChar(StartInfo, SizeOf(TStartupInfo), 0);
            StartInfo.CB := SizeOf(TStartupInfo);
            StartInfo.dwFlags := STARTF_USESHOWWINDOW;
            If UpperCase (Items [x].SubItems [1]) = 'YES' Then
              StartInfo.wShowWindow := SW_SHOWMINNOACTIVE
            Else
              StartInfo.wShowWindow := SW_SHOWNORMAL;
            CreateProcess(PChar (Items [x].Caption),
                          PChar (Items [x].Subitems [0]),
                          nil, nil, false,
                          NORMAL_PRIORITY_CLASS,
                          nil, nil,
                          StartInfo, ProcInfo);

            Items [x].SubItems [3] := IntToStr (ProcInfo.hProcess);

          End;
      End;
end { RunPrograms };

Procedure TMainForm.ClosePrograms;

Var
  X : Integer;
Begin
  With RunOnConnectForm.lv_Programs Do
    For X := 0 To Items.Count - 1 Do
      If Items [x].SubItems [3] <> '' Then
        Begin
          //TerminateProcess(StrToInt(Items [x].SubItems [3]), 0);
          PostMessage(StrToInt(Items [x].SubItems [3]), WM_QUIT, 0, 0);
          Items [x].SubItems [3] := '';
        End;

End { ClosePrograms };
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: CreateProcess problem05.04.2005. u 19:10 - pre 231 meseci
A sta imas u Items[X].SubItems[3]? Process handle, process ID, window handle, nesto cetvrto?
 
Odgovor na temu

IgLo
Igor Lovric
Sremski Karlovci

Član broj: 19524
Poruke: 129
*.neobee.net.

Sajt: www.unicornsoft.net


Profil

icon Re: CreateProcess problem05.04.2005. u 20:24 - pre 231 meseci
Mozes videti u RunPrograms proceduri, tamo stavljam ProcInfo.HProces, a ProcInfo je definisan ovako (kopirano iz Win32 Developer Revefrence):

typedef struct _PROCESS_INFORMATION { // pi
HANDLE hProcess;
HANDLE hThread;
DWORD dwProcessId;
DWORD dwThreadId;
} PROCESS_INFORMATION;

Znaci Handle od procesa.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: CreateProcess problem06.04.2005. u 00:36 - pre 231 meseci
Zato i ne radi PostMessage treba na ulazu da ima window handle, a ne process handle

P.S.
Citat:
Onda mora da ja negde gresim ali nemam pojma gde. U pitanju je 5 programa: SpamPal, FlashGet (on se jedini ugasi), AdMuncher, YahooPOPs i NeoBee Speedy.

Cudi me kako se FlashGet uopste ugasio!?
 
Odgovor na temu

IgLo
Igor Lovric
Sremski Karlovci

Član broj: 19524
Poruke: 129
*.dial.InfoSky.Net.

Sajt: www.unicornsoft.net


Profil

icon Re: CreateProcess problem06.04.2005. u 09:08 - pre 231 meseci
Ahaaaaaaaaa.... Ne mogu da verujem. A jel znas kako da dobijem Handle od prozora aplikacije ako imam njen Process Handle? Pretrazio sam MSDN ali ne mogu da nadjem nista sto bi mi koristilo.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
*.smin.sezampro.yu.

ICQ: 246436949


+10 Profil

icon Re: CreateProcess problem06.04.2005. u 16:08 - pre 231 meseci
Nisi mogao da nadjes nista sto ti odgovara jer tako nesto ni ne postoji :) Zato sam ti i spomenuo onu PostThreadMessage. Kada kreiras proces dobijes i id glavnog thread-a tog procesa. Sa AttachThreadInput spojis neki svoj thread koji ce poslati poruku sa tim glavnim thread-om zeljenog procesa. Tvoj thread posalje WM_QUIT i otkaci se iz glavnog thread-a i to je to.
Mada postoji laksi nacin (tako sam ja radio kad sam testirao WM_QUIT poruku). Ako znas koji prozor hoces da ugasis mozes da ga pronadjes sa FindWindow. Treba da znas naziv tog prozora ili njegovu klasu i ova funkcija ti vrati handle prozora.
 
Odgovor na temu

IgLo
Igor Lovric
Sremski Karlovci

Član broj: 19524
Poruke: 129
*.neobee.net.

Sajt: www.unicornsoft.net


Profil

icon Re: CreateProcess problem06.04.2005. u 20:01 - pre 231 meseci
Hvala ti srki, mnogo si mi pomogao, uspelo je, ali nisam morao da radim sa AttachThreadInput, proradilo je kada sam ProcInfo.hProcess zamenio sa ProcInfo.dwThreadId i iskoristio PostThreadMessage. Da toliko budem slep pored ociju, a jos si me pitao ono "A sta imas u Items[X].SubItems[3]?", prosto ne mogu da verujem Ali nista zato, bar sam naucio da radim sa Thread-ovima posle silnog testiranja.
 
Odgovor na temu

Srki_82
Srdjan Tot
Me @ My Home
Ljubljana

Član broj: 28226
Poruke: 1403
82.208.201.*

ICQ: 246436949


+10 Profil

icon Re: CreateProcess problem06.04.2005. u 22:47 - pre 231 meseci
Pazi stvarno moze i bez AttachThreadInput... da ne poverujes Ako ti se nekad desi da nece poruka da se posalje u neki thread prvo probaj da uradis attach pre nego sto pocnes da psujes i lupas kuciste i monitor
Drago mi je sto je sve proradilo
 
Odgovor na temu

[es] :: Pascal / Delphi / Kylix :: CreateProcess problem

[ Pregleda: 3500 | Odgovora: 14 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.