Process

Status
Niet open voor verdere reacties.

w00tare

Gebruiker
Lid geworden
10 jul 2009
Berichten
216
Oke, Ik probeer af te lezen of een process loopt maar het werkt niet:

Code:
int ATeamviewer()
{
	long Teamviewer = (long)GetModuleHandleA("TeamViewer.exe");
		if(Teamviewer!=0)
		{
			// Running
			GUIDstat = 1;
		}
		else
		{
			// Closed
			GUIDstat = 0;
		}
		return 0;
}
 
wil je weten of de window bestaat? dan kan het een stuk makkelijker.

Als je een process wilt bekijken kanje denk ik het best EnumProcesses() gebruiken voor alle processe en die van jouw eruit filteren
 
Ik wil simpelweg weten of het programma open is of niet.
 
TeamViewer maakt gebruik van een mutex object om te voorkomen dat het programma meerdere malen op een systeem draait.

Code:
HANDLE hTeamViewerMutex = CreateMutex( NULL, FALSE, "TeamViewer_Win32_Instance_Mutex" );

if ( hTeamViewerMutex != NULL )//De return value van de CreateMutex functie controleren om te kijken of de functie wel gelukt is
{

    if ( GetLastError() == ERROR_ALREADY_EXISTS )//Kijken of het aangemaakte mutex object al bestaat
    {

        //TeamViewer draait op het systeem

        CloseHandle( hTeamViewerMutex );//Het aangemaakte mutex object sluiten, vergeet deze handle niet te sluiten ook als het mutex object niet al bestond
 
ik weet niet over teamviwer, dus wat dNb zei is beter dand eze manier, maar als je iets niet weet.

Kanje ook dit gebruiken:

HWND hWndProgra = Findwindow();// zelf paramaters invullen, slechte manier over het algemeen, odmat je de naam moet invullen

en dan

if(ShowWindow != 0) // dus het is actief
// doet wat je wilt dat het doet.
 
ik weet niet over teamviwer, dus wat dNb zei is beter dand eze manier, maar als je iets niet weet.

Kanje ook dit gebruiken:

HWND hWndProgra = Findwindow();// zelf paramaters invullen, slechte manier over het algemeen, odmat je de naam moet invullen

en dan

if(ShowWindow != 0) // dus het is actief
// doet wat je wilt dat het doet.


Oke bedankt ik ga het straks even proberen.
 
Waarom geen gebruik maken van een mutex object, de functie die TeamViewer zelf gebruikt om te controleren of het programma al draait, maar wel gebruik maken van de FindWindow functie wat sowieso al geen waterdichte controle is?
Ga mij dat eens uitleggen.
 
Waarom geen gebruik maken van een mutex object, de functie die TeamViewer zelf gebruikt om te controleren of het programma al draait, maar wel gebruik maken van de FindWindow functie wat sowieso al geen waterdichte controle is?
Ga mij dat eens uitleggen.

Ik zei al dat jouw manier beter is, maar voor degene die niet weten wat een mutex is en/of niet weten dat teamviewer dat gebruikt. Is findwindow hanidger. Het is wle waar, he tis niet waterdicht, dat zei ik ook al. Maar het moet normaal gesproken wel gewoon werken.
 
MSDN bestaat niet voor niets.
Om deze persoon te helpen heb ik TeamViewer geïnstalleerd, ik heb gekeken naar de handles van dit programma en ik heb gecontroleerd welk mutex object door TeamViewer gebruikt wordt om te controleren of het programma al draait. Dit kost mij net zoveel moeite als het kijken naar de windows die TeamViewer aanmaakt en welke class naamen daarvoor gebruikt worden. Waarbij gebruik maken van de FindWindow functie in dit geval verre van waterdicht is. Dit kun je vergelijken als soep eten met een vork, je kan het jezelf niet helpen af te vragen "Waarom?".
 
TeamViewer maakt gebruik van een mutex object om te voorkomen dat het programma meerdere malen op een systeem draait.

Code:
HANDLE hTeamViewerMutex = CreateMutex( NULL, FALSE, "TeamViewer_Win32_Instance_Mutex" );

if ( hTeamViewerMutex != NULL )//De return value van de CreateMutex functie controleren om te kijken of de functie wel gelukt is
{

    if ( GetLastError() == ERROR_ALREADY_EXISTS )//Kijken of het aangemaakte mutex object al bestaat
    {

        //TeamViewer draait op het systeem

        CloseHandle( hTeamViewerMutex );//Het aangemaakte mutex object sluiten, vergeet deze handle niet te sluiten ook als het mutex object niet al bestond

Hallo,

Sorry voor de late reactie ik was op vakantie,
Ik heb je code geprobeerd, maar als ik de functie start, loopt mijn GUI vast.
 
Je moet niet verwachten dat ik kan ruiken wat er bij jou misgaat. Laat je code zien waar het misloopt.
 
Je moet niet verwachten dat ik kan ruiken wat er bij jou misgaat. Laat je code zien waar het misloopt.

Code:
int ATeamviewer()
{
	HANDLE hTeamViewerMutex = CreateMutex( NULL, FALSE, "TeamViewer_Win32_Instance_Mutex" );
	if ( hTeamViewerMutex != NULL )
{
    if ( GetLastError() == ERROR_ALREADY_EXISTS )
    {
             CloseHandle( hTeamViewerMutex );//Het aangemaakte mutex object sluiten, vergeet deze handle niet te sluiten ook als het mutex object niet al bestond
			 // Running
			 GUIDstat = 1;
	}
	else
	{
			// Closed
			 GUIDstat = 0;
	}
		return 0;
}
}

Als ik dit aanroep crashed hij.
 
Ik kan hiermee niet zien waarom je applicatie vast loopt. Je functie is nogal krom vandaar dat ik deze verbeterd heb.

Code:
int iTeamViewerMutex()
{

    int iTeamViewer = -1;//3 opties, TeamViewer draait, TeamViewer draait niet, CreateMutex functie mislukt

    HANDLE hTeamViewerMutex = CreateMutex( NULL, FALSE, "TeamViewer_Win32_Instance_Mutex" );

    if ( hTeamViewerMutex != NULL )
    {

        iTeamViewer = false;

        if ( GetLastError() == ERROR_ALREADY_EXISTS )
        {

             iTeamViewer = true;
        }

        CloseHandle( hTeamViewerMutex );
    }

    return iTeamViewer;
}

////////////////////////////////

if ( ( GUIDstat = iTeamViewerMutex() ) != -1 )
{

Probeer eens bijvoorbeeld de MessageBox functie te roepen bij elke regel waarvan je denkt dat die regel je applicatie laat vast lopen. Zo kun je erachter komen waar je applicatie precies vast loopt.
 
Laatst bewerkt:
Ik kan hiermee niet zien waarom je applicatie vast loopt. Je functie is nogal krom vandaar dat ik deze verbeterd heb.

Code:
int iTeamViewerMutex()
{

    int iTeamViewer = -1;//3 opties, TeamViewer draait, TeamViewer draait niet, CreateMutex functie mislukt

    HANDLE hTeamViewerMutex = CreateMutex( NULL, FALSE, "TeamViewer_Win32_Instance_Mutex" );

    if ( hTeamViewerMutex != NULL )
    {

        iTeamViewer = false;

        if ( GetLastError() == ERROR_ALREADY_EXISTS )
        {

             iTeamViewer = true;
        }

        CloseHandle( hTeamViewerMutex );
    }

    return iTeamViewer;
}

////////////////////////////////

if ( ( GUIDstat = iTeamViewerMutex() ) != -1 )
{

Probeer eens bijvoorbeeld de MessageBox functie te roepen bij elke regel waarvan je denkt dat die regel je applicatie laat vast lopen. Zo kun je erachter komen waar je applicatie precies vast loopt.

OMFG! Thanks Thanks ZO VEEL!!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan