Task / Process überwachen

Für allgemeine Fragen zur Programmierung mit PureBasic.
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Task / Process überwachen

Beitrag von Hoto »

Also, bevor Missverständnisse aufkommen, will ich mein Problem etwas ausführlicher beschreiben, daher lest euch das bitte vorher durch bevor ihr mich auf irgendwas altes Verweist, denn ich konnte weder im alten Forum, noch im CodeArchiv oder bei den UserLibs etwas finden was konkret das angeht (wenn mir das auch etwas seltsam erscheint).

Das Problem: Ich hab ein kleines Programm geschrieben, das neben der Uhr als TrayIcon im Hintergrund läuft, mein Programm soll nun auf ein Fremdprogramm reagieren oder besser gesagt, solange das Fremdprogramm läuft sollen bestimmte Funktionen aktiviert werden und sobald das Fremdprogramm beendet wird sollen die Funktionen wieder deaktiviert werden. Das wiederrum bedeutet, das ständig oder in regelmässigen Abständen überprüft werden muss ob das Fremdprogramm läuft.

Wie kann ich nun am besten Prüfen ob ein Fremdprogramm läuft oder nicht? Im Taskmanager wird ja von den Programmen immer die Start exe angezeigt, darüber müsste es doch auf einfachste weise möglich sein zu prüfen ob ein Programm läuft, nur wie gesagt konnte ich da überhaupt nix dazu finden. Es müsste doch irgendwie möglich sein einfach abzufragen ob z.B. die "Notepad.exe" gerade läuft ohne irgendwelche Umwege oder ist Windows da genauso beknackt wie beim Dateisystem? Da darf ich ja auch das komplette Verzeichnis durchgehen, wenn ich nur wissen will wieviele Dateien in einem Verzeichnis sind... :freak: Ich hoffe das ist nicht so unnötig umständlich... :roll:
Benutzeravatar
Falko
Admin
Beiträge: 3535
Registriert: 29.08.2004 11:27
Computerausstattung: PC: MSI-Z590-GC; 32GB-DDR4, ICore9; 2TB M2 + 2x3TB-SATA2 HDD; Intel ICore9 @ 3600MHZ (Win11 Pro. 64-Bit),
Acer Aspire E15 (Win11 Home X64). Purebasic LTS 6.11b1
HP255G8 Notebook @AMD Ryzen 5 5500U with Radeon Graphics 2.10 GHz 3.4GHz, 32GB_RAM, 3TB_SSD (Win11 Pro 64-Bit)
Kontaktdaten:

Beitrag von Falko »

Ist zwar nicht in Purebasic, aber dieser VB-Source könnte vielleicht weiterhelfen.

http://vbclassic.piranho.com/Visual-Bas ... 10/001.htm

MfG Falko
Bild
Win11 Pro 64-Bit, PB_6.11b1
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Beitrag von Hoto »

Hm, das hilft mir so nicht weiter, da das Fremdprogramm nicht über mein Programm gestartet wird, ich könnte das selbst wenn ich wollte so nicht machen, da das Fremdprogramm über ein anderes gestartet werden muss und somit für mein Programm es sich darstellt als ob das Fremdprogramm sich nach dem Start direkt wieder beendet hätte.

Beispiel wäre: ich will x.exe überwachen ob es läuft, kann x.exe aber nicht direkt starten sondern muss dazu y.exe starten, das von sich aus dann x.exe startet und sich selbst (y.exe) sofort wieder beendet.

Genau aus dem Grund geht das starten und überwachen aus meinem Programm heraus auf die Art nicht. Ich muss es also so überwachen, als wenn ich das Fremdprogramm manuell ganz normal starte.

Trotzdem danke für den Tipp, ohne den hätte ich total vergessen das noch zu erwähnen, was ja doch recht wichtig ist.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Vielleicht hilft dies hier:

Code: Alles auswählen

Global NotePadHwnd.l, NotePadTitle.s
Procedure.l EnumProcedure(WindowHandle.l, Parameter.l)
  Title$ = Space(255)
  GetWindowText_(WindowHandle, @Title$, 255)
  If FindString(Title$, NotePadTitle, 1) = 1
    NotePadHwnd = WindowHandle
    ProcedureReturn 0
  Else
    ProcedureReturn 1
  EndIf
EndProcedure

NotePadTitle = "Unbenannt - Editor"

Repeat
  EnumWindows_(@EnumProcedure(), 0)
  Delay(100)
Until NotePadHwnd

Debug NotePadHwnd
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
NicTheQuick
Ein Admin
Beiträge: 8820
Registriert: 29.08.2004 20:20
Computerausstattung: Ryzen 7 5800X, 64 GB DDR4-3200
Ubuntu 24.04.2 LTS
GeForce RTX 3080 Ti
Wohnort: Saarbrücken

Beitrag von NicTheQuick »

Es gibt doch von Rings die Process-Library, mit der man herausfinden kann, welche Programm gerade laufen und sie sogar beenden, die Priorität ändern kann, usw.
Also benutzt man diese Library einfach um herauszufinden, ob [c]Notepad.exe[/c] gerade läuft.

Hier gehts zum entsprechenden Thread von Rings
Benutzeravatar
Hoto
Beiträge: 294
Registriert: 01.09.2004 22:51

Beitrag von Hoto »

hm, über den Window Titel das zu machen hab ich mir auch schon überlegt, nur nicht jedes Programm hat einen, für den jetzigen Zweck müsste es zwar reichen, aber ich hät halt doch lieber die richtige Lösung genommen, das wirkt für mich auch ehr wie eine Notlösung.

Bevor ich aber noch wahnsinnig wegen dem werde, werd ichs jetzt erstmal mit dem Window Titel probieren, mit dem was ich eigentlich wollte hab ich mich in den letzten Wochen immer wieder mal beschäftigt gehabt und nach einer Lösung gesucht und nichts gefunden (ist klar, sonst gäbs den Post so nicht ;) ). Also danke mal. :)

Trotzdem wüsste ich gern wie die direkte Lösung zu dem Problem aussieht, also ohne irgendwelche Notumwege.

@NicTheQuick: thx, werd ich mir mal ansehn, ich hoff nur die bläht mein Tool nicht zu sehr auf, brauch ja nur wirklich die 1 Funktion.

Edit: astrein, die Userlib da ist echt fein, vorallem nicht all so gross und mein Programm ist unmerklich grösser. Damit kann ich mir eine andere Lösung sparen. ;)

Nochmals vielen Danke für die Hilfe.
Antworten