我想在定时器中获得鼠标指向窗口的文本,SendMessage函数的最后一个参数要求是Integer类型,和VC、VB中的都不同,我试了很多种方法,都不成功,请问高手,最后一个参数究竟应该怎样传递?我的代码如下:
procedure Tfrmgetpassword.Timer1Timer(Sender: TObject);
var
Hwnd :integer;
Pos :Tpoint;
PassWord :pchar; {此处试了很多种类型}
begin
GetcursorPos(Pos); {获得鼠标位置}
Hwnd:=WindowFromPoint(Pos); {获得鼠标指向句柄}
SendMessage(Hwnd,WM_GETTEXT,256,PassWord); {得到文本,VC和VB中这样都行}
txtpass.Text :=PassWord;
end;
procedure Tfrmgetpassword.Timer1Timer(Sender: TObject);
var
Hwnd :integer;
Pos :Tpoint;
PassWord :pchar; {此处试了很多种类型}
begin
GetcursorPos(Pos); {获得鼠标位置}
Hwnd:=WindowFromPoint(Pos); {获得鼠标指向句柄}
SendMessage(Hwnd,WM_GETTEXT,256,PassWord); {得到文本,VC和VB中这样都行}
txtpass.Text :=PassWord;
end;
procedure Tfrmgetpassword.Timer1Timer(Sender: TObject);
var
Hwnd :integer;
Pos :Tpoint;
PassWord :pchar; {此处试了很多种类型}
begin
GetcursorPos(Pos); {获得鼠标位置}
Hwnd:=WindowFromPoint(Pos); {获得鼠标指向句柄}
GetMem(PassWord,256);
SendMessage(Hwnd,WM_GETTEXT,256,LParam(PassWord)); {得到文本,VC和VB中这样都行}
txtpass.Text :=PassWord;
end;
var
Hwnd :integer;
Pos :Tpoint;
PassWord :pchar;
PasswordLength:integer;
begin
GetcursorPos(Pos); {获得鼠标位置}
Hwnd:=WindowFromPoint(Pos); {获得鼠标指向句柄}
PasswordLength:=SendMessage(hWnd,WM_GETTEXTLENGTH,0,0);{获得Hwnd的文本长度}
GetMem(Password,PasswordLength);//分配内存
SendMessage(Hwnd,WM_GETTEXT,PasswordLength,PassWord); //得到文本
txtpass.Text :=string(PassWord); //转换为String并付给txtpass.text
FreeMem(Password,PasswordLength);//释放已分配的内存
end;
2.参数类型是整型数,不能直接用PassWord,这个只是指针,要转化为整型数传递!用强制类型转化,Integer(PassWord)或lParam(PassWord)//因为lParam:Integer,所以可以!释放内存其实也不用指定长度!改下:
var
Hwnd :integer;
Pos :Tpoint;
PassWord :pchar;
PasswordLength:integer;
begin
GetcursorPos(Pos);
Hwnd:=WindowFromPoint(Pos);
PasswordLength:=SendMessage(hWnd,WM_GETTEXTLENGTH,0,0);
GetMem(Password,PasswordLength);
SendMessage(Hwnd,WM_GETTEXT,PasswordLength,Integer(PassWord));
Memo1.Text :=string(PassWord);
FreeMem(Password);
end;