![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Получить текст текущего окна на Delphi. [D7, WinXP]
jeon © (2004-08-08 18:53:00)У меня 7-я версия делфи. Не могу получить текст текущего окна. Мне пишет, что в библиотеке user32.dll нету функции GetWindowText (!!!). Проделал то же самое на VB – работает. Может я где в коде ошибку допустил. Помогите плиз. Вот мой код (начиная с объявления API:
implementation
function GetWindowText(Wnd: HWnd; Str: PChar; MaxCount: Integer): Integer;
stdcall; external 'user32.dll';
function GetWindowTextLength(Wnd: HWnd): Integer;
stdcall; external 'user32.dll';
{$R *.dfm}
function GetForegroundWindow():Integer;
stdcall; external 'user32.dll';
procedure TForm1.Button1Click(Sender: TObject);
var s:pchar;
res,buf:integer;
hnd:integer;
begin
hnd:=getforegroundwindow();
buf:=getwindowtextlength(hnd);
res:=getwindowtext(hnd,s,buf);
edit1.text:=s;
end;
VMcL (2004-08-10 13:08:00) [1]>> Cobalt © (10.08.04 12:37) [12]
> Хм, интересно, откуда ты это раскопал?
В MSDN.
> А вот в MS SDK Help Files в Win32.hlp я этого (GetWindowTextA/W) не нашёл (D7)
Само собой. В Help'е - GetWindowText(). А поскольку есть две версии ANSI и Unicode, то значит реальные имена GetWindowTextA и GetWindowTextW.
Cobalt (2004-08-10 12:37:00) [2]2 VMcL © (09.08.04 10:57) [10]
Хм, интересно, откуда ты это раскопал?
я ни в SDK Reference, ни в MSDN не нашёл
А насчёт функций A/W я знал :)
2 Sergey Kaminski ©
Я имел в виду что она (функция) есть в модуле Windows.pas.
А вот в MS SDK Help Files в Win32.hlp я этого (GetWindowTextA/W) не нашёл (D7)
Sergey Kaminski (2004-08-10 02:27:00) [3]VMcL © (09.08.04 10:57) [10]
Это было домашнее задание Cobalt'а :))))
VMcL (2004-08-09 10:57:00) [4]>> Cobalt © (09.08.04 01:22) [8]
Windows 95/98/Me:GetWindowTextW is supported by the Microsoft® Layer for Unicode (MSLU). To use this, you must add certain files to your application, as outlined in Microsoft Layer for Unicode on Windows 95/98/Me Systems.
...
Implemented as Unicode and ANSI versions on Windows NT, Windows 2000, Windows XP
Отсюда соотвествующий вывод.
Sergey Kaminski (2004-08-09 03:06:00) [5]2 Cobalt ©
Что-то мне сложно понять Ваши доводы.
Кстати, "эта" функция есть даже в Win32.hlp, не то что в MSDN (в MSDN тоже, разумеется,есть).
Вы не туда смотрели. Нужно смотреть какие имена импортиртирует из dll:
function GetWindowText; external user32 name 'GetWindowTextA';
function GetWindowTextA; external user32 name 'GetWindowTextA';
function GetWindowTextW; external user32 name 'GetWindowTextW';
А не под какими они в интерфейс-секции указаны.
А чтобы впредь избежать подобных заявлений, советую самостоятельно разобраться что это за "A" & "W". И почему нет GetWindowText.
Сказано не со зла, просто совет.
Cobalt (2004-08-09 01:22:00) [6]а вот MSDN чё-то не нашёл мне ничего :(
И вообще знает только эту функцию:
http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/windowing/windows/windowreference/windowfunctions/getwindowtext.asp
VMcL (2004-08-09 00:52:00) [7]>>Cobalt © (08.08.04 23:36) [5]
> 2 Sergey Kaminski © (08.08.04 21:18) [4]
> Наглые враки!!!
Щас LMD получишь. Смотри свой же пост. Нет в этой DLL никакой GetWindowText, а есть GetWindowTextA и GetWindowTextW.
Kirill35 (2004-08-08 23:44:00) [8]не надо ничего явно вызывать из библиотек
procedure TForm1.Button1Click(Sender: TObject);
var Text: array [0..255] of Char;
Handle: HWnd;
Cap: String;
begin
Handle := GetForegroundWindow;
GetWindowText(Handle, Text, 255);
Cap := StrPas(Text);
ShowMessage(Cap);
end;
Cobalt (2004-08-08 23:36:00) [9]2 Sergey Kaminski © (08.08.04 21:18) [4]
Наглые враки!!!
Borland Delphi 7.0 Enterprise Vesion 7.0 (Build 4.453)
Windows.pas:
{$EXTERNALSYM GetWindowText}
functionGetWindowText(hWnd: HWND; lpString: PChar; nMaxCount: Integer): Integer; stdcall;
{$EXTERNALSYM GetWindowTextA}
functionGetWindowTextA(hWnd: HWND; lpString: PAnsiChar; nMaxCount: Integer): Integer; stdcall;
{$EXTERNALSYM GetWindowTextW}
functionGetWindowTextW(hWnd: HWND; lpString: PWideChar; nMaxCount: Integer): Integer; stdcall;
Sergey Kaminski (2004-08-08 21:18:00) [10]А там нет такой функции. Там есть такие:
GetWindowTextA,GetWindowTextW
KSergey (2004-08-08 21:06:00) [11]или
uses Windows;
Что-то запамятовал :)
KSergey (2004-08-08 21:05:00) [12]Может вместо собственных лбъявлений взять да и написать
uses Window;
panov (2004-08-08 19:01:00) [13]Перед тем, как добавлять ветки в форум, надо правила почитать.
(Это о попытках задать один вопрос в несколько конференций)