Преобразование TCHAR в char * для функции strstr

0
    char skype[6] = "Skype";
    HWND firstwindow = FindWindowEx(NULL, NULL, NULL, NULL);
    HWND window = firstwindow;
    TCHAR windowtext[MAX_PATH]; //search term

    //We need to get the console title in case we
    //accidentally match the search word with it
    //instead of the intended target window.
    TCHAR consoletitle[MAX_PATH];
    GetConsoleTitle(consoletitle, MAX_PATH);

    while(true){
        //Check window title for a match
        GetWindowText(window, windowtext, MAX_PATH);
        if (strstr(windowtext, skype)!=NULL && strcmp(windowtext, consoletitle)!=0) break; //search for program
            //Get next window
            window = FindWindowEx(NULL, window, NULL, NULL);
        if(window == NULL || window == firstwindow){
            printf("Window not found.\n");
            return 1;
        }
    } //end while
Error: cannot convert 'TCHAR* {aka wchar_t*}' to 'const char*' for argument '1' to 'char* strstr(const char*, const char*)'

Проблема возникает в этой строке:

if (strstr(windowtext, skype)!=NULL && strcmp(windowtext, consoletitle)!=0) break; //search for program

У меня нет проблем, когда я запускаю ту же программу в компиляторе cygwin mingw32gcc. Является ли это проблемой для меня с помощью компилятора QT mingw32gcc? Я включил <windows.h> в самом начале, чтобы не проблема.

Edit: Ok Итак, я добавил <tchar.h> и заменил if (_tcsstr (windowtext, skype)! = NULL && _tcscmp (windowtext, consoletitle)! = 0) break;

Но проблема все еще сохраняется: Ошибка: невозможно преобразовать 'TCHAR * {aka wchar_t *}' в 'const char *' для аргумента '1' в 'char * strstr (const char *, const char *)'

  • 0
    Пожалуйста, сначала прочтите это: msdn.microsoft.com/en-ca/library/windows/desktop/…
  • 1
    Если вы не планируете поддерживать Windows 9x, избавьтесь от TCHAR и используйте широкие строки для взаимодействия с API.
Теги:
qt

2 ответа

6
Лучший ответ

Вместо преобразования в char * для использования в strstr, вы должны использовать TCHAR -equivalent, _tcsstr; он будет скомпилирован для правильного вызова либо strstr либо wcsstr.

  • 1
    Оба операнда должны быть одного типа, поэтому он должен заменить char skype[6] = "Skype"; с TCHAR skype[] = _T("Skype"); , Хотя в wchar_t просто использование wchar_t кажется проще.
0

Чтобы использовать код юникода в коде, вам необходимо определить _UNICODE препроцессора UNICODE и _UNICODE перед компиляцией кода, поэтому добавьте эти аргументы командной строки для компиляции команды:

-DUNICODE -D_UNICODE

для более того вы можете прочитать это:
http://www.cplusplus.com/forum/windows/90069

Ещё вопросы

Сообщество Overcoder
Наверх
Меню