Fråga : ShellExecute SW_HIDE

När using ShellExecute SW_HIDE, hur du får handtaget un-döljer applikationen using ShowWindow? " klar "

Svar : ShellExecute SW_HIDE

Classnamen för anteckningsbok är inte notepad.exe…,
Emellertid är här något som du kan intresseras in. Peter som är nedanför till räddningsaktionen igen…,


1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
enhet Unit1;

ha kontakt

bruk
  Windows meddelanden, SysUtils, Variants, klassificerar, diagram, kontrollerar, bildar,
  Dialoger StdCtrls, ShellAPI, TlHelp32;

typ
  TForm1 = klassificerar (TForm)
    Button1: TButton;
    tillvägagångssätt Button1Click (avsändare: TObject);
  privat
    {Privata förklaringar}
  offentligt
    {Offentliga förklaringar}
  avsluta;

var
  Form1: TForm1;

genomförande

{$R *.dfm}

typ
  TEnumData = rekord
    hW: HWND;
    pID: DWORD;
  avsluta;

fungera EnumProc (hw: HWND; var-data: TEnumData): Bool; stdcall;
var
  pID: DWORD;
börja
  Resultat: = True;
  om (GetWindowLong (hw, GWL_HWNDPARENT) = 0) och
     (IsWindowVisible (hw) eller IsIconic (hw)) därefter
  börja
    GetWindowThreadProcessID (hw, @pID);
    Om pID = data.pID därefter
    börja
      data.hW: = hW;
      Resultat: = falskt;
    avsluta; {Om}
  avsluta; {Om}
avsluta; {EnumProc}

fungera WindowFromProcessID (pID: DWORD): HWND;
var
  data: TEnumData;
börja
  data.pID: = pID;
  data.hW: = 0;
  EnumWindows (@EnumProc, longint (@data));
  Resultat: = data.hW;
avsluta; {WindowFromProcessID}

fungera WindowFromAppname32 (appname: Stränga): HWND;
  {Take endast applikationfilenamen, inte full bana!
    Behov att passera f8orlängningen som väl. }
var
  kort: THandle;
  processEntry: TProcessEntry32;
börja
  Resultat: = 0;
  appName: = bokstav (appname);
  kort: = CreateToolhelp32Snapshot (
                TH32CS_SNAPPROCESS,
                0);
  om kort <> 0 därefter
  försök
    processEntry.dwSize: = (processEntry) Sizeof;
    om Process32First (kortet som, är processEntry) därefter
    repetition
      om AnsiCompareText (
           appname,
           ExtractFilename (StrPas (processEntry.szExeFile))
           ) = 0
      därefter
      börja
        Resultat: = WindowFromProcessID (processEntry.th32ProcessID);
        Avbrott;
      avsluta; {Om}
    till inte Process32Next (kortet som, är processEntry);
  slutligen
    CloseHandle (kort);
  avsluta; {försök}
avsluta; {WindowFromAppname32}

tillvägagångssätt TForm1.Button1Click (avsändare: TObject);
var
  x: THandle;
börja
  ShellExecute (0, ”öppnar”, ”c:\WINDOWS\notepad.exe”, '', '', SW_SHOW);
  x: = WindowFromAppname32 (”NotePad.exe”);
  ShowMessage (IntToStr (x));
avsluta;

avsluta.
Andra lösningar  
 
programming4us programming4us