-
Здравствуйте! Подскажите, как программно определить имя файла и заголовок активного приложения (т.е. приложения, окно которого активно)?
-
> TComponent (10.12.2010 20:41:00) [0]
Но это не обязательно активное приложение, это только "активное" окно.
-
> Но это не обязательно активное приложение, это только "активное" > окно.
Ну тогда - для приложения, окно которого активно.
Что является определением активного приложения? Это приложение, которое выполняет в данный момент какие-то операции?
-
> TComponent (11.12.2010 14:42:02) [2]
Заголовок активного окна GetForegroundWindow, активное окно, это то окно которое имеет фокус ввода. Активное приложение очень сложно выявить, Виндоус многозадачная система с потоками, то есть если у меня четыре процессора, то может быть до четырех Активных приложений одновременно, а если 32?
-
Для определения заголовка активного окна пробовал так: procedure TForm1.Proc1;
var
H: HWND;
L, T: Integer;
Cap: String;
begin
H:=GetForegroundWindow;
L:=GetWindowTextLength(h)+1;
ShowMessage(IntToStr(L)); T:=GetWindowText(h,pchar(cap),L);
ShowMessage('\"'+cap+'\"'); ShowMessage(IntToStr(T)); end; По справке Delphi: The GetWindowText function copies the text of the specified window's title bar (if it has one) into a buffer. If the specified window is a control, the text of the control is copied. int GetWindowText( HWND hWnd, // handle of window or control with text LPTSTR lpString, // address of buffer for text int nMaxCount // maximum number of characters to copy ); Parameters hWnd Identifies the window or control containing the text. lpString Points to the buffer that will receive the text. nMaxCount Specifies the maximum number of characters to copy to the buffer. If the text exceeds this limit, it is truncated. Эта функция GetWindowText копирует текст заголовка определяемого окна (если окно имеет его) в буфер. Только я не пойму, как получить заголовок. Пробовал ShowMessage(clipboard.AsText); но - не то показывает. Вообще, что нужно помещать в третий параметр функции GetWindowText?
-
> что нужно помещать в третий параметр функции GetWindowText
Ошибочка: не в третий, а во второй. Какое значение нужно в качестве адреса буфера для текста (LPTSTR lpString)?
-
Для теста можете указатель на массив чаров передать. Или сразу выделяйте память для PChar.
-
С заголовком активного окна разобрался - спасибо Anatoly Podgoretsky и CrytoGen! Вариант с массивом чаров сработал. Как выделять память для PChar не знаю. CrytoGen, не подскажете?
Осталась вторая часть вопроса: как определить имя файла приложения, окно которого активно (полный путь к исполняемому файлу)?
-
> TComponent (11.12.2010 20:12:07) [7]
GetMem
-
> Anatoly Podgoretsky © (11.12.10 20:28) [8]
И GetMem сработал!
Anatoly Podgoretsky, откуда в ваших цитатах берутся секунды (из даты и времени моих сообщений) или движок сайта для разных пользователей отображает дату и время сообщений по разному? :)
-
> TComponent (11.12.2010 21:07:09) [9]
В моих цитатах нет секунд, а сами цитаты у меня формирует мой NNTP сервер.
-
Ой есть, ну секунды берутся из головы, поскольку это не секунды по сути, а порядковый номер.
-
Да, действительно - порядковый номер (c ведущим нулём). Получается, что цитаты не всегда формируются централизованно на сервере сайта "Мастера Delphi"? У него есть какие-то "ответвления"?
Кстати, можете подсказать насчёт имени файла (с путем)?
-
> TComponent (11.12.2010 22:19:12) [12]
На сервере "Мастера Delphi"? цитаты не формируются, сервер этим не занимается, а время передается без секунд. Цитаты формируются на клиенте.
-
> Anatoly Podgoretsky © (11.12.10 21:28) [10] > > > TComponent (11.12.2010 21:07:09) [9] > > В моих цитатах нет секунд, а сами цитаты у меня формирует > мой NNTP сервер.
> Anatoly Podgoretsky © (11.12.10 23:45) [13] > > > TComponent (11.12.2010 22:19:12) [12] > > На сервере "Мастера Delphi"? цитаты не формируются, сервер > этим не > занимается, а время передается без секунд. > Цитаты формируются на клиенте.
Да сообщения отсылает клиент. Значит это ваш NNTP сервер добавляет "секунды" в цитату?
-
Функция GetModuleFileName извлекает полный путь доступа к файлу, содержащему указанный модуль, которым владеет текущий процесс.
GetModuleFileName работает только с модулями, которыми владеет текущий процесс.
Синтаксис
DWORD GetModuleFileName( HMODULE hModule, LPTSTR lpFilename, DWORD nSize);
Параметры
hModule [in] Дескриптор модуля, путь к которому требуется. Если этот параметр - ПУСТО (NULL), GetModuleFileName извлекает путь к исполняемому файлу текущего процесса.
lpFilename [out] Указатель в буфер, получающий символьную строку с нулем в конце, которая определяет полный путь доступа к модулю. Если длина пути выходит за пределы размера, который определяет параметр nSize, функция завершается успешно, но строка обрезается до величины nSize и не может быть символом конца строки ('\0').
Подскажите, кто знает. Можно ли с помощью этой функции определить путь и имя файла приложения, окно которого активно? Какое значение нужно указать во первом параметре (LPTSTR lpFilename)?
-
> (LPTSTR lpFilename)
--> HMODULE hModule
-
Насколько я знаю, чтобы получить hModule нужно загрузить модуль с помощью LoadLibrary, а для этого необходимо знать имя файла :).
-
-
> TComponent (12.12.2010 00:31:14) [14]
Ну да, только секунды придумывает.
|