Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Micro
42 / 42 / 1
Регистрация: 12.11.2011
Сообщений: 428
#1

При попытке найти окно выдает 0 - C++

18.01.2012, 18:20. Просмотров 1396. Ответов 22
Метки нет (Все метки)

C++
1
2
3
4
5
6
7
8
9
#include <iostream>
#include <Windows.h>
using namespace std;
int main()
{
    HWND a = FindWindow((LPCWSTR) NULL, (LPCWSTR) "Безымянный — Блокнот");
    cout << (long) a <<endl;
    system("PAUSE");
}
в чем трабл?
Что не так?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2012, 18:20     При попытке найти окно выдает 0
Посмотрите здесь:

Ошибки при попытке прочитать в указанном месте C++
C++ Ошибка при попытке подключить внешнюю библиотеку
Программа вылетает при попытке открыть файл C++
C++ Ошибка в Си файле при попытке использования функции из библиотеки
C++ Ошибка при попытке удаления указателя
Работа с динамического массивом - ошибка при попытке ввода C++
Ошибка при попытке создания шаблона C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4817 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
19.01.2012, 07:01     При попытке найти окно выдает 0 #2
широкая строка пишется с L
C
1
    L"abcd"
отлаживай на окне без русских букв
ББК
34 / 34 / 6
Регистрация: 10.11.2011
Сообщений: 94
19.01.2012, 11:52     При попытке найти окно выдает 0 #3
к чему такая сложность
C++
1
 HWND a = FindWindow((LPCWSTR) NULL, (LPCWSTR) "Безымянный — Блокнот");
у меня находило так:
C++
1
 HWND a = FindWindow(NULL, "Безымянный — Блокнот");
Micro
42 / 42 / 1
Регистрация: 12.11.2011
Сообщений: 428
20.01.2012, 10:45  [ТС]     При попытке найти окно выдает 0 #4
Решил проблему другим путем
-=ЮрА=-
Заблокирован
Автор FAQ
20.01.2012, 14:21     При попытке найти окно выдает 0 #5
Micro, как я понял компилируешь в VisualStudio 2008 или даже 2010 запиши так (и не ломай голову над (LPCWSTR))

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <windows.h>
using namespace std;
 
int main()
{
    system("chcp 1251");
    HWND hWnd = NULL;
    hWnd = FindWindowA(NULL, "ÁåçûìÿГ*Г*ûé - ÁëîêГ*îò");
    if(hWnd)
        cout<<std::oct<<hWnd<<endl;
    else
        cout<<"Window of Notepad.exe not found\n";
    system("pause");
    return 0;
}
Ниже скрин, экзешник и архив проекта(писал в 6-ке но уверен откомпилится и в 10-ке)
Миниатюры
При попытке найти окно выдает 0  
Вложения
Тип файла: rar NpFnd.exe.rar (42.0 Кб, 7 просмотров)
Тип файла: rar NpFnd_VS6.0_project.rar (1.7 Кб, 7 просмотров)
-=ЮрА=-
20.01.2012, 14:23
  #6

Не по теме:

А не работало потому что вместо дефиса "-" стояло короткое тире "—"
(наверно в ворде писалось и он автоматом увеличил дефис до тире)
Думаю разница на лицо

Цитата Сообщение от Micro Посмотреть сообщение
"Безымянный — Блокнот"
- как было
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
"Безымянный - Блокнот"
- как работает

Micro
42 / 42 / 1
Регистрация: 12.11.2011
Сообщений: 428
20.01.2012, 23:07  [ТС]     При попытке найти окно выдает 0 #7
Я в свойствах проекта поставил в General
Character set: Not set
-=ЮрА=-
20.01.2012, 23:38
  #8

Не по теме:

Цитата Сообщение от Micro Посмотреть сообщение
Я в свойствах проекта поставил в General
Character set: Not set
- лучше искать окна с их подлинными названиями(разница в один символ делает строки разными)

Micro
42 / 42 / 1
Регистрация: 12.11.2011
Сообщений: 428
20.01.2012, 23:40  [ТС]     При попытке найти окно выдает 0 #9
Я пробовал с другими окнами, даже на англ языке в 3 буквы, всеравно по нулям было...щас все норм
-=ЮрА=-
Заблокирован
Автор FAQ
20.01.2012, 23:46     При попытке найти окно выдает 0 #10
Цитата Сообщение от Micro Посмотреть сообщение
Я пробовал с другими окнами, даже на англ языке в 3 буквы, всеравно по нулям было...
попробуй FindWindowA и обычную чаровскую строку тайтла окна...
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
FindWindowA(NULL, "Безымянный - Блокнот")
Micro
42 / 42 / 1
Регистрация: 12.11.2011
Сообщений: 428
20.01.2012, 23:58  [ТС]     При попытке найти окно выдает 0 #11
Тут еще вопрос назрел с GetWindowText
Откуда-то читает текст, откуда-то нет, как решить трабл? все прекрасно нашел, но текст не считывается
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.01.2012, 00:13     При попытке найти окно выдает 0 #12
А как не считывается?
Программа крашится, или ф-ия возвращает ошибку, или считывается ноль символов?
Если у вас есть студия, то в ней есть отличная тулза Spy++.
Попробуйте с ней поиграться. Если нажать на бинокль, появится окошко с прицелом. вот этот прицел можно захватить и по окнам поездить. Тайтлы окон пишутся в поле Caption этого окошка. Так вот что там будет писаться для тех окон, для которых у вас не читаются тайтлы?
Micro
42 / 42 / 1
Регистрация: 12.11.2011
Сообщений: 428
21.01.2012, 00:20  [ТС]     При попытке найти окно выдает 0 #13
Цитата Сообщение от DU Посмотреть сообщение
А как не считывается?
Программа крашится, или ф-ия возвращает ошибку, или считывается ноль символов?
Если у вас есть студия, то в ней есть отличная тулза Spy++.
Попробуйте с ней поиграться. Если нажать на бинокль, появится окошко с прицелом. вот этот прицел можно захватить и по окнам поездить. Тайтлы окон пишутся в поле Caption этого окошка. Так вот что там будет писаться для тех окон, для которых у вас не читаются тайтлы?
Пользуюсь WinSpy++
Текст cчитываю так


