AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

ICQ über eigenes Programm beenden

Ein Thema von Mazel · begonnen am 19. Feb 2007 · letzter Beitrag vom 19. Aug 2009
Antwort Antwort
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#1

ICQ über eigenes Programm beenden

  Alt 19. Feb 2007, 19:30
Hallo,

ich möchte ICQ über mein eigenes, speziell für mich organisiertes, Programm beenden.
Dazu habe ich mit EnumWindows mir alle Fenster auflisten lassen um, da das Programm nur für mich sein soll, das jeweilige Fenster zu wählen um es mit WM_CLOSE zu schließen. Ich dachte das richtige Fenster sei 'ICQNUMMER', dies ist aber nur die Liste meiner Kontakte nicht aber die Anwendung. Ich habe es dann mit dem Fenster 'ICQ Lite' versucht, leider hat dies auch nicht geklappt. Daher ermittle ich nun immer den Prozess von ICQ. Nun könnte ich mit TerminateProcess den Prozess radikal beenden, was aber nicht mein Ziel ist.

Was schlagt ihr vor?

Hier der Code in dem ich den Prozess ermittle und je nach Bedingung den Prozess beenden möchte:
Delphi-Quellcode:
function GetProcess(Process: String; KillProcess: Boolean): Boolean;
var
  hProcSnap : THandle;
  pe32 : TProcessEntry32;

begin
 Result := False;
 hProcSnap := CreateToolHelp32SnapShot(TH32CS_SNAPPROCESS, 0);
 If hProcSnap <> INVALID_HANDLE_VALUE then
  begin
   pe32.dwSize := SizeOf(ProcessEntry32);
   If Process32First(hProcSnap, pe32) then
    While Process32Next(hProcSnap, pe32) do
     begin
      If Pos(Process, LowerCase(pe32.szExeFile)) <> 0 then
       begin
        If KillProcess then
         begin
           ???
         end
        //If KillProcess then Result := TerminateProcess(OpenProcess(Process_Terminate, False, pe32.th32ProcessID), 0)
        Else Result := True;
        Break;
       end;
     end;
    CloseHandle(hProcSnap);
  end;
end;
Gruß
Mazel
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#2

Re: ICQ über eigenes Programm beenden

  Alt 21. Feb 2007, 14:15
*push*
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#3

Re: ICQ über eigenes Programm beenden

  Alt 21. Feb 2007, 14:40
hast du es schon mit wm_syscommand anstelle von wm_close probiert?
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#4

Re: ICQ über eigenes Programm beenden

  Alt 21. Feb 2007, 14:56
Hallo,

nein, hab ich vorher noch nicht probiert aber eben und leider hat auch dies nicht geklappt, obwohl ich sicher bin das richtige Fenster zum Prozess 'ICQ Lite' sein müsste, weil nur dieses oder das mit der ICQ NUMMER exisitert und das mit der Nummer nur die Liste ist.
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#5

Re: ICQ über eigenes Programm beenden

  Alt 21. Feb 2007, 15:06
hast du dir schonmal per WinSpy das Handle des Fensters (mit der ICQ-Nummer) geholt und dann die Message dort hinn geschickt? (sozusagen sicher gestellt das du auch das richtige Handle hast).
Und lässt sich das ICQ-Fenster über Alt+F4 beenden? wenn dem so ist müsste es auch per message funktionieren.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Mazel
Mazel

Registriert seit: 11. Nov 2005
Ort: Leipzig
831 Beiträge
 
#6

Re: ICQ über eigenes Programm beenden

  Alt 21. Feb 2007, 15:32
Was ist WinSpy? Das kenn ich leider nicht.
Ich bin sicher, dass ich das richtige Handle des Fenster mit der ICQ-Nummer habe, denn dies funktioniert. Wenn die Liste im Vordergrund ist und ich WM_CLOSE sende an dieses Fenster sende, wird es geschlossen das funktoniert auch mit ALT + F4. Deshalb denke ich das es das Fenster 'ICQ Lite' sein müsste aber da passiert eben nichts.

