Feststellen, ob ein Programm läuft

Hallo Leute

Für einen C-Programmierer vermutlich kein Problem: ich will aus einen Programm heraus feststellen können, ob ein bestimmtes Programm gerade läuft. Betriebssystem ist Windows XP. Als Programmiersprache wird entweder Visual Basic oder Powerbuilder verwendet. Beide können ohne Probleme DLL-Aufrufe durchführen.

Ich vermute mal, man muss lediglich irgendeine Funktion vom Betriebssystem aufrufen. Erinnere mich irgendwie an „getmodulehandle“ oder so ähnlich. Habe aber keine Ahnung, wie die genaue Syntax lautet. Bitte um sachdienliche Hinweise für C-Laien.

Erwin

Hi,
http://www.vbarchiv.net/vbapi/GetModuleHandle.php

HTH
Quaser

Hi,
http://www.vbarchiv.net/vbapi/GetModuleHandle.php

HTH
Quaser

Hallo,

GetModuleHandle liefert laut Hilfe nur Info über das eigene Programm (vom dem es aufgerufen wurde), nicht über andere.

Das Finden von Programmen ist in Windows meines Wissens nicht vorgesehen, nur das Finden von Fenstern.

Gruss Reinhard

na gut - wie dann?
tja, mir ist es im prinzip egal, ob ich nach dem modulnamen oder nach einem fenster suche. das gewünschte ergebnis ist immer das selbe: ich will wissen, ob eine bestimmte anwendung läuft oder nicht.

habe schon unter winxp-pro das programm tasklist gefunden, das alles anzeigen würde, was ich haben will. irgenwie muss dieses programm ja auch an die infos rankommen. geht das tatsächlich „nur am system vorbei“ oder gibt es da api-aufrufe dafür?

erwin

habe schon unter winxp-pro das programm tasklist gefunden, das
alles anzeigen würde, was ich haben will. irgenwie muss dieses
programm ja auch an die infos rankommen. geht das tatsächlich
„nur am system vorbei“ oder gibt es da api-aufrufe dafür?

Hi erwin,
google doch mal in Groups nach
declare alias findwindow
dann kommst du zu APIs die das können.
Und google auch nach
hwnd Declare alias
Jeder Prozess hat eine Nummer, eben diese hwnd-Nummer mit der man ihn ansprechen/killen usw. kann.
Gruß
Reinhard

Hallo!

Hi erwin,
google doch mal in Groups nach
declare alias findwindow
dann kommst du zu APIs die das können.
Und google auch nach
hwnd Declare alias
Jeder Prozess hat eine Nummer, eben diese hwnd-Nummer mit der
man ihn ansprechen/killen usw. kann.
Gruß
Reinhard

So ist das nicht!
Ein Prozess wird nicht per HWND sondern durch eine ProcessID gekennzeichnet.

Um zu ermitteln welche Prozesse im System laufen kannst du die ToolHelp32 API verwenden.
Anbei mal ein Codeschnippsel der Zeigt wie man die Prozesse Auflistet.
Nun ist es ein leichtes die ProcessID des (warscheinlich per Namen) gesuchten Prozesses zu ermitteln und entsprechend zu reagieren.

CString txt;
HANDLE hProcessSnap = NULL;
PROCESSENTRY32 pe32 = {0};
//create the processlist
nodeStat+=":stuck_out_tongue:ROCESSLIST";
//take a snapshot of all processes in the system.
hProcessSnap = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (hProcessSnap == INVALID_HANDLE_VALUE) continue;

pe32.dwSize = sizeof(PROCESSENTRY32);

//walk the snapshot of the processes, and for each process,collect informations
if (Process32First(hProcessSnap, &pe32))
{
DWORD dwPriorityClass;
MODULEENTRY32 me32 = {0};
do
{
HANDLE hProcess;

// Get the actual priority class.
hProcess = OpenProcess (PROCESS_ALL_ACCESS,
FALSE, pe32.th32ProcessID);
dwPriorityClass = GetPriorityClass (hProcess);
CloseHandle (hProcess);

// process name: szExeFile
txt.Format(":EXEFILE,%s",pe32.szExeFile);nodeStat+=txt;
// process Id
txt.Format(":ID,%d",pe32.th32ProcessID);nodeStat+=txt;
// base priority of any threads
txt.Format(":stuck_out_tongue:RICLASSBASE,%d",pe32.pcPriClassBase);nodeStat+=txt;
// number of threads
txt.Format(":CNTTHREADS,%d",pe32.cntThreads);nodeStat+=txt;
/*
// Print the process’s information.
printf( „\nPriority Class Base\t%d\n“,
pe32.pcPriClassBase);
printf( „PID\t\t\t%d\n“, pe32.th32ProcessID);
printf( „Thread Count\t\t%d\n“, pe32.cntThreads);
*/
nodeStat+=":EOP";
}
while (Process32Next(hProcessSnap, &pe32));
}
CloseHandle (hProcessSnap);

Gruß Pauli!

p.s. An den MOD: BITTE das Eingabesteuerelement ersetzen, man kann hier nicht vernünftig Code Posten da Formatierung usw. im a. sind

1 Like

Danke an alle!
herzlichen Dank an alle für die Hilfe.

Erwin

[ot] und
Moin, Pauli,

man kann hier nicht vernünftig Code Posten

pre und /pre in spitzen Klammern leisten das.

Gruß Ralf

Hallo Erwin,
wenn du eine funktionuerende VB-Lösung gefunden hast, poste sie hier bitte.
Gruß
Reinhard

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]