[Delphi5] Hoe een scherm te verbergen?

Pagina: 1
Acties:

  • Aetje
  • Registratie: September 2001
  • Laatst online: 18-12-2025

Aetje

Troubleshooting met HAMERRR

Topicstarter
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Procedure RunFile(psInstring:String);
var PCharArr:PChar;
    sInfo:StartupInfo;
    pInfo:Process_Information;
begin
  PCharArr := AllocMem(SizeOf(Char)*(Length(psInstring)+7));
  try
    {This is a startupinfo for CreateProcess}
    FillChar (sInfo, SizeOf (sInfo), 0);
    sInfo.cb := SizeOf (sInfo);
    CreateProcess(nil,StrPCopy(PCharArr,('Start '+psInString)),nil,nil,FALSE,0,nil,nil,sInfo,pInfo);
  finally
    freemem(PCharArr);
  end;
end;

Probleem: Start.exe genereert een console schermpje dat irritant een momentje naar voren komt. Ik wil dat scherm verbergen (minimaliseren of gewoon helemaal verbergen). Ik heb het geprobeerd met de StartupInfo structure, dat had echter weinig effect. Heeft hier iemand een tip voor me?

Forget your fears...
...and want to know more...


  • ArmEagle
  • Registratie: Oktober 2001
  • Laatst online: 18-06 08:00

ArmEagle

Duzz.

Als je de caption van de window weet kun je
FindWindow(nil, '[caption]')
gebruiken. Anders kun je ook
GetForegroundWindow()
gebruiken
en daarna, met de zojuist verkregen handle:
PostMessage(h, WM_CLOSE, 0, 0);

Hieronder nog een voorbeeld stukje:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
var
   h: HWND;
begin
   if doCloseOnDeactivate then
   begin
    h:= GetForegroundWindow();
    if (h <> FindWindow(nil, 'IExplorer')) then
    begin
       PostMessage(h, WM_CLOSE, 0, 0);
       doCloseOnDeactivate:= false;
       StatusBar.SimpleText:= 'Active window deactivated';
    end
    else
       setFocus();
   end;

  • Aetje
  • Registratie: September 2001
  • Laatst online: 18-12-2025

Aetje

Troubleshooting met HAMERRR

Topicstarter
Bedankt voor de tip, maar dit is niet de oplossing. Het consolescherm verschijnt, en verdwijnt. Start runt slechts zeer kort. Is er wellicht een andere manier dan Start.exe aanroepen, waarmee bestanden van ELK bekend type geopend kunnen worden? (Start File.txt bijvoorbeeld opent notepad. Start Infile.mdb start Access). "Explorer InFile.mdb" werkte voor geen meter... Help?

PS
The WM_CLOSE message is sent as a signal that a window or an application should terminate.
Niet wat ik wilde :)... Beter is DestroyWindow( Window: HWND );

Forget your fears...
...and want to know more...


  • ArmEagle
  • Registratie: Oktober 2001
  • Laatst online: 18-06 08:00

ArmEagle

Duzz.

hmm, sorry niet goed genoeg gelezen...

werkt WinExec() niet?
Anders meot er geloof ik idd nog een andere procedure zijn.

Trouwens, als je het goed programmeerd, wordt dat venster zo snel gesloten, dat je hem helemaal niet ziet. (Moet geloof ik wel in een aparte thread, anders loopt het niet lekker)

  • Aetje
  • Registratie: September 2001
  • Laatst online: 18-12-2025

Aetje

Troubleshooting met HAMERRR

Topicstarter
Hmz, dat gebeurt dus niet. CreateProcess roept Start aan, start creert het console window en start vervolgens het bestand (en evt. de geassocieerde app). Daarna gaat het window weer weg (Start is afgelopen.)
Ik wil dat het window geeneens gecreerd wordt. Heeft iemand niet een idee of dat met CreateProcess ook kan? (Gewoon verborgen opstarten).

En WinExec() is een procedure die alleen vanwege compatibiliteit nog bestaat. Die gebruik ik dus niet. (Windows 3.1 remnant :r )

Forget your fears...
...and want to know more...


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Op vrijdag 15 maart 2002 12:25 schreef Aetje het volgende:
En WinExec() is een procedure die alleen vanwege compatibiliteit nog bestaat. Die gebruik ik dus niet. (Windows 3.1 remnant :r )
:-)

StartupInfo invullen, eg:
code:
1
2
3
4
5
6
  with StartupInfo do
  begin
    cb := SizeOf(TStartupInfo);
    dwFlags := startf_UseShowWindow;
    wShowWindow := SW_HIDE;
  end; { with }

"start.exe" gebruiken is niet de mooiste manier, kijk eens naar ShellExecute() en ShellExecuteEx()

  • Aetje
  • Registratie: September 2001
  • Laatst online: 18-12-2025

Aetje

Troubleshooting met HAMERRR

Topicstarter
Toffie! Werkt als een tiet!

Ik bypass the ShellExec liever... D'r zit een mogelijkheid in Win om daar nog iets voor te krijgen. Sommige worms maken daar gebruik van. CreateProcess kent dat niet (geloof ik).

Forget your fears...
...and want to know more...


  • elevator
  • Registratie: December 2001
  • Niet online

elevator

Officieel moto fan :)

Op vrijdag 15 maart 2002 15:26 schreef Aetje het volgende:
Toffie! Werkt als een tiet!

Ik bypass the ShellExec liever... D'r zit een mogelijkheid in Win om daar nog iets voor te krijgen. Sommige worms maken daar gebruik van. CreateProcess kent dat niet (geloof ik).
ik vermoed dat start niet meer doet dan ShellExecute aanroepen. ShellExecute is ook gewoon een API call die bijv. gebruikt wordt als je print vanuit explorer e.d.

  • Guillome
  • Registratie: Januari 2001
  • Niet online

Guillome

test

Pcies, met shellexecute kan dat allemala ook.
www.av.com of file.txt of wat dan ook.
Werkt erg goed

If then else matters! - I5 12600KF, Asus Tuf GT501, Gigabyte Gaming OC 16G 5080 RTX, Asus Tuf Gaming H670 Pro, 48GB, Corsair RM850X PSU, SN850 1TB, Arctic Liquid Freezer 280, ASUS RT-AX1800U router

Pagina: 1