C++
1
2
3
4
HWND test = FindWondow();
TCHAR a[500];
GetWindowText(test,a,500);
cout << "Result:" << a << endl
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.01.2012, 00:31     При попытке найти окно выдает 0 #14
ну так что ф-ункция то возвращает? Можно же определить, успешный был вызов или нет.
Вот посмотрите в мсдн (ну или найдите русский аналог)
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Ф-ия может завершится с ошибкой, и там написано как это определить. Так же посмотрите в ремарку. Там написано, что в некоторых случаях как раз таки не читается ничего.
Micro
42 / 42 / 1
Регистрация: 12.11.2011
Сообщений: 428
21.01.2012, 00:41  [ТС]     При попытке найти окно выдает 0 #15
Работает нормально, но не со всех текст возвращает
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.01.2012, 00:48     При попытке найти окно выдает 0 #16
ну е мае
Return value
Type: int
If the function succeeds, the return value is the length, in characters, of the copied string, not including the terminating null character. If the window has no title bar or text, if the title bar is empty, or if the window or control handle is invalid, the return value is zero. To get extended error information, call GetLastError.
Вольный перевод такой
Если функция завершается успешно, возвращаемое значение равно количеству символов,
скопированных в буфер не включая нуль символа в конце. Если окно не имеет тайтл
бара или текста, если заголовок тайтл бара пустой или если окно или контрол
невалидно, возвращается ноль. Для получения подробной информации вызовите
GetLastError

Так вот в третий раз попробую спросить. Что возвращает функция? Вы смотрели на эти возвращаемые значения. Вызывали ф-ию GetLastError?


C++
1
2
3
4
5
6
7
8
9
10
11
12
13
HWND test = FindWondow();
TCHAR a[500];
const int n = GetWindowText(test,a,500);
if (n == 0)
{
  const DWORD error = GetLastError();
  cout << "error code = " << error << endl;
}
else
{
  // в случаях, когда текст не получается, мы сюда заходим, или всетаки в ветку с ошибкой?
  cout << "Result:" << a << endl;
}
Micro
42 / 42 / 1
Регистрация: 12.11.2011
Сообщений: 428
21.01.2012, 01:49  [ТС]     При попытке найти окно выдает 0 #17
C++
1
Error code = 1400
это выбило
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.01.2012, 01:54     При попытке найти окно выдает 0 #18
это значит Invalid window handle. Т.е. в функцию вы отдаете неправильный хендл окна.
Ваш файнд виндоу все таки хрень вернул, а не правильный хендл. У ф-ий поиска окон тоже есть коды возврата и всякие ошибки. Смотрите документацию, что там может произойти. Какие коды ошибок и т.п.
Micro
42 / 42 / 1
Регистрация: 12.11.2011
Сообщений: 428
21.01.2012, 02:06  [ТС]     При попытке найти окно выдает 0 #19
http://ipic.su/img/img3/fs/kiss_3kb.1327097157.png
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2012, 02:15     При попытке найти окно выдает 0
Еще ссылки по теме:

C++ Программа вылетает при попытке чтения из файла в переменную
Ошибка при попытке открытия файла C++
C++ Ошибка С2280 при попытке создания потока
C++ Вылет при попытке очистки консоли
Компилятор выдает три ошибки, при попытке скомпилировать программу C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
DU
1480 / 1056 / 45
Регистрация: 05.12.2011
Сообщений: 2,279
21.01.2012, 02:15     При попытке найти окно выдает 0 #20
Что это? Вы хотите из какого-то консольного окошка считать его содержимое чтоли. Так тут GetWindowText не подходит. Она только тайтлы возвращает. Универсального способа считывания текста из окон других приложений нет. Все зависит от того, что это за окна (точнее что это за контролы, в которых этот текст выводится). Ну разве что фоткать эти окна и распознавать на полученной картинке текст. Раз вы пытаетесь из стандартного виндового окна что-то считать, то может быть и есть какие-то API, которые позволят это сделать.
Вот тут пачка api функций, среди которых может быть и есть те, которые позволят вам сделать то, что вы хотите
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Короче это в раздел по WinAPI. Может там что-нибудь подскажут.
Yandex
Объявления
21.01.2012, 02:15     При попытке найти окно выдает 0
Ответ Создать тему
Опции темы

Текущее время: 02:43. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru