webForumDet fria alternativet

Get handle

8 svar · 433 visningar · startad av Choice2

Choice2Medlem sedan sep. 200134 inlägg
#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
*/

MuzzafarathMedlem sedan apr. 20002 487 inlägg
#2

.

[Redigerat av Muzzafarath den 20 nov 2001]

MuzzafarathMedlem 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

Choice2Medlem 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
*/

SweyMedlem 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]

jtMedlem sedan juni 2000350 inlägg
#6

emulera?

SweyMedlem 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.

BeatboxMedlem 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]

SweyMedlem 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.

123 ms totalt · 3 externa anrop · v20260731065814-full.30151723
0 ms — hämta forumlista (cache)
0 ms — hämta statistik (cache)
121 ms — hämta tråd, inlägg och bilagor (db)