Autor | Thema: Programme im Hintergrund | | Datum:04.03.02 01:02 
(geroldflaig@gmx.de) | |
Hallo,
ich weiss die Frage gab es schon oefter, aber ich finde trotzdem keine Loesung..wie kann ich feststellen ob ein Programm, das im Hintergrund laeuft (kein fenster) noch da ist,bzw eberhaupt da ist.?
.ich weiss den Namen der exe sonst nichts..
Es waere schoen wenn jemand helfen koennte danke..
Gerold
|
| | Datum:15.03.02 10:56 
(risikowks@web.de) | |
Am einfachsten kannst du natürlich auf Windows Task (ctrl_alt-del) zurückgreifen und sehen ob dein Task erscheint.
|
| | Datum:15.03.02 22:06 
(mail@stschnell.de) | |
Hallo Gerold,
eine ausführliche Beschreibung, zur Lösung Deines Problems, findest Du in der neusten "Visual BASIC praxis", Ausgabe 01.2002, Seite 737 bis 740, Titel: "Desktop Fenster analysieren".
Die dort beschriebene Methode geht mit Win-API wie folgt vor:
GetDesktopWindow
GetWindow
GetWindowText
SearchWindow
FindWindow
ShowWindowInfos
(GetWindowRect)
GetWindowModuleFileName (ab Win 98)
Hoffe das dies ein Lichtblick für Dich ist.
Tschüss
Stefan Schnell
|
| | Datum:17.03.02 23:43 
(mail@stschnell.de) | |
Hallo Gerold,
der Ansatz aus dem o. g. Magazin ist sehr universell und baut vollständig auf das WinAPI auf, dies ist sehr umständlich. Einen kürzeren Weg könnte diese Lösung darstellen:
Def @GetWindowModuleFileName(3) !"USER32", "GetWindowModuleFileNameA"
Declare hWind%
Declare FName#
Dim FName#, 256
ClearList
AddWindows ""
WhileLoop %Getcount
hWind% = @FindWindow(@ListBoxItem$(&loop))
@GetWindowModuleFileName(hWind%, FName#, 256)
Print @String$(FName#, 1) 'oder 0
EndWhile
Dispose FName#
WaitKey
End
Leider konnte ich sie nicht testen, da sie erst ab Win98 läuft. Die Funktion GetWindowModuleFilename gibt es erst ab Win98.
Auch wenn AddWindows nur die Fenster mit einem Titel ermittelt, so erscheinen bei mir in der Liste auch die versteckten Fenster (habe dies mit einem Taskmanager (FTask), der auch die versteckten Tasks anzeigt ausprobiert). Vielleicht hilft Dir dieser Ansatz weiter und löst Dein Problem.
Tschüss
Stefan Schnell
|
| | Datum:18.03.02 15:16 
(geroldflaig@gmx.de) | |
Hallo,
entschuldigt die spaete reaktion. Bin derzeit in USA und hab nicht immer die Moeglichkeit zum lesen und antworten.
Vielen Dank fuer die antworten. Ich werde es gleich testen..
Gerold
|
| | Datum:18.03.02 16:43 
(mail@stschnell.de) | |
Hallo Gerold,
hier ein Auszug aus: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/windows_6ap1.asp
Platform SDK: Windows User Interface
GetWindowModuleFileName
The GetWindowModuleFileName function retrieves the full path and file name of the module associated with the specified window handle.
UINT GetWindowModuleFileName(
HWND hwnd, // handle to window
LPTSTR lpszFileName, // file name buffer
UINT cchFileNameMax // max size of file name buffer
);
Parameters
hwnd
[in] Handle to the window whose module file name will be retrieved.
lpszFileName
[out] Pointer to a buffer that receives the path and file name.
cchFileNameMax
[in] Specifies the maximum number of TCHARs that can be copied into the lpszFileName buffer.
Return Values
The return value is the total number of TCHARs copied into the buffer.
Remarks
Windows 98/Me: GetWindowModuleFileNameW is supported by the Microsoft Layer for Unicode. To use this, you must add certain files to your application, as outlined in Microsoft Layer for Unicode on Windows 95/98/Me Systems.
Requirements
Windows NT/2000/XP: Included in Windows NT 4.0 SP3 and later.
Windows 95/98/Me: Included in Windows 98 and later.
Header: Declared in Winuser.h; include Windows.h.
Library: Use User32.lib.
Unicode: Implemented as Unicode and ANSI versions on Windows NT/2000/XP. Also supported by Microsoft Layer for Unicode.
D. h. die Funktion wird tatsächlich so verwendet wie angenommen.
Die Ausgabe muss Print @String$(FName#, 0) heißen, habe sie mit GetWindowText ausprobiert (macht zwar keinen grossen Sinn, aber für die Funktionsweise ist es okay).
Tschüss
Stefan Schnell
|
| | Datum:18.03.02 16:44 
(geroldflaig@gmx.de) | |
Hallo
ich habe es mal getestet. Es funktioniert gut, nur ist esnicht ganz was ich suche..ich habe einen (oder mehrere) Programme im Hintergrund. Diese Programme laufen nur im Hintergrund und haben keine Eingabeoberflaeche. Aber ich weiss den namen der Programme..
Ich habe nu noch eine andere Frage: Ich habe neuerdings konstanten eingebaut, funktioniert auch im Interpretermodus. NUr nachdem kompilieren werden sie nicht erkannt bzw eingebaut. Ich habe sie mit def angelegt
z.B.
def &ModName 1
Ich arbeite mit Profan 7
Vielen dank fuer die Hilfe..
Gerold
|
| | Datum: 18.03.02 21:14 
(mail@stschnell.de) | |
Hallo Gerold,
der nächste Step wäre dann der Test auf geladene Module. Habe mir mal eine AnalyseTool angeschaut, dies setzt hauptsächlich auf TOOLHELP.DLL auf, TOOLHELP - Debug/Tool Helper library. Dies ist eine 16bit Lib (man höre und staune) sowohl unter Win95 OSR2 als auch Win98. Wie dem auch sei, TOOLHELP ist nicht im WinAPI dokumentiert, es lässt sich nur lapidar darüber aus:
Tool help functions make it easier for developers to obtain information about currently executing Microsoft® Win32®-based applications. These functions are designed to streamline the creation of Win32-hosted tools, specifically Windows-based debugging applications.
Das war es, die Lib beinhaltet folgende Funktionen:
LOCAL32INFO
GLOBALENTRYMODULE
MEMORYREAD
GLOBALNEXT
LOCAL32NEXT
TASKFINDHANDLE
INTERRUPTREGISTER
MODULEFINDHANDLE
TIMERCOUNT
GLOBALFIRST
STACKTRACENEXT
MEMMANINFO
STACKTRACEFIRST
GLOBALINFO
TASKGETCSIP
TASKSETCSIP
MODULEFIRST
SYSTEMHEAPINFO
MODULENEXT
NOTIFYREGISTER
LOCAL32FIRST
STACKTRACECSIPFIRST
GLOBALENTRYHANDLE
TASKSWITCH
LOCALINFO
LOCALFIRST
CLASSNEXT
NOTIFYUNREGISTER
MEMORYWRITE
TASKFIRST
TERMINATEAPP
INTERRUPTUNREGISTER
TASKNEXT
MODULEFINDNAME
CLASSFIRST
GLOBALHANDLETOSEL
LOCALNEXT
Eingehendere Kenntnisse zu diesem Thema habe ich nicht.
Viel Erfolg bei der Lösung Deines Problems, tschüss
Stefan Schnell
|
|
|