谢谢。
解决方案 »
- delphi6起动时总是提示错误,高手看看如何解决下
- 请问delphi做的三层的客户端和服务器之间传输数据怎么加密
- 关于indy连接ftp的问题
- 在sqlserver 里isnull(SUM(account_gain.gainnum),0) 这样写 在access里怎么写 还有?
- 老大们,帮帮忙啊!访问数据库
- 请教各位高手,怎样才能在程序启动时,执行“scktsrvr.exe”命令,启动SOCKET服务?
- 写DLL时遇到的问题,请高手帮忙!
- 在网络断开再恢复连接后,怎样能保持继续对数据库的正常操作?
- 请教:关于数据库备份与恢复的问题。
- 有人用过AlphaControls皮肤中的ASkin Editor 编辑器么?
- 当显示的查询项目很多的时候,dbgrid怎么只能自动生成垂直滚动条,而没有水平滚动条呢?
- 怎样得到任务栏的高度?
var
edtWnd :THandle; //edit的句柄
buf :PChar;
begin
getMem(buf,MAXBYTE);
SendMessage(edtWnd,WM_GETTEXT,255,integer(buf));
ShowMessage(strpas(buf));
freeMem(buf);
end;
wParam = (WPARAM) cchTextMax; // number of characters to copy
lParam = (LPARAM) lpszText; // address of buffer for text
ParameterscchTextMaxValue of wParam. Specifies the maximum number of characters to be copied, including the terminating null character. lpszTextValue of lParam. Points to the buffer that is to receive the text. Return ValuesThe return value is the number of characters copied.
Edit1.PasswordChar:='*';
直接在属性里改!
上面的方法在WindowXP好象行不通
---------------------------------------------------------------------------------
还真的没注意过呢,
你试过吗,应该可以啊!
int GetWindowTextLength(HWND hWnd); // 得到名字的长度
其中,hWnd :想要得到的那个窗口或控件的句柄 handle
int GetWindowText(HWND hWnd, LPTSTR lpString, int nMaxCount );// 得到名字
其中,hWnd :想要得到的那个窗口或控件的句柄 handle;
lpString:存放名字的字符串的地址
nMaxCount :可拷贝的最大字符数
下面以Delphi为例,说明它的实现过程。
新建一Form,放置Label、Edit、Button各一个到Form中,将Edit1的PasswordChar属性改为“*”,双击Button1:
procedure TForm1.Button1Click(Sender: TObject);
var
Name:PChar; // 名字
L:integer; // 名字的长度
begin
L:=GetWindowTextLength(Edit1.handle)+1; //得到名字长度,并将长度加1
GetMem(Name,L);//为将要得到的名字分配内存
GetWindowText(Edit1.handle,Name,L);//得到名字
label1.Caption:=String(Name); // 将得到的名字显示于 Label1
FreeMem(Name,0); // 释放分配的内存
end;
buf:array[0..1024] of char; ...
pass:=sendmessage(handle,em_getpasswordchar,0,0);
if pass<>0 then
begin
postmessage(handle,em_setpasswordchar,0,0);
sendmessage(handle,wm_gettext,1024,integer(@buf));
//postmessage(handle,em_setpasswordchar,wparam(ord('*')),0);
end
else
sendmessage(handle,wm_gettext,1024,integer(@buf));
passstr := Edit1.Text;
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, ExtCtrls, cxControls, cxContainer, cxEdit, cxLabel, cxTextEdit,
cxMemo, StdCtrls, ComCtrls;type
TfrmMain = class(TForm)
tmr1: TTimer;
cxMemo1: TcxMemo;
stat1: TStatusBar;
pnl1: TPanel;
Button2: TButton;
Button1: TButton;
procedure tmr1Timer(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private declarations }
procedure GetText(hHandle: THandle);
public
{ Public declarations }
hotkey:Integer;
procedure HotKeyDown(var Msg: Tmessage); message WM_HOTKEY;
end;var
frmMain: TfrmMain;implementation{$R *.dfm}function EnumChildWindowsProc(AHWnd: HWnd; LPARAM: lParam): boolean; stdcall;
var
WndClassName: array[0..254] of char;
begin
GetClassName(AHWnd, @WndClassName, 254);
with frmMain.cxMemo1.Lines do
begin
Add(StrPas(WndClassName));
end;
Result := True;
end;procedure TfrmMain.tmr1Timer(Sender: TObject);
var
p:TPoint;
H:THandle;
CName:array [0..63] of char;
//WC:TWndClass;
begin
GetCursorPos(p);
H := WindowFromPoint(p);
stat1.Panels[0].Text := IntToHex(H,8); GetClassName(H, CName, 64);
stat1.Panels[1].Text := CName; if Pos('EDIT', UpperCase(CName)) > 0 then
begin
GetText(H);
end;
end;procedure TfrmMain.FormShow(Sender: TObject);
begin
hotkey:=0;
if not RegisterHotKey(Handle,hotkey,MOD_CONTROL ,VK_Space) then
showmessage('can not register the hotkey');
end;procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
UnRegisterHotKey(handle, HotKey);
end;procedure TfrmMain.HotKeyDown(var Msg: Tmessage);
var
H:THandle; p:TPoint;
begin
if (Msg.LParamHi = VK_SPACE)and (Msg.LParamLo=MOD_CONTROL) then
begin
GetCursorPos(p);
H:=WindowFromPoint(p);
cxMemo1.Lines.Clear;
EnumChildWindows(H,@EnumChildWindowsProc, 0);
end;
end;procedure TfrmMain.Button1Click(Sender: TObject);
var
HWindow,hedit: THandle; //句本柄变量
szText: Array[0..255] Of char; //得到的字符串
Begin
HWindow := 0;
While true Do
Begin
HWindow := FindWindowEx(0, HWindow, 'SciCalc', Nil);//找计算器的窗体
if HWindow=0 then exit;
If HWindow <> 0 Then
Begin
hEdit := FindWindowEx(hwindow, 0, 'Edit', Nil); //找到edit文本框
if HEdit<>0 then
begin
SendMessage(hEdit, WM_GetTEXT, 256,integer(@szText[0])); //取值
cxMemo1.Lines.Text:= szText; //符值
break;
End;
end;
end;
End;procedure TfrmMain.GetText(hHandle: THandle);
var
szText: Array[0..255] Of char; //得到的字符串
begin
if hHandle <> 0 then
begin
SendMessage(hHandle, WM_GetTEXT, 256,integer(@szText[0])); //取值
cxMemo1.Lines.Text := szText; //符值
End;
end;procedure TfrmMain.Button2Click(Sender: TObject);
var
MainHandle,MemoHandle :THandle;
Text :Array [0..10000] of Char;
TextLen :Integer;
begin
MainHandle := FindWindow('notepad',nil);
MemoHandle := FindWIndowEx(MainHandle,0,'Edit',nil);
ShowMessage(IntToStr(MemoHandle));
SendMessage(MemoHandle,WM_GETTEXT,10000,LongInt(@Text));
cxMemo1.Text := Text;
end;end.