Ein paar fragen zu Visual C++
-
Das würde Visual Assist X erledigen, auch in von dir gewählten Farben.

-
Das wäre natürlich super, nur leider wird das nicht für die Express Edition unterstützt hmpf, doch Geld ausgeben -.-
Ach ja wie deaktiviere ich den Unicode Zeichensatz oder wie lässt sich sowas umgehen ?
LPCSTR winName; std:string str("Fenstername"); /* convert string to LPSTR */ winName = str.c_str();Also wie kann ich ohne LPSTR o.ä. arbeiten ?
z.B um der Funktion "FindWindow" ein einfaches const char* zu übergeben.const char *winName = "Fenstername"; FindWindow ( NULL , winName );klappt nämlich nicht

-
unter Project -> ... Properties -> Configuration Properties -> General -> Character Set kannst du Unicode de- / aktvieren
wenn du das _T() Makro verwendest, dann hast du damit keine Probleme ob Unicode an oder aus ist

und dass Visual Assist unter Express nicht geht, wusste ich auch noch nicht

Verstehe grad nicht, wieso du mit const char arbeiten musst, es reicht doch, wenn du einfach dein string übergibst, also
FindWindow ( NULL , "Fenstername");sonst legst du (z.B.) einfach nen CString an, in dem dein Fenstername oder was auch immer steht
-
R3dNeXX schrieb:
...und dass Visual Assist unter Express nicht geht, wusste ich auch noch nicht :)...
Eine Einschränkung der Express Edition ist, das man keinerlei Plugins installieren kann. Für Anfänger meistens eine eher unbedeutende Einschränkung, für die professionelle Entwicklung teilweise schon recht störend...
-
asc schrieb:
R3dNeXX schrieb:
...und dass Visual Assist unter Express nicht geht, wusste ich auch noch nicht :)...
Eine Einschränkung der Express Edition ist, das man keinerlei Plugins installieren kann. Für Anfänger meistens eine eher unbedeutende Einschränkung, für die professionelle Entwicklung teilweise schon recht störend...
Alles klar, danke, dann verstehe ich das.
Ist etwas anderes, wenn man bis jetzt nur die Prof gewohnt ist.
-
Ich habe den Zeichensatz jetzt auf Multi-Byte gesetzt.
Aber nun klappt meine Funktion komischerweise nicht -.-
Hier mal der Code:HANDLE OpenProcess () { const char *winName = "Counter-Strike Source"; HANDLE winHandle = NULL; HWND window = NULL; DWORD procid; while ( true ) { window = FindWindow( NULL , winName ); if ( window == NULL ) { Sleep ( 900 ); std::cout << "not found." << std::endl; continue; } else { break; } } GetWindowThreadProcessId ( window , &procid ); winHandle = OpenProcess ( PROCESS_ALL_ACCESS , false , procid ); if (!winHandle) { return 0; } else { return winHandle; } }Er findet zwar das Fenster aber gibt das HANDLE nicht zurück.
In einer anderen IDE klappt diese Funktion jedoch o0Hier mal der Fehler wenn ich den Zeichensatz auf Unicode habe:
error C2664: 'FindWindowW': Konvertierung des Parameters 2 von 'const char *' in 'LPCWSTR' nicht möglichHabe ich einen Fehler in der Funktion, oder stellt mir MSVC++ wieder ein Bein ? :>
-
Wieso nimmst du auch const char ?
Ich dachte, ich hatte schonmal erwähnt, z.B. CString zu nehmen, ist auch leichter zu handeln.
also z.B.
CString winName = _T("Counter-Strike Source"); HANDLE winHandle = NULL; // = NULL kannst du dir auch sparen winHandle = FindWindow(NULL, winName);und durch die Verwendung von dem _T() Makro ist es egal, ob du Unicode oder Multibyte verwendest !

-
Die Fehlermeldung weist auch eigentlich eher darauf hin, dass du auf Unicode gestellt hast, nicht MBCS...
Mal die Kurzfassung: FindWindow ist ein define, dass entweder FindWindowA oder FindWindowW bedeutet, je nachdem ob _UNICODE definiert ist oder nicht (du regelst das über die Projekteinstellungen). Hast du beispielsweise Unicode eingestellt, dann wird an die Stellen deines Codes, an denen FindWindow vorkommt, eben FindWindowW gesetzt. Die Funktion braucht dann einen LPCWSTR, keinen LPCSTR wie es bei FindWindowA der Fall sein würde. Dein const char* lässt sich nicht einfach nach LPCWSTR casten, also kriegst du eine Fehlermeldung, weil dein Argument den falschen Typ hat. Ein const wchar_t* würde funktionieren. Nimm einfach CString, hier wird nämlich auch je nach Unicode-Einstellung CStringA oder CStringW genommen. Stringliterale notierst du mit dem _T()-Makro, dass unterscheidet auch nach _UNICODE.
Lies am besten nochmal nach, wie das alles funktioniert (Doku/Tutorial/Artikel/Buch). Genug Stichwörter hast du ja jetzt.
-
Ich dachte, ich hatte schonmal erwähnt, z.B. CString zu nehmen, ist auch leichter zu handeln.
In der Express Edition wird weder MFC noch ATL unterstützt also klappt das mit CString auch leider nicht

-
bakoora schrieb:
Ich dachte, ich hatte schonmal erwähnt, z.B. CString zu nehmen, ist auch leichter zu handeln.
In der Express Edition wird weder MFC noch ATL unterstützt also klappt das mit CString auch leider nicht

Ok, dann aber => falsches Forum!

-
bakoora schrieb:
Ich dachte, ich hatte schonmal erwähnt, z.B. CString zu nehmen, ist auch leichter zu handeln.
In der Express Edition wird weder MFC noch ATL unterstützt also klappt das mit CString auch leider nicht

Ok, hatte ganz vergessen, dass du nur ne Express hast !
Aber stimmt, falsches Forum.

-
Kann man den Zeichensatz automatisch auf MultiByte setzen ?
Bzw. die Standarteinstellungen ändern, weil bei mir ist der Standart auf Unicode gesetzt.
-
bakoora schrieb:
Kann man den Zeichensatz automatisch auf MultiByte setzen ?
Bzw. die Standarteinstellungen ändern, weil bei mir ist der stan**** auf Unicode gesetzt.Nicht, dass ich wüsste (falls du doch was findest, sag Bescheid!). Die Riesen-Arbeit ist es aber eigentlich nicht, für ein Projekt 2 mal (Debug+Release) die Einstellung zu ändern. Damit kann ich leben...
-
Ja klar ist es keine große Arbeit aber schon ein bisschen nervig (: