Kleine Frage



  • Hi,

    besser wäre es, wenn Du sagst,
    a) was das Programm machen SOLL und
    b) was es stattdessen MACHT.

    Abr eines sehe ich schonmal:

    Help Me schrieb:

    ...

    ...
    char* Window = ...
    ...
    	char* Window2 = ...
    ...Window==Window2...
    ...
    

    ...

    ist bestimmt nicht das, was Du willst. Oder willst Du wirklich Speicherorte vergleichen ?

    Gruß,

    Simon2.



  • machen soll es :

    immer wenn man zwischen fenster wechselt den titel in die console schreiben
    zb ich bin gerade im editor dann geh ich in ein spiel
    dann sollte ca. dort stehen

    Text.txt - Editor
    Counter Strike 1.6

    also die titel der fenster

    und tun tut es :

    nichts



  • fehler meldungen kommt keine



    Du willst Strings vergleichen
    und 2.
    aus einer Funktion zurückgeben



  • ja,

    nur leider geht das mit meiner funktion wahrscheinlich nicht :

    char* WinGetTitle() {
    	char title[512];
        HWND hwnd = GetForegroundWindow(); 
        GetWindowText(hwnd, title, 512);
    	return title;
    }
    


  • Help Me schrieb:

    ...

    und tun tut es :

    nichts

    DAS glaube ich mal gar nicht. Es sollte zumindestens regelmäßige printf()-Aufrufe (ODER Sleeps() - halte ich im Programmzusammenhang aber für seeehr unwahrscheinlich) machen. Wenn es das auch nicht tut, slltest Du mal nachsehen, was _tmain() macht.

    Gruß,

    Simon2.



  • also es macht console auf
    und schreib nix rein
    und console bleibt offen
    aber steht nie was drinnen..



  • Help Me schrieb:

    also es macht console auf
    und schreib nix rein
    und console bleibt offen
    aber steht nie was drinnen..

    Da hilft nur eins: Debuggen.
    zum "Schmalspurdebugging" kannst Du erstmal hinter jede Zeile (in der main-Funktion) ein printf() reinhauen ... wenn dann immer noch nichts kommt, ist es ein Problem mit der Win-API-Programmierung (sprich _tmain() wird nicht aufgerufen)... in der ich micht nicht auskenne.
    Hat dann aber nichts mit der Sprache selbst zu tun (von den "Sprachfehlern", die oben schon genannt wurden, mal abgesehen).

    Gruß,

    Simon2.



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • also ich habe nun das gemacht :

    #include "stdafx.h"
    #include "windows.h"
    
    char* WinGetTitle();
    
    int _tmain(int argc, _TCHAR* argv[])
    {
    
    char* Window = "";
    
    while(true) {
    		char* Window2 = WinGetTitle();
    		if (Window==Window2) {
    			printf("TEST");
    			SleepEx(10,true);
    			}
    		else {
    			printf("%s",Window2);
    			Window = Window2;
    		}
    		SleepEx(100,true);
    	}
    
    }
    
    char* WinGetTitle() {
    	char title[512];
        HWND hwnd = GetForegroundWindow(); 
        GetWindowText(hwnd, title, 512);
    	return title;
    }
    
    if (Window==Window2) {
    			printf("TEST");
    			SleepEx(10,true);
    			}
    

    da hab ich das printf("TEST"); dazu gegeben nun printet er die ganze zeit TEST.



  • Verwendet man _tmain nicht für Unicode Kompatibilität?
    Dann solltest Du eventuell auch die _t Variante von printf() verwenden: _tprintf(), und string Literale als _T("bla")
    MSDN



  • Help Me schrieb:

    da hab ich das printf("TEST"); dazu gegeben nun printet er die ganze zeit TEST.

    Ja, weil Window und Window2 gleich sind. Window2 enthält nach wie vor einen Pointer ins Nirvana. ⚠



  • Hallo

    wie Simon schon bemerkt hat, ist deine String-Verarbeitung fehlerhaft.

    char* WinGetTitle() {
        char title[512];
        ...
        return title;
    }
    

    ist falsch. Du gibst einen Pointer auf ein lokales Array zurück, was nach der Funktion aber nicht mehr gültig ist. Folge ist undefiniertes Verhalten, schlimmstensfalls Zugriffsverletzungen. Lösungen : ein dynamisches Array anstelle des statischen, was du dann aber auch selber wieder löschen must. Oder die bessere und C++ Variante : std::string als Rückgabewert verwenden.

    if (Window==Window2)
    

    ist falsch. Da beides Pointer auf C-Strings sind, werden nur die Pointeraddressen verglichen, nicht die Inhalte. Folge ist das diese Bedingen bei dir niemals wahr ist. Lösung : Die Funktion strcmp benutzen oder besser noch std::string verwenden.

    Window = Window2;
    

    ist falsch. Hier werden nur die Adressen der Pointer kopiert, nicht die Inhalte.
    Lösung : Die Funktion strcpy verwenden, oder besser std::string

    Zu allen genannten Stichpunkten findest du hier im Forum genug Beispiele.

    bis bald
    akari



  • akari danke für die ausfürhliche erklärung aber ich bekomm das irgent wie nicht hin ^^



  • Hallo

    dann such dir erstmal ein gutes C oder C++ Tutorial (je nachdem ob du C oder C++ machen willst) und lern erstmal die Grundlagen. Zu finden oben rechts in dem Menü über den Link Tutorials.

    bis bald
    akari



  • Hallo

    Help Me schrieb:

    akari danke für die ausfürhliche erklärung aber ich bekomm das irgent wie nicht hin ^^

    Was genau bekommst du denn nicht hin?

    chrische


Anmelden zum Antworten