webForumDet fria alternativet

Get handle

C/C++

8 svar · 435 visningar · startad av Choice2

Medlem sedan sep. 200134 inlägg
Frågan#1

Jag undrar om det finns nåt lätt sätt att få tag på handle till en process?

Om du tänker att du kör winamp och startar upp ett annat program så vill jag kunna genom det nystartade programmet stänga ner winamp, eller kanske pausa det bara.

Någon som har en ide?

------------------
/*
include <geek.h>
http://warzone.big.du.se
*/

Medlem sedan apr. 20002 487 inlägg
#2

.

[Redigerat av Muzzafarath den 20 nov 2001]

Medlem sedan apr. 20002 487 inlägg
#3

Någon som har en ide?

Om det bara är Winamp som du hade tänkt kontrollera kan du titta här.

------------------
"If God had wanted you to wear earrings, he'd have made you a girl." - Alabama Governor Don Siegelman :e

Medlem sedan sep. 200134 inlägg
#4

Nah, typ inte bara winamp.. men jag tror att funktionen är CreateToolhelp32Snapshot
är dock inte säker.

Någon som har koll på denna funktion och kan förklara lite hur den funkar?

------------------
/*
include <geek.h>
http://warzone.big.du.se
*/

Medlem sedan apr. 20003 971 inlägg
#5

Ja, det finns lätta och svåra sätt. Har du ett handtag till ett fönster kan du få processens ID. Ett handtag till processen får du genom att öppna den.

För att få ett handtag till ett fönster kan du utgå från muspekarens position, söka med namn/klass eller uppräkna alla fönster.

Alternativt kan du uppräkna alla processer. Det kräver dock olika kod beroende på vilken Windows-version som körs.

------------------
- Swey
Med reservation för upprörda känslor.

[Redigerat av Swey den 20 nov 2001]

Medlem sedan juni 2000350 inlägg
#6

emulera?

Medlem sedan apr. 20003 971 inlägg
#7

Jag ber om ursäkt. Emulera var en helt galen översättning av enumerate (uppräkna). Jag har ändrat nu.

------------------
- Swey
Med reservation för upprörda känslor.

Medlem sedan okt. 20013 217 inlägg
#8

Om du befinner dig i VS :

DWORD Pids[100];
DWORD dwSize;
DWORD moduleCount;
HMODULE hModules[1024];
unsigned short str[512];
BOOL Found = FALSE;

int NumberOfProcesses;

if (EnumProcesses(Pids, sizeof(Pids), &dwSize) == 0)
{
CHAR msg[256];
sprintf(msg, "Error = %d", GetLastError());
printf(msg);
}

NumberOfProcesses = (dwSize / sizeof(DWORD) - 1);

for (int i=0; i<=NumberOfProcesses; i++)
{
HANDLE hProc;
hProc = OpenProcess(PROCESS_ALL_ACCESS, FALSE, Pids*);
if (EnumProcessModules(hProc, hModules, sizeof(hModules), &dwSize) != 0)
{
moduleCount = (dwSize / sizeof(DWORD) - 1);
for (int j=0; j<=moduleCount; j++)
{
if (GetModuleFileNameEx(hProc, hModules[j], str, 512) != 0)
{
// str innehåller processnamn

  		}
  	}
  }
  CloseHandle(hProc);

}*

------------------
"Mörkrets gärningar, förekommer även på dagen"

Sixten Landby

[Redigerat av Beatbox den 21 nov 2001]

[Redigerat av Beatbox den 21 nov 2001]

[Redigerat av Beatbox den 21 nov 2001]

Medlem sedan apr. 20003 971 inlägg
#9

Jättefin kod. Den fungerar dock endast i Windows NT och senare.

Läs detta: http://support.microsoft.com/support/kb/articles/q175/0/30.asp

Där finns kod för att räkna upp alla processer i alla Windows-versioner.

------------------
- Swey
Med reservation för upprörda känslor.

264 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
122 ms — deklarationer (db)
0 ms — hämta statistik (cache)
134 ms — hämta tråd, inlägg och bilagor (db)
128 ms — ändringar (db)