Текущий архив: 2002.04.18;
Скачать: CL | DM;
Вниз
Getclassname Найти похожие ветки
← →
SeF (2002-04-02 02:57) [0]подскажите что не так?
procedure TForm1.Timer1Timer(Sender: TObject);
var
p: TPoint;
name:string;
begin
setlength(name,255);
//fillchar(name,255,#0);
GetCursorPos(p);
GetClassName(WindowFromPoint(p),@name,255);
edit1.Text:=name; {1}
end;
в 1 все время "Access violation at address 00404242 in module Project1.exe" read of address 726F464C
компилится без проблем...
← →
SoftOne (2002-04-02 03:50) [1]Читаем хелп по GetClassName. И видим, что вторым параметром в ней идет "LPTSTR", т.е. "Long Pointer To String", т.е. PChar.
"name" у тебя "string" - это плюс! Но @name - это минус, поскольку указывает не на область данных, а на "область указателя на область данных"!
← →
SeF (2002-04-03 02:10) [2]>SoftOne
вместо
edit1.Text:=name;
нвписать
messagebox(0,pchar(name),pchar(""),0);
то все ok
да и еслиname:pchar;
то таже самая ошибка...
← →
Adder (2002-04-04 00:21) [3]
GetClassName(WindowFromPoint(p),@name[1],255);
← →
Doom (2002-04-04 00:24) [4]А вачале p:= Create (TPoint) или как там не надо писать?
← →
Adder (2002-04-04 00:27) [5]2Doom ;)
type TPoint = record
X: Longint;
Y: Longint;
end;
← →
SeF (2002-04-04 02:27) [6]>Adder © после выхода из проседуры проходит 1-2 sec и access violation at 0x00000000: read address 0x00000000.
а класс не показывает
← →
SeF (2002-04-04 02:56) [7]последние испытания:
procedure TForm1.Button1Click(Sender: TObject);
var
p: TPoint;
name:string;
begin
sleep(2000);
//str:=tstringlist.Create;
setlength(name,255);
fillchar(name,255,#0);
GetCursorPos(p);
if GetClassName(WindowFromPoint(p),@name,255)>0 then
messagebox(0,@name,pchar("11111"),0)
else
messagebox(0,pchar(inttostr(GetLastError)),pchar("11111"),0);
//edit1.Text:=name;
//str.Free;
end;
в итоге через 1-2 sec получаем http://seff.pisem.net/images/error.jpg
← →
Fantasist (2002-04-04 05:46) [8]Эхе-ех. :)
Вот, получите. :)
procedure TForm1.Button1Click(Sender: TObject);
var
p: TPoint;
name:PChar;
begin
sleep(2000);
name:=StrAlloc(255);
GetCursorPos(p);
if GetClassName(WindowFromPoint(p),name,255)>0 then
messagebox(0,name,pchar("11111"),0)
else
messagebox(0,pchar(inttostr(GetLastError)),pchar("11111"),0);
end;
← →
Fantasist (2002-04-04 05:53) [9]Да, пару комментариев.
1. Как вам выше сказали, если у вас name типа string, то адрес ее надо передавать как @name[1], иначе вы передаете не адрес строки, а адрес указателя и облом.
2. Не стоит забивать ANSI строку нулями - ноль символ окончания строки.
То есть так тоже будет работать:
procedure TForm1.Button1Click(Sender: TObject);
var
p: TPoint;
name:string;
begin
sleep(2000);
setlength(name,255);
GetCursorPos(p);
if GetClassName(WindowFromPoint(p),@name[1],255)>0 then
messagebox(0,@name[1],pchar("11111"),0)
else
messagebox(0,pchar(inttostr(GetLastError)),pchar("11111"),0);
end;
← →
SeF (2002-04-04 13:49) [10]>Fantasist
проблема в том что проседура выполнятся, а ошибка после выхода из процедуры......
← →
Romkin (2002-04-04 14:10) [11]
procedure TForm1.Timer1Timer(Sender: TObject);
var
p: TPoint;
WndName:string;
Wnd: HWnd;
nSize: integer;
begin
GetCursorPos(p);
Wnd := WindowFromPoint(p);
SetLength(wndName,255); //max
nSize := GetClassName(Wnd,PChar(WndName),255);
if nSize = 0 then exit; //Error
SetLength(WndName,nSize + 1);
nSize := GetClassName(Wnd,PChar(WndName),nSize + 1);
edit1.Text:=WndName;
end;
← →
Fantasist (2002-04-04 22:30) [12]>проблема в том что проседура выполнятся, а ошибка после выхода >из процедуры......
ПОСЛЕ выхода? Ну, тогда дело в чем-то другом. У меня так все четко, оба кода которые я привел работают совершенно коректно. Ты их у себя пробывал?
← →
SeF (2002-04-05 01:00) [13]Всем БОЛЬШОЕ СПАСИБО! заработало. Ошибка вылетала действительго после выхода, но после изменения кода действительно ВСЕ ok. еще рас спасибо!
← →
Fantasist (2002-04-05 02:48) [14]Естесвенно,она вылетала после выхода, так как ты передавал переменную типа string изменялся сам указатель, и исключение происходило когда компилятор пытался удалить память из под string которая указывала неизвестно куда.
Страницы: 1 вся ветка
Текущий архив: 2002.04.18;
Скачать: CL | DM;
Память: 0.47 MB
Время: 0.005 c