怎么向程序发送用户名及密码?

约翰羊 2002-03-17 11:20:44
我有一个程序运行时需要登录.每次都要输入用户名密码,而且不能记忆密码,很烦.有什么办法在让别的程序替我运行此程序并输入用户名密码吗?
...全文
97 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
约翰羊 2002-03-20
  • 打赏
  • 举报
回复
解决了.谢谢大家.
约翰羊 2002-03-20
  • 打赏
  • 举报
回复
噢,好复杂.不过大概的思路我已经有了.抱歉,我还没着手编呢.
我刚刚试了一下findwindow,能找到窗口句柄.但用findwindowex没有找到edit的句柄,这个能教我一下吗?
再次谢谢大家,谢谢了.
My_first 2002-03-20
  • 打赏
  • 举报
回复
给你一个思路


你可以把连接的参数写入注册表。 然后读取就是了。

给你一个例子:

写入注册表, 然后再读取.


procedure TForm1.Button1Click(Sender: TObject); //写入注册表 把访问用户名和密码。 及计算机名称写入注册表

var Reg: TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('SoftWare\MyKey',True);
Reg.WriteString('User',edtUser.Text); //用户名
Reg.WriteString('Password',edtPassword.Text);//密码
Reg.WriteString('ip',edtip.Text); //服务器名称,如果是win98则填用计算机名就行了。 也可以直接用函数读取计算机名。存于editp.text;

Reg.WriteString('S_User',edit1.Text);
Reg.WriteString('S_Password',edit2.Text);
Reg.WriteString('S_ip',edit3.Text);



Reg.Free;

end;



procedure TForm1.button2Click(Sender: TObject); // 把注册表里的内容读取出来。存放到三个不同变量里头。, 然后把字符串连起来,

var Reg: TRegistry;
begin
Reg := TRegistry.Create;
Reg.RootKey := HKEY_LOCAL_MACHINE;
Reg.OpenKey('SoftWare\MyKey',True);
label1.Caption := Reg.ReadString('User');
label2.Caption := Reg.ReadString('Password');
label11.Caption := Reg.ReadString('ip');


label12.Caption:= Reg.ReadString('S_User');
label13.caption:= Reg.ReadString('S_Password');
label14.caption:= Reg.ReadString('S_ip');


Reg.Free;

end;



procedure TForm1.Button3Click(Sender: TObject); //获取计算机名称
var
sBuffer: PChar;
sSize: Cardinal;
begin
sSize := 255;
GetMem(sBuffer, sSize + 1);
try
if GetComputerName(sBuffer, sSize) then
edtip.Text := sBuffer;
finally
FreeMem(sBuffer);
end;
end;



最后把所有变量连接起来。 在form的create事件中调用

ADOtable1.ConnectionString:='Provider=SQLOLEDB.1;Password='+b_password+';'+'Persist Security Info=True;User ID='+b_user+';'+'Initial Catalog=POS_MORE;Data Source='+b_ip+';';


type
adotable1.active:=True;
except
application.Terminate;
exit;
end;

这就搞定了。

shuixin13 2002-03-20
  • 打赏
  • 举报
回复
我知你的意思了,
因为你装的是2K,
而如果不登录系统的话程序是不能自动运行的,
除非你的程序是系统服务程序,并已被设为系统服务
就像IIS等一些服务程序

我想你的程序一定不是上面的,
你想的一定是:
WINDOWS系统不登录,你的程序自动运行,
如要想达到你的想法是一定不行了,
要解决只有下列方法了:
将2K设为不需用户名自动登录,
然后将你的“程序 1”设为自启动,让WINDOWS 2K 进入后就运行
再编一个“程序2”用FindWindow找到它的句柄,
再FindWindowEx找到密码框的句柄Wnd,
对它发SendMessage(Wnd,WM_char,asc,0);
让“程序 1”正常登录数据库系统,
然后“程序2”再发一条消息将WINDOWS系统锁定

&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
你有SPY++ 就可以看到你的“程序 1”的类名或CAPTION
以及“程序 1”下面的控件子父关系和它们的类名,
有了类名,就有FindWindowEx调用吧,看看MSDN,DELPHI帮助

$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$

要么将你的程序发给我,几百K噢,我没用宽带
shuixin13@163.com
约翰羊 2002-03-20
  • 打赏
  • 举报
回复
我用的是2000,进系统时就要输入用户名密码,应该安全.如果程序还要,安全得过份了.我想把帐号密码放在注册表里.
用FindWindow,FindWindowEx,SendMessage,就可以了吗?我这就试试.
能给我一段找edit句柄的源程序吗?
如果还有发消息的源程序就更好了.
谢谢大家了.
shuixin13 2002-03-18
  • 打赏
  • 举报
回复
你自己编一个程序,

用FindWindow找到它的句柄,
再FindWindowEx找到密码框的句柄Wnd,
对它发SendMessage(Wnd,WM_char,asc,0);
asc为密码字符的ASC码
密码有六个字符就发六次
onice 2002-03-17
  • 打赏
  • 举报
回复
恩~~
你在程序启动的时候读取呀~~
Bellamy 2002-03-17
  • 打赏
  • 举报
回复
同意xinfei(aw)的方法
约翰羊 2002-03-17
  • 打赏
  • 举报
回复
不明白.
xinfei 2002-03-17
  • 打赏
  • 举报
回复
你把需要输入的用户名和密码写入注册表,或者是.ini文件里, 在登录的时
候读取就是了
sql_man 2002-03-17
  • 打赏
  • 举报
回复
用户名可以写到注册表,但口令也写进去不好吧,那不是谁都可以用这个软件了吗?那还要校验啥用户与口令呢
h_x_k 2002-03-17
  • 打赏
  • 举报
回复
找到用户EDIT的句柄和密码EDIT的句柄,发WM_SETTEXT消息,就完了,要不染再送一个鼠标单击消息给按钮,这样更简单哦
netapple 2002-03-17
  • 打赏
  • 举报
回复
用INI是不是会不安全
程序最重要是不要有中间过程呀

5,386

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 开发及应用
社区管理员
  • VCL组件开发及应用社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