Gibt es denn noch eine andere Möglickeit ICQ sanft zu beenden?
Marcel Jänicke
www.mj-software.net
  Mit Zitat antworten Zitat
aegidos

Registriert seit: 30. Okt 2007
40 Beiträge
 
Delphi 2007 Professional
 
#7

Re: ICQ über eigenes Programm beenden

  Alt 19. Aug 2009, 14:22
Hy,
Ich habe versucht diesen Code mal in mein Projekt mit einzubauen.
Leider fehlt mir offensichtlihc noch eine uses direktive um alles zum laufen zu bekommen.

TProcessEntry32 sowie CreateToolHelp32SnapShot werden als undefinierte Bezeichner angekreidet.

Was muss ich denn noch für Systembibliotheken einbinden?

Danke schonmal und schöne Grüße
Andi
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
43.993 Beiträge
 
Delphi 12 Athens
 
#8

Re: ICQ über eigenes Programm beenden

  Alt 19. Aug 2009, 14:29
OH > Delphi-Referenz durchsuchenCreateToolHelp32SnapShot

aber in soeinem Fall, wo die OH es mal nicht kennt...

Google > Bei Google suchenCreateToolHelp32SnapShot
DP > Hier im Forum suchenCreateToolHelp32SnapShot

oder ganz einfach

Suchen [Strg+F] (natürlich in Delphi) > In Dateien suchen > in Verzeichnissen inkl. Unterverzeichnisse
und da das Delphi-Source-Vereichnis (z.B. C:\Programme\Borland\Delphi7\Source ) = TlHelp32
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
my Delphi wish list : BugReports/FeatureRequests
  Mit Zitat antworten Zitat
Benutzerbild von Neutral General
Neutral General

Registriert seit: 16. Jan 2004
Ort: Bendorf
5.219 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

Re: ICQ über eigenes Programm beenden

  Alt 19. Aug 2009, 14:29
Hi,

Es gibt noch einen anderen Weg. Einen, den ich meistens benutze:

Delphi-Quellcode:
var id: Cardinal;
     wnd, h: THandle;
begin
  wnd := FindWindow(*ICQ*);
  GetWindowThreadProcessID(wnd,id);
  h := OpenProcess(PROCESS_ALL_ACCESS,false,id);
  TerminateProcess(h);
end;
Gruß
Neutral General
Michael
"Programmers talk about software development on weekends, vacations, and over meals not because they lack imagination,
but because their imagination reveals worlds that others cannot see."
  Mit Zitat antworten Zitat
aegidos

Registriert seit: 30. Okt 2007
40 Beiträge
 
Delphi 2007 Professional
 
#10

Re: ICQ über eigenes Programm beenden

  Alt 19. Aug 2009, 14:53
Hy Danke für die schnelle Hilfe.

Der Process den ich beenden möchte hat kein Window daher habe ich die oben vorgestellte Funktion benutzt.
Zitat:
OH > CreateToolHelp32SnapShot

aber in soeinem Fall, wo die OH es mal nicht kennt...
Ja genau die OH hat mich im Stich gelassen
Zitat:
Google > CreateToolHelp32SnapShot
findet man mittlerweile sooo viel das es echt Zeitaufwändig ist die ganzen Informationen zu selektieren, denn unter den ersten 20 Treffern muss ich ganz ehrlich sagen habe ich bei google nicht gefunden dass man in der uses Direktive TlHelp32 hinzufügen muss !

Zitat:
DP > CreateToolHelp32SnapShot

oder ganz einfach

Suchen [Strg+F] (natürlich in Delphi) > In Dateien suchen > in Verzeichnissen inkl. Unterverzeichnisse
und da das Delphi-Source-Vereichnis (z.B. C:\Programme\Borland\Delphi7\Source ) = TlHelp32
Das hats gebracht auch wenns bei mir hier versteckt war:
C:\Program Files\CodeGear\RAD Studio\5.0\source\Win32

Diese Art der Suche bringt mich nun hoffentlich immer schneller ans Ziel wenn ich mal wieder nicht weiss was ich für Bibliotheken benutze bei meinem Copy Paste Code

DANKE !!! @himitsu: du bist ja auch 10mal schneller als google
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:57 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz