Problem mit Windows Programm [switch(wParam)] [gelöst]



  • Hallo Skullyan,

    Versuch mal folgendes:

    if(HIWORD(wParam) == BN_CLICKED) // ein button wurde geklickt.
        switch(LOWORD(wParam))
        {
        //...
    
        case 8:
        // Dein Code, der bei eimen Klick ausgeführt werden soll
        return 0;
    
        // weitere case-Marken
    
        }
    

    Also anstatt wParam LOWORD(wParam) in der switch-Verzweigung
    Und die switch-Verzweigung nur ausführen, wenn HIWORD(wParam) gleich BN_CLICKED ist.

    Ich hoffe, dass es das ist, was du brauchst.

    MfG, Jochen



  • Jochen S. schrieb:

    Hallo Skullyan,

    Versuch mal folgendes:

    if(HIWORD(wParam) == BN_CLICKED) // ein button wurde geklickt.
        switch(LOWORD(wParam))
        {
        //...
        
        case 8:
        // Dein Code, der bei eimen Klick ausgeführt werden soll
        return 0;
    
        // weitere case-Marken
    
        }
    

    Also anstatt wParam LOWORD(wParam) in der switch-Verzweigung
    Und die switch-Verzweigung nur ausführen, wenn HIWORD(wParam) gleich BN_CLICKED ist.

    Ich hoffe, dass es das ist, was du brauchst.

    MfG, Jochen

    Nein, leider löst das mein Problem nicht. Also das Verhalten des Codeblocks ist, dass er einen beliebigen Prozess terminiert. Das funktioniert allerdings nur bei allen Prozessen, die VOR dem Starten meines Programmes schon liefen. Wenn man während der Laufzeit meines Programmes ein neues Programm startet und es dann mit meinem Programm schließen will, geht das nicht. Woran liegt das?
    😕



  • Ich weiss nicht, ob dir das jetzt weiterhilft, aber hier ist eine Funktion, die einen beliebigen Prozess beendet:

    bool Convert(wchar_t* wStr,char* buffer) 
    { 
    if(!wStr||!buffer)return false; 
    for(int i=0;wStr[i]!='\0';i++)buffer[i]=(char)wStr[i]; 
    buffer[lstrlenW(wStr)]='\0'; 
    return true; 
    }   
    
    bool KillProcessA(const char* pcProcessName)
    {
    bool found = false;
    if(!pcProcessName)return false;
    HANDLE hSnapshot;
    HANDLE hProcess;
    PROCESSENTRY32 ProcessEntry;
    ProcessEntry.dwSize = sizeof(PROCESSENTRY32);
    hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
    if(Process32First(hSnapshot, &ProcessEntry))
    
    	do
    	{	
    	char str[300]; 
    #ifdef UNICODE
    	Convert(ProcessEntry.szExeFile,str); 
    #else
    	strcpy(str,pcProcessName);
    #endif
    		if(!stricmp(str,pcProcessName))
    		{
    		HANDLE hProcess;
    		hProcess = OpenProcess(PROCESS_TERMINATE,false,ProcessEntry.th32ProcessID);
    		TerminateProcess(hProcess,0);
    		CloseHandle(hProcess);
    		found = true;
    		}
    
    	}
    	while(Process32Next(hSnapshot, &ProcessEntry));
    CloseHandle(hSnapshot);
    return found;
    }
    

    Die funktion kann auch einen zur laufzeit gestarteten Prozess beenden.
    Die Funktion Convert ist allerdings schonin deinem Programm vorhanden, wie ich sehe. Die Funktion liefert false zurück, sollte der angagebene Prozess nicht gefunden werden.
    Ich hoffe, das hilft dir.

    MfG, Jochen



  • case 8:
    			   	  //Text vom Editfeld in einem Puffer speichern
    			GetWindowTextA(hwndEdit,buf,65);
    			strcat(buf,".exe");
    			HANDLE po;
    			PROCESSENTRY32 pe;
    			int NumProcesses = 0;
    			char str[300]; 
    			int help = 0;
    
    			po = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    			pe.dwSize = sizeof(PROCESSENTRY32);
    			if(Process32First(po,&pe))
    			do
    			{
    				++NumProcesses;
    			}
    			while(Process32Next(po, &pe)); 
    
    			Process32First(po,&pe);
    			for(int i = 0; i < NumProcesses-1; ++i)
    			{
    				++help;
    			Process32Next(po,&pe);
    			Convert(pe.szExeFile,str); 
    		//	cout << pe.szExeFile << " " << pe.th32ProcessID << " ";
    			if(!strcmp(str,buf))
    				break;
    			}
    			// Fehler abfangen
    			if(NumProcesses == help+1)
    			{
    				MessageBoxW(hWnd,L"Prozess läuft nicht.",L"Fehler", MB_OK);
    				return 0;
    			}
    			HANDLE hProcess;
    			hProcess = OpenProcess(PROCESS_TERMINATE,TRUE,pe.th32ProcessID);
    
    			TerminateProcess(hProcess,NULL);
    

    Da, wo "Fehler abfangen" steht, ist der Fehler. Wie kann ich sonst auf Fehler prüfen? Also auf falsche Eingaben...



  • Fehler in der for-Schleife. Der letzte Prozess wird nie berücksichtigt.



  • genauerguggen schrieb:

    Fehler in der for-Schleife. Der letzte Prozess wird nie berücksichtigt.

    Ich verstehe nicht so ganz... Kannst Du mir das zeigen?



  • Der letzte Prozess in der Liste wird in der for-Schleife nie geprüft. Probier mal so:

    //for(int i = 0; i < NumProcesses-1; ++i)
    for(int i = 0; i < NumProcesses; ++i)
    


  • genauerguggen schrieb:

    Der letzte Prozess in der Liste wird in der for-Schleife nie geprüft. Probier mal so:

    //for(int i = 0; i < NumProcesses-1; ++i)
    for(int i = 0; i < NumProcesses; ++i)
    

    Ich habe es gelöst:

    //Text vom Editfeld in einen Puffer speichern
    			GetWindowTextA(hwndEdit,buf,65);
    			strcat(buf,".exe");
    			HANDLE po;
    			PROCESSENTRY32 pe;
    			int NumProcesses = 0;
    			char str[300]; 
    			int help = 0;
    
    			po = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
    			pe.dwSize = sizeof(PROCESSENTRY32);
    			if(Process32First(po,&pe))
    			do
    			{
    				++NumProcesses;
    			}
    			while(Process32Next(po, &pe)); 
    
    			Process32First(po,&pe);
    			for(int i = 0; i < NumProcesses; ++i)
    			{
    				++help;
    			Process32Next(po,&pe);
    			Convert(pe.szExeFile,str); 
    		//	cout << pe.szExeFile << " " << pe.th32ProcessID << " ";
    			if(!strcmp(str,buf))
    				break;
    			}
    			// Fehler abfangen
    			if(help == NumProcesses)
    			{
    				return 0;
    			}
    			HANDLE hProcess;
    			hProcess = OpenProcess(PROCESS_TERMINATE,TRUE,pe.th32ProcessID);
    
    			TerminateProcess(hProcess,NULL);
    
    			return 0;
    


  • skullyan schrieb:

    Ich habe es gelöst:

    Klar DU hast es gelöst. Und warscheinlich hast du auch ein Heilmittel gegen Selbstüberschätzung gefunden.



  • ..... schrieb:

    skullyan schrieb:

    Ich habe es gelöst:

    Klar DU hast es gelöst. Und warscheinlich hast du auch ein Heilmittel gegen Selbstüberschätzung gefunden.

    Nein, das warst DU!


Anmelden zum Antworten