VC++ nimmt WINAPI nicht an, C::B schon...STRANGE



  • #include <iostream>
    #include <windows.h>
    
    int main(int argc, char** argv)
    {
    
    	HWND hWnd = FindWindow(NULL, "TestProgramm");
    	{
    		MessageBox(NULL, "Fenster gefunden!", "Erfolgreich!", MB_OK + MB_ICONINFORMATION);
    	}
    
    		DWORD proc_ID;
    		GetWindowThreadProcessId(hWnd, &proc_ID);
    		HANDLE hProcess = OpenProcess(PROCESS_ALL_ACCESS,FALSE, proc_ID);
    		if(!hProcess)
    		{
    			MessageBox(NULL,"Der Prozess konnte nicht geöffnet werden!","Fehler!",MB_OK + MB_ICONERROR);
    		}
    		else
    		{
    			BYTE newdata[] = {0x72,0x74 , 0x64, 0x70, 0x6F,0x65 };
    			DWORD newdatasize = sizeof(newdata);
    
    		if(WriteProcessMemory(hProcess, (LPVOID)0x660EBB4, &newdata, newdatasize, NULL))
    		{
    			MessageBox(NULL,"WriteProcessMemory erfolgreich!","Erfolgreich!",MB_OK + MB_ICONINFORMATION);
    		}
    		else
    		{
    			MessageBox(NULL,"WriteProcessMemory fehlgeschlagen!", "Fehlgeschlagen!", MB_OK + MB_ICONERROR);
    		}
    		CloseHandle(hProcess);
    		}
    }
    

    In Code::Blocks lässt sich das alles kompilieren...
    In VC++ meckert der Compiler herum

    Fehler 1 error C2664: 'FindWindowW': Konvertierung des Parameters 2 von 'const char [13]' in 'LPCWSTR' nicht möglich

    Fehler 2 error C2664: 'MessageBoxW': Konvertierung des Parameters 2 von 'const char [18]' in 'LPCWSTR' nicht möglich

    Kennt einer den Grund?

    Lg Bill Gate´s son



  • Ich habe doch auch genau die selben Probleme.
    Warum hast du es dann nicht mit in meinem Thread gepostet?

    Die Beispiele sind warscheinlich für VS C++ 6 und wir haben jetzt aber 9 (2008).
    Vielleicht muss man noch was umschalten jetzt.



  • euer problem ist das ihr eure projecte auf unicode-zeichensatz laufen last.

    entweder ihr stellt euer project unter eigenschaften/Zeichensatz um auf Multibyte-zeichensatz oder aber ihr müßt wenn ein LP*WSTR verlangt wird ein L vor die anführungszeichen setzen.

    FindWindow(NULL, L"TestProgramm");
    MessageBox(NULL,L"Der Prozess konnte nicht geöffnet werden!","Fehler!",MB_OK + MB_ICONERROR);
    


  • Ah sehr gut erklärt!
    Danke!



  • Benutzt für String Literale doch das Makro _T("") aus tchar.h.
    Das macht abhängig von den Projekteinstellungen ein Ansi oder Unicode Literal.

    Simon


Anmelden zum Antworten