Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Заголовок активного окна... [D7, Win95/98, Win2k]


kpv-10k ©   (2003-03-19 21:05:00) 

Господа! Столкнулся с такой проблемой : моя ф-ция если запускается из DLL, то выдает всякий хлам типа квадратиков вместо букв, хотя если ее запустить из EXE, то всё нормально!
Вот пример ф-ции:

function ActiveApplicationTitle(): String;
Var
PAC : array[0..$FFF] of Char;
begin
FillChar(PAC, $FFF+1, 0);
GetWindowText(GetForegroundWindow, PAC, GetWindowTextLength(GetForegroundWindow)+1);
Result:=PAC;
end;


Diamond Cat   (2003-04-01 02:06:00) [1]

function ActiveApplicationTitle(): String;
Var
PAC : array[0..max_path] of Char;
begin
zeromemory(@pac,sizeof(pac));
GetWindowText(GetForegroundWindow, PAC, sizeof(pac));
Result:=string(PAC);
end;


Zazoo   (2003-03-31 23:54:00) [2]

Если всё-же нужен string:
uses ShareMem;
Обязательно первый модуль в списке в проге и библиотеке + BORLNDMM.DLL в <windir>\system32


Morfein   (2003-03-31 22:05:00) [3]

>>Songoku
твой случай тяжёлый... а чем написанное тобой отличается от написанного kpv-10k ? Выделением памяти? при таком коде выделяется память, в неё копируется заголовок окна, а потом выделяется память под Result:String и в него(Result) КОПИРУЕТСЯ содерж. переменной R!


procedure GetWText(lpStr : pchar);
begin
if lpStr = nil then
exit;

GetWindowText(GetForegroundWindow, lpStr, lstrlen(lpStr));
end;


только теперь непонятно, а зачем такую простую процедуру засовывать в DLL?


Songoku   (2003-03-31 21:56:00) [4]

function GetWText():String;
var r:LPSTR;
i:Integer;
begin
i:=GetWindowTextLength(GetForegroundWindow)+1;
r:=VirtualAlloc(nil, DWORD(i), MEM_COMMIT, PAGE_READWRITE);
GetWindowText(GetForegroundWindow,pchar(r),i);
Result:=r;
end;

попробуй вот это .... Напиши если получилось!!!


Morfein   (2003-03-31 21:44:00) [5]

Комментарий, который сообщает, что лучше не использовать при возвращении значений из функций бтблиотеки тип STRING... а если используете, то принимайте специальные меры!

А если проще, то передавай лучше текст через указатель... STIRNG - тип "антисистемный" :)


KPV-10k   (2003-03-31 21:21:00) [6]

> Guerrillero

Что значит "Читал большой комментарий вначале кода ?" (какой комментарий)


Guerrillero   (2003-03-20 00:00:00) [7]

Читал большой комментарий вначале кода ?


Наверх

Титульная страница Поиск, карта сайта Написать письмо