Prüfen ob irgend ein Programm aktiv ist

Konzeptionelles, Technisches, Termine, Fragen zum Hersteller usw.

Moderator: Moderatoren

Antworten
Benutzeravatar
Bruno
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 103
Registriert: So, 16. Apr 2023 23:11
Wohnort: Lauterbach
Hat sich bedankt: 30 Mal
Danksagung erhalten: 4 Mal

Prüfen ob irgend ein Programm aktiv ist

Beitrag von Bruno »

Hi
gibt es die Möglichkeit festzustellen, ob ein Programm gestartet ( aktiv ) ist?
Damit meine ich ein Programm, z.B. Notepad, Paint, oder oder oder ... !
Die Prozesse von Windows.
Ich kann bei einem Dialogfenster ja festlegen, ob es in der Taskliste erscheint oder nicht.
Das zählt mit Sicherheit auch für andere Programme, z.B. Dienste.
Gruss Bruno
Xbase++ 1.9.355 ohne eExpress
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Prüfen ob irgend ein Programm aktiv ist

Beitrag von AUGE_OHR »

hi Bruno,
Bruno hat geschrieben: So, 30. Apr 2023 7:26 gibt es die Möglichkeit festzustellen, ob ein Programm gestartet ( aktiv ) ist?
Damit meine ich ein Programm, z.B. Notepad, Paint, oder oder oder ... !
hier eine Lösung mit OT4XB wenn die App in der Taskliste "sichtbar" ist

Code: Alles auswählen

#include "ot4xb.ch"
//-------------------------------------------------------------------------------------------------------------------------
proc appsys();return
//-------------------------------------------------------------------------------------------------------------------------
proc main()
local aList := aGetTaskBarWindows()
if Empty(aList)
   MsgBox( "Empty List" )
else
   DlgABrw( aList,"List Windows in the TaskBar",;
            { "HWND      ","Title                     ",;
              "ThreadId  ","ProcessId ","Process Name"},;
              {|aPos,u,oBrw| u := oBrw:GetData() , iif(Empty(u),,;
              @user32:FlashWindowEx({20,aList[u][1],3,10,500} ));
              })
end
return
//-------------------------------------------------------------------------------------------------------------------------
function WndEnumProc( hWnd , cona )
local aInfo := Array(5)
local n := @user32:GetWindowTextLengthA(hWnd)
local c                                      
if (n == 0 ) ; return .T. ; end
if (@user32:GetWindow(hWnd,4) != 0) ; return .T. ; end
if (@user32:GetParent(hWnd) != 0) ; return .T. ; end
if( @user32:IsWindowVisible(hWnd) == 0) ; return .T. ; end
if( lAnd( @user32:GetWindowLongA(hWnd, -20) , 0x80) ) ; return .T. ; end

aInfo[1] := hWnd
c := ChrR(0,n)
@user32:GetWindowTextA(hWnd,@c,Len(c)+1)
aInfo[2] := c
n := 0
aInfo[3] := @user32:GetWindowThreadProcessId(hWnd,@n)
aInfo[4] := n
c := ChrR(0,260)
aInfo[5] := cPid2ModName(aInfo[4] )
aadd( _con2var(cona) , aInfo )
return .T.
//-------------------------------------------------------------------------------------------------------------------------
function aGetTaskBarWindows()
local aWnd := {}
local cona := _var2con(aWnd)
@user32:EnumWindows(_callback_WndEnumProc(),cona)
_conRelease(cona)
return aWnd
//-------------------------------------------------------------------------------------------------------------------------
static function cPid2ModName( nPid )
local hProcess := @kernel32:OpenProcess(0x410,.F.,nPid)
local cName    := Chrr(0,512)
local hMod     := 0
local cbn      := 0
if( !Empty(hProcess) )
   if( @psapi:EnumProcessModules(hProcess,@hMod,4,@cbn) != 0 )
      @psapi:GetModuleBaseNameA(hProcess,hMod,@cName, Len(cName))
   end
   @kernel32:CloseHandle(hProcess)
end
return TrimZ(cName)
Bruno hat geschrieben: So, 30. Apr 2023 7:26 Die Prozesse von Windows.
Ich kann bei einem Dialogfenster ja festlegen, ob es in der Taskliste erscheint oder nicht.
Das zählt mit Sicherheit auch für andere Programme, z.B. Dienste.
eine Xbase++ App "erscheint" wenn

Code: Alles auswählen

   oDialog:Tasklist := .T.
gesetzt hat
gruss by OHR
Jimmy
Benutzeravatar
Bruno
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 103
Registriert: So, 16. Apr 2023 23:11
Wohnort: Lauterbach
Hat sich bedankt: 30 Mal
Danksagung erhalten: 4 Mal

Re: Prüfen ob irgend ein Programm aktiv ist

Beitrag von Bruno »

AUGE_OHR hat geschrieben: So, 30. Apr 2023 13:49 hi Bruno,

hier eine Lösung mit OT4XB wenn die App in der Taskliste "sichtbar" ist
Hallo Jimmy,
Danke.

Holt das die Information aus der Taskliste, die man sieht, wenn man den Task Manager aufruft?

ot4xb, ich habe zwar die ch Dateien, aber die lib Dateien hab ich nicht mehr. war wohl mit auf den Datenträgern welche 2013 zerstört wurden.
Gruss Bruno
Xbase++ 1.9.355 ohne eExpress
Benutzeravatar
AUGE_OHR
Marvin
Marvin
Beiträge: 12906
Registriert: Do, 16. Mär 2006 7:55
Wohnort: Hamburg
Hat sich bedankt: 19 Mal
Danksagung erhalten: 45 Mal

Re: Prüfen ob irgend ein Programm aktiv ist

Beitrag von AUGE_OHR »

hi Bruno,
Bruno hat geschrieben: So, 30. Apr 2023 14:50 ot4xb, ich habe zwar die ch Dateien, aber die lib Dateien hab ich nicht mehr. war wohl mit auf den Datenträgern welche 2013 zerstört wurden.
https://blog.xbwin.com/
gruss by OHR
Jimmy
Benutzeravatar
Bruno
Rekursionen-Architekt
Rekursionen-Architekt
Beiträge: 103
Registriert: So, 16. Apr 2023 23:11
Wohnort: Lauterbach
Hat sich bedankt: 30 Mal
Danksagung erhalten: 4 Mal

Re: Prüfen ob irgend ein Programm aktiv ist

Beitrag von Bruno »

Hi Jimmy,
Bekomme diese Meldungen
[Error] : ALK2102: unresolved external symbol DLGABRW
[Error] : ALK2102: unresolved external symbol _CALLBACK_WNDENUMPROC

Hat sich erledigt, habe das Testprogramm bei ot4xb runtergeladen.

Danke
Gruss Bruno
Xbase++ 1.9.355 ohne eExpress
Antworten