Autor Beitrag
Jan K.
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36

Win XP
D6
BeitragVerfasst: Mo 26.05.03 22:02 
Ich möchte einen bestimmten Prozess beenden, den ich mit
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
var  TListe     : TList;

function EnumWindowsProc(WND: HWND; LParam: LPARAM): BOOL; stdcall;
var PLW: ^HWND;
begin
  Result := True;
  If IsWindow(WND) and ((IsWindowVisible(WND) {or IsIconic(WND)}and
    ((GetWindowLong(WND, GWL_HWNDPARENT) = 0or
     (GetWindowLong(WND, GWL_HWNDPARENT) = GetDesktopWindow)) and
     (GetWindowLOng(WND, GWL_EXSTYLE) and WS_EX_TOOLWINDOW = 0)) Then begin 
       If Assigned(TListe) Then begin
         new(PLW);
         PLW^ := WND; 
         TListe.Add(PLW); 
       end
  end
end


procedure TForm1.FormCreate(Sender: TObject);
begin
  TListe          := TList.Create;
  EnumWindows(@EnumWindowsProc,0);
end;

ermittelt habe.

bei meinem programm möchte ich das Net Send Fenster schlißen, falls eins geöffnet ist, sodass alle ankommenden Nachrichten geschlossen werden.

hab im Forum schon was von CloseHandle oder TerminateProcess gelesen, kann da aber irgendwie nichts mit anfangen... :roll:
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Mo 26.05.03 22:14 
ausblenden Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
function TerminateProcessByWindow(wnd: HWND): Boolean;
var
  idProcess: Cardinal;
  hProcess: THandle;
begin
  Result := False;
  GetWindowThreadProcessId(wnd, idProcess);
  hProcess := OpenProcess(PROCESS_TERMINATE, False, idProcess);
  if hProcess <> 0 then
  begin
    TerminateProcess(hProcess, 0);
    CloseHandle(hProcess);
    Result := True;
  end;
end;


Du gibst hoffentlich die Elemente der Liste mit Dispose wieder frei.

_________________
Ist Zeit wirklich Geld?
Jan K. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36

Win XP
D6
BeitragVerfasst: Di 27.05.03 15:02 
Danke, bis jetzt hab ich nichts mit dispose wieder freigegeben, was passiert denn, wenn man das nich macht??? :roll:
Luckie
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Di 27.05.03 16:00 
So lange deine Anwendung läuft, müllst du dir den Speicher deiner Anwendung voll und wenn du Pech hast, ist irgendwann Ende.

Grundsätzlich gilt: Jeden Speicher, den man selber von Hand angefordert hat, muß man auch wieder freigeben. :mahn:
AndyB
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 1173
Erhaltene Danke: 14


RAD Studio XE2
BeitragVerfasst: Di 27.05.03 16:37 
Du musst far kein New(PLW) aufrufen. Ein einfacher Typecase von HWND nach Pointer tut es auch.

ausblenden Delphi-Quelltext
1:
2:
3:
if Assigned(TListe) then begin
  TListe.Add(Pointer(WND));
end;

Das hat auch den Vorteil, dass du kein Dispose benötigst.

_________________
Ist Zeit wirklich Geld?
Jan K. Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 36

Win XP
D6
BeitragVerfasst: Mo 02.06.03 14:49 
ok, ich komm da jetzt nicht so mit zurecht, könnt ich mir einfach sagen, wie ich es anstelle, eine Net Send Nachricht zu schließen, nachdem ich sie empfangen habe, ohne den Nachrichtendienst zu deaktivieren
ShadowThief
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 278



BeitragVerfasst: Mo 02.06.03 16:55 
kannst auch einfach den nachrichtendienst deaktivieren.

shadow.
BungeeBug
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 901



BeitragVerfasst: Mo 02.06.03 17:16 
Hi,
eigendlich ganz einfach :)

ausblenden Delphi-Quelltext
1:
SendMessage(FindWindow(nil,'Nachrichtendienst '),WM_Close,0,0);					


Das was du da oben gebaut hast find ich umständlich :) ... zumindest hierfür :)

MfG BungeeBug