---
title: "Stänga program man själv startat från delphi"
type: "forum-thread"
url: "https://www.webforum.nu/amne/programmering/43920-stänga-program-man-själv-startat-från-delphi"
topic: "Programmering"
topic_url: "https://www.webforum.nu/amne/programmering"
author: "Davida"
published: "2002-05-16T16:18:25.000Z"
updated: "2002-05-19T21:52:27.000Z"
replies: 2
views: 274
page: 1
pages: 1
language: "sv-SE"
site: "webForum — webforum.nu"
rights: "Upphovsrätten till varje inlägg tillhör dess författare."
attribution: "Citera som: webForum, https://www.webforum.nu/amne/programmering/43920-stänga-program-man-själv-startat-från-delphi"
---

# Stänga program man själv startat från delphi

## #1 — Davida, 2002-05-16T16:18Z

Jag använder följande kod för att starta ett program:

shellexecute(self.Handle,'OPEN',strpcopy(a,'index.htm'),nil,nil,SW_NORMAL);

Hur gör jag för att stänga detta programmet sedan

Permalänk: https://www.webforum.nu/p/43920

## #2 — Beatbox, 2002-05-17T06:45Z

Returnerar inte shellexecuta nått som du sedan kan använda dig av för att komma åt processen du startade ?

Permalänk: https://www.webforum.nu/p/674742

## #3 — jt, 2002-05-19T21:52Z

shellexecute returnerar inget som du kan använda använd CreateProcess istället. 

Modifiera och testa med exemplet nedan
Du borde även kunna använda TerminateProcess(istället för WM_CLOSE) , men den stänger nog programmet ganska rått.

{+----------------------------------------------------------------------
 \| Function WinExecEx
 \|
 \| Parameters :
 \|   FileName : name of application to start, may contain parameters
 \|   Visibility:  one of the ShowWindow visibility flags
 \| Returns    : the thread ID of the started processes main thread.
 \| Error Conditions:
 \|   Will raise an EWin32Error exception if the CreateProcess call fails.
 \| Created: 22.10.1999 by P. Below
 \+----------------------------------------------------------------------}
Function WinExecEx( FileName : String ; Visibility : integer ) : DWORD ; 
  Var
    zAppName:array\[0..512\] of char;
    StartupInfo:TStartupInfo;
    ProcessInfo:TProcessInformation;
  Begin
    Result := 0;
    StrPCopy(zAppName,FileName);
    FillChar(StartupInfo,Sizeof(StartupInfo),#0);
    StartupInfo.cb := Sizeof(StartupInfo);
    StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
    StartupInfo.wShowWindow := Visibility;
    If not CreateProcess(nil,
      zAppName,               { pointer to command line string }
      nil,                    { pointer to process security attributes }
      nil,                    { pointer to thread security attributes }
      False,                  { handle inheritance flag }
      CREATE_NEW_CONSOLE or   { creation flags }
      NORMAL_PRIORITY_CLASS,
      nil,                    { pointer to new environment block }
      nil,                    { pointer to current directory name }
      StartupInfo,            { pointer to STARTUPINFO }
      ProcessInfo)            { pointer to PROCESS_INF }
    Then
      RaiseLastWin32Error
    Else Begin
      Result:= ProcessInfo.dwThreadId;
      CloseHandle( ProcessInfo.hProcess );
      CloseHandle( ProcessInfo.hThread );
    End;
  End; { WinExecEx }

Function EnumProc( aWnd: HWND; Var wnd: HWND ): BOOL; stdcall;
  Begin
    Result := True;
    If (GetWindowLong(aWnd, GWL_HWNDPARENT) = 0) and
       (IsWindowVisible( aWnd ) or IsIconic(aWnd))
    Then Begin
      Result := False;
      wnd:= aWnd;
    End; { If }
  End;

Procedure TForm1.Button1Click(Sender: TObject);
Var
  threadID: DWORD;
  wnd: HWND;
  buf: Array \[0..255\] of char;
Begin
  threadID:= WinexecEx('edit.com', SW_SHOWNORMAL );
  Sleep( 1000 );
  wnd:= 0;
  EnumThreadWindows( threadID, @EnumProc, integer(@wnd));
  memo1.clear;
  memo1.lines.add( Format('Found window, handle: %d',\[wnd\]));
  GetClassname( wnd, buf, sizeof(buf));
  memo1.lines.add( Format('Classname is %s', \[ buf \]));
  SendMessage( wnd, WM_GETTEXT, Sizeof(buf), integer(@buf));
  memo1.lines.add( Format('Caption is %s', \[ buf \]));
  memo1.lines.add( 'Now trying to close this window...');
  SendMessage( wnd, WM_CLOSE, 0, 0 );
End;

Permalänk: https://www.webforum.nu/p/679024

---

Tråden på webben: https://www.webforum.nu/amne/programmering/43920-stänga-program-man-själv-startat-från-delphi
