IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

> WINApi, начало
Client
сообщение 9.07.2009 11:59
Сообщение #1


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


Привет!
Сходил по ссылке, почитал. Код там для Си, а функции для Delphi работают и остаются такими же?
Хочу начать с самого простого - узнать заголовок окна (любое окно). Как делать не знаю. Надо создавать консольное приложение или не обязательно?
И если можно ссылку для дельфи
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов(1 - 11)
volvo
сообщение 9.07.2009 12:05
Сообщение #2


Гость






Цитата
Код там для Си, а функции для Delphi работают и остаются такими же?
Да, названия функций не меняются. На то и API, чтобы можно было хоть из С, хоть из Дельфи, хоть из Ассемблера, или из Фортрана вызывать.

Цитата
Хочу начать с самого простого - узнать заголовок окна (любое окно). Как делать не знаю. Надо создавать консольное приложение или не обязательно?
Ни разу не обязательно делать это именно консольным приложением. Хочешь - добавь кнопку в обычное VCL-приложение, и повесь на нее нужный код.

Цитата
И если можно ссылку для дельфи
DRKB устроит?
 К началу страницы 
+ Ответить 
Client
сообщение 9.07.2009 12:32
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


GetWindowText() функция с 3 параметрами, но какими?

Добавлено через 8 мин.
стоп, сначала же надо найти окно, а потом узнать заголовок?
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.07.2009 14:29
Сообщение #4


Гость






Цитата
сначала же надо найти окно, а потом узнать заголовок?
Вот именно. Поэтому ты сначала определись, что тебе вообще известно, и что ты хочешь найти, а потом будем думать, та ли это функция или надо использовать другую.
 К началу страницы 
+ Ответить 
Client
сообщение 9.07.2009 17:53
Сообщение #5


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


Открыт блокнот. При нажатии на кнопку в Label должен поместиться заголовок блокнота.
Для этого нужна переменная типа HWND. Она вроде содержит код окна...
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 9.07.2009 18:18
Сообщение #6


Гость






Ага... А рядом с блокнотом открыть еще один блокнот, и Word с тем же заголовком, что первый блокнот. И что будет? КАК твоя программа определит, блокнот это или нет, и какой из блокнотов тебе нужен? Постановку задачи давай, а не то, что ты хочешь видеть...

Как пример можешь посмотреть: "DRKB -> WinAPI и Железо -> Приложения и процессы -> Работа с чужими процессами -> Список окон + определение приложения, создавшего эти окна"

Ты все еще хочешь то, что написал выше? smile.gif
 К началу страницы 
+ Ответить 
Client
сообщение 9.07.2009 18:26
Сообщение #7


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


Постановки задачи нету, сам придумал ) открыт 1 блокнот, мне хотя бы это smile.gif
Цитата
Ты все еще хочешь то, что написал выше?
Да

Сообщение отредактировано: Client - 9.07.2009 18:26
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 9.07.2009 20:35
Сообщение #8


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Хм... Хэндл окна, и его заголовок - это ведь разные вещи? Тогда, если искать окно блокнота так:

Код
FindWindow(nil, 'Безымянный - notepad2')
, то его заголовок естесственно и будет равен "Безымянный - notepad2", значит, надо заранее узнать вручную хендл блокнота?..


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 9.07.2009 20:39
Сообщение #9


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


Wnd := FindWindow('Notepad', nil);
Так ищется окно, а вот как из Wnd вытащить заголовок...
Вроде метод GetWindowText, но не получается у меня
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 9.07.2009 20:49
Сообщение #10


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


var wnd:THandle;
TmpArray : array[0..MAX - 1] of Char;
begin
Wnd := FindWindow('Notepad2', nil);
GetWindowText(wnd, @TmpArray, MAX);
label1.caption:=tmparray;
end;


У меня блокнот нестандартный, замени Notepad2 на Notepad.smile.gif

Сообщение отредактировано: Unconnected - 9.07.2009 20:49


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Client
сообщение 9.07.2009 20:55
Сообщение #11


Профи
****

Группа: Пользователи
Сообщений: 865
Пол: Мужской
Реальное имя: Вячеслав

Репутация: -  20  +


Делал так же, только переменная типа HWND и
GetWindowText(wnd, TmpArray, MAX);//а не @TmpArray 
Что значит @ (адресация?)?
Спасиб, работает

Сообщение отредактировано: Client - 9.07.2009 20:58
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Unconnected
сообщение 9.07.2009 21:06
Сообщение #12


mea culpa
*****

Группа: Пользователи
Сообщений: 1 372
Пол: Мужской
Реальное имя: Николай

Репутация: -  24  +


Как мне подсказали, в Windows надо работать с указателем на начало массива:)


--------------------
"Знаешь, стыдно - когда не видно, что услышал всё, что слушал.."
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 8.07.2025 10:00
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"