Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.82
Micro
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 434
#1

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

18.01.2012, 18:20. Просмотров 1505. Ответов 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");
}
в чем трабл?
Что не так?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.01.2012, 18:20
Я подобрал для вас темы с готовыми решениями и ответами на вопрос При попытке найти окно выдает 0 (C++):

Компилятор выдает три ошибки, при попытке скомпилировать программу
Добрый день. Мне по заданию нужно решить эту формулу: l=min(x+y,y-z)/max(x,y)....

Ошибка при попытке открытия файла
Добрый день. При выполнении функции открытия файла F.open(adr,ios::in) по...

Ошибка при попытке создания шаблона
В чём ошибка? Функции Map::isGardenWithoutWallFlag, Map::setNothing,...

Ошибка при попытке удаления указателя
Программа работает,но при попытке выйти из нее по условию,вылетает ошибка.Если...

Ошибка при попытке загрузки файла
Задача состоит в том, чтобы по очереди загрузить файлы, введя их имена в...

Вылет при попытке очистки консоли
В программе много раз вызывается функция, которая очищает окно консоли с...

22
accept
4833 / 3254 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
19.01.2012, 07:01 #2
широкая строка пишется с L
C
1
    L"abcd"
отлаживай на окне без русских букв
0
ББК
35 / 35 / 8
Регистрация: 10.11.2011
Сообщений: 94
19.01.2012, 11:52 #3
к чему такая сложность
C++
1
 HWND a = FindWindow((LPCWSTR) NULL, (LPCWSTR) "Безымянный — Блокнот");
у меня находило так:
C++
1
 HWND a = FindWindow(NULL, "Безымянный — Блокнот");
0
Micro
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 434
20.01.2012, 10:45  [ТС] #4
Решил проблему другим путем
0
-=ЮрА=-
Заблокирован
Автор FAQ
20.01.2012, 14:21 #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
Миниатюры
При попытке найти окно выдает 0  
Вложения
Тип файла: rar NpFnd.exe.rar (42.0 Кб, 7 просмотров)
Тип файла: rar NpFnd_VS6.0_project.rar (1.7 Кб, 7 просмотров)
-=ЮрА=-
20.01.2012, 14:23
  #6

Не по теме:

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

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

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

Не по теме:

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

0
Micro
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 434
20.01.2012, 23:40  [ТС] #9
Я пробовал с другими окнами, даже на англ языке в 3 буквы, всеравно по нулям было...щас все норм
0
-=ЮрА=-
Заблокирован
Автор FAQ
20.01.2012, 23:46 #10
Цитата Сообщение от Micro Посмотреть сообщение
Я пробовал с другими окнами, даже на англ языке в 3 буквы, всеравно по нулям было...
попробуй FindWindowA и обычную чаровскую строку тайтла окна...
Цитата Сообщение от -=ЮрА=- Посмотреть сообщение
FindWindowA(NULL, "Безымянный - Блокнот")
0
Micro
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 434
20.01.2012, 23:58  [ТС] #11
Тут еще вопрос назрел с GetWindowText
Откуда-то читает текст, откуда-то нет, как решить трабл? все прекрасно нашел, но текст не считывается
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
21.01.2012, 00:13 #12
А как не считывается?
Программа крашится, или ф-ия возвращает ошибку, или считывается ноль символов?
Если у вас есть студия, то в ней есть отличная тулза Spy++.
Попробуйте с ней поиграться. Если нажать на бинокль, появится окошко с прицелом. вот этот прицел можно захватить и по окнам поездить. Тайтлы окон пишутся в поле Caption этого окошка. Так вот что там будет писаться для тех окон, для которых у вас не читаются тайтлы?
0
Micro
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 434
21.01.2012, 00:20  [ТС] #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
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
21.01.2012, 00:31 #14
ну так что ф-ункция то возвращает? Можно же определить, успешный был вызов или нет.
Вот посмотрите в мсдн (ну или найдите русский аналог)
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Ф-ия может завершится с ошибкой, и там написано как это определить. Так же посмотрите в ремарку. Там написано, что в некоторых случаях как раз таки не читается ничего.
0
Micro
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 434
21.01.2012, 00:41  [ТС] #15
Работает нормально, но не со всех текст возвращает
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
21.01.2012, 00:48 #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;
}
0
Micro
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 434
21.01.2012, 01:49  [ТС] #17
C++
1
Error code = 1400
это выбило
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
21.01.2012, 01:54 #18
это значит Invalid window handle. Т.е. в функцию вы отдаете неправильный хендл окна.
Ваш файнд виндоу все таки хрень вернул, а не правильный хендл. У ф-ий поиска окон тоже есть коды возврата и всякие ошибки. Смотрите документацию, что там может произойти. Какие коды ошибок и т.п.
0
Micro
43 / 43 / 5
Регистрация: 12.11.2011
Сообщений: 434
21.01.2012, 02:06  [ТС] #19
http://ipic.su/img/img3/fs/kiss_3kb.1327097157.png
0
DU
1486 / 1132 / 164
Регистрация: 05.12.2011
Сообщений: 2,279
21.01.2012, 02:15 #20
Что это? Вы хотите из какого-то консольного окошка считать его содержимое чтоли. Так тут GetWindowText не подходит. Она только тайтлы возвращает. Универсального способа считывания текста из окон других приложений нет. Все зависит от того, что это за окна (точнее что это за контролы, в которых этот текст выводится). Ну разве что фоткать эти окна и распознавать на полученной картинке текст. Раз вы пытаетесь из стандартного виндового окна что-то считать, то может быть и есть какие-то API, которые позволят это сделать.
Вот тут пачка api функций, среди которых может быть и есть те, которые позволят вам сделать то, что вы хотите
http://msdn.microsoft.com/en-us/libr...(v=vs.85).aspx
Короче это в раздел по WinAPI. Может там что-нибудь подскажут.
0
21.01.2012, 02:15
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.01.2012, 02:15
Привет! Вот еще темы с решениями:

Ошибка при попытке сопоставить список аргументов
Выбивает вот такую ошибку: &quot; при попытке сопоставить список аргументов...

Программа вылетает при попытке открыть файл
#include&lt;iostream.h&gt; #include&lt;windows.h&gt; #include&lt;conio.h&gt;...

Ошибка С2280 при попытке создания потока
При попытке создания потока auto t = new thread(&amp;merge, fin, fout, maxmemory,...

Ошибки при попытке прочитать в указанном месте
#include &lt;iostream&gt; #include &lt;iomanip&gt; #include &lt;locale&gt; using namespace...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru