盒子 收藏帖子 转移-实现向网页自动填写用户名密码并自动点击登录按钮 完成全自动凳录

//实现向网页自动填写用户名密码并自动点击登录按钮  完成全自动凳录

Function FillForm(WebBrowser: TWebBrowser2; FieldName: String; Value: String):
  Boolean;
Var
  i, j: Integer;
  FormItem: Variant;
Begin
  Result := False;
  //no form on document
  If WebBrowser.OleObject.Document.all.tags(‘FORM‘).Length = 0 Then
    Begin
      Exit;
    End;
  For I := 0 To WebBrowser.OleObject.Document.forms.Length - 1 Do
    Begin
      FormItem := WebBrowser.OleObject.Document.forms.Item(I);
      For j := 0 To FormItem.Length - 1 Do
        Begin
          Try
          //when the fieldname is found, try to fill out
          If FormItem.Item(j).Name = FieldName Then
          Begin
          FormItem.Item(j).Value := Value;
          Result := True;
          End;
          Except
          Exit;
          End;
        End;
    End;
End;

FillForm(浏览器控件名称, 编辑框名称, 内容)

str := (Webbrowser1.Document as IHTMLDocument2).cookie;

Ver: TFixedFileInfo;
begin
Ver := FileInfo(Application.ExeName);
Edition.Caption := ‘软件版本:‘ + IntToStr(Ver.wFileVersionLS) + ‘.‘ +
      IntToStr(Ver.wFileVersionMS) + ‘.‘ +
      IntToStr(Ver.wProductVersionLS) + ‘.‘ +
      IntToStr(Ver.wProductVersionMS) + ‘ - [正式版]‘;
end;

这样,明白了吗?
---------------------------------------------- 
有空来俺们的小站逛逛(http://www.e8e.net)

作者:
 star5 (星五) ▲▲▲▲△ -
盒子活跃会员
2008-12-25 18:41:32
2楼: 其他,如文件大小什么什么的,自己搜索下。
---------------------------------------------- 
SOS!关于Record初始值一个问题! 浏览:1247
加入我的收藏
楼主: 我有个结构是这样子的
  TConfig = record
      A: Boolean;
      B: Integer;
      C: Boolean;
      D: Integer;
      //以此类推  非常多,下面还有数组
   sName: array[0..8] of string;
   boUse: array[0..8] of Boolean;
   wNum:  array[0..8] of Word;
  end;

var
  Config: TConfig = (
      A: False;
      B: 0;
      C: True;
      D: 2;
      //以此类推  非常多,下面还有数组
   sName:(‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘);
   boUse:(False, True, False, False, True, False, True, False, False); 
   wNum: (0, 1, 0, 4, 0, 3, 0, 0, 0);
   );

当定义时,初始了,在程序运行中,需要初始成定义时的数据,只能一个个赋值吗?还是有其它办法吗?
---------------------------------------------- 
delphi众人拾柴火焰高!支持盒子~~~~~~~~~~

 
作者:
 wr960204 (武稀松) ▲▲▲▲▲ -
盒子活跃会员
2010-12-15 21:31:49
1楼: 全局变量或Const定义的常量可以给初始值
---------------------------------------------- 
武稀松http://www.raysoftware.cn
作者:
 wqyfavor (wqyfavor) ▲▲▲▲△ -
普通会员
2010-12-15 21:44:32
2楼: 不懂得你说的在程序中初始是什么意思。应该是你想说在程序运行时为整个Record赋值吧,那直接 := 就可以了。
---------------------------------------------- 
http://hi.baidu.com/wqyfavor
作者:
 q34625474 (q34625474) ▲▲▲▲△ -
盒子活跃会员
2010-12-15 21:48:10
3楼: TO wqyfavor

在程序运行的时候 用户可以修改 结构中的类型数据    用户还可以执行恢复默认设置,  当他恢复默认设置的时候 能否将这个结构初始化成    结构定义那里的值     只能一个一个的赋予给结构中的成员吗?
---------------------------------------------- 
delphi众人拾柴火焰高!支持盒子~~~~~~~~~~

作者:
 supermay (supermay) ▲▲▲▲▲ -
盒子活跃会员
2010-12-15 22:35:16
4楼: 没有办法
统一值的话,你可以用fillchar
---------------------------------------------- 
卖源码http://item.taobao.com/item.htm?spm=686.1000925.1000774.16.gmrHsT&id=37407600038每天点一下广告,支持盒子不关闭
作者:
 wqyfavor (wqyfavor) ▲▲▲▲△ -
普通会员
2010-12-15 23:17:55
5楼: 恢复成定义那里的值,你可以把那个定义改成const啊,就是一个常量。然后赋值给你的变量就可以了啊。
---------------------------------------------- 
http://hi.baidu.com/wqyfavor
作者:
 q34625474 (q34625474) ▲▲▲▲△ -
盒子活跃会员
2010-12-16 2:32:19
6楼: to wqyfavor  
你还是不懂得我的意识
结构内非常多  如果一个一个赋值  会很麻烦  我想整个RECORD初始值
---------------------------------------------- 
delphi众人拾柴火焰高!支持盒子~~~~~~~~~~
作者:
 wr960204 (武稀松) ▲▲▲▲▲ -
盒子活跃会员
2010-12-16 9:29:30
7楼: 都告诉你了.
全局变量或Const定义的常量可以给初始值.
你先定义一个全局变量或常量.
当想赋初始值的时候就等于这个变量或常量不就得了.
---------------------------------------------- 
武稀松http://www.raysoftware.cn
作者:
 adamwu (AdamWu) ▲▲▲△△ -
注册会员
2010-12-16 10:38:44
8楼: 不知道string, interface等能不能自动处理。
不过如果有动态数组或者对象引用那肯定是不能直接等于的。
---------------------------------------------- 
-
作者:
 lbq971101 (lbq971101) ▲▲▲▲▲ -
盒子活跃会员
2010-12-17 18:42:21
9楼: 用CopyMemory就可以了,不用一个一个赋值
---------------------------------------------- 
兼金软件工作室
作者:
 egust (欢迎访问 [email protected]) ▲▲▲▲△ -
普通会员
2010-12-17 19:02:27
10楼: 像 lz 给出来的 record(成员包括自动管理生存期的 string 类型),CopyMemory/Move 属于找死的行为,必须要用“:=”标准赋值语句,或者自己调 system._CopyRecord 才行(后者还很麻烦)。FillChar/ZeroMemory 除非在还没使用过该局部变量的时候用,否则只要任何一个 string 里有指向非常量的内容,就会产生内存泄露。
---------------------------------------------- 
cnblogs中我写的关于Delphi的blog,欢迎访问:
http://www.cnblogs.com/egust/
作者:
 bmsr (白忙剩人) ▲▲▲▲△ -
普通会员
2010-12-17 19:24:29
11楼: 给你个例子自己去看
  RecBskyCust = record
    Ver: integer;
    Cust_ID: integer;
    Cust_name: string[40];
    Cust_NiName: string[40];
    Email: shortstring;
    MPhone: string[80];
    Phone: string[80];
    SFZ: string[18];
    pass: string[40];
    Func: integer;
    Reg_Time: TDateTime;
    UpDate_Time: TDateTime;
    QQ: integer;
    Msn: shortstring;
    OtherIM: shortstring;
    Company: shortstring;
    Area_Code: integer;
    PostCode: integer;
    Address: shortstring;
    CUST_STATES: TPassStates;
    Descr: string;
  end;

function CopyRecord(Rs: RecBskyCust; var RD: RecBskyCust): boolean; overload;
begin
  Result := False;
  try
    DisposeRecord(RD);
    System.move(Rs, RD, sizeof(Rs) - sizeof(string));
    RD.Descr := Rs.Descr;
    Result := True;
  except
    on E: Exception do
      Application.MessageBox(PChar(E.Message + ‘错误号:‘ + IntToStr(E.HelpContext)), ‘错误!‘, MB_OK + MB_ICONERROR + MB_TOPMOST);
  end;

end;

function DisposeRecord(Var R: RecBskyCust): boolean;
begin
  Result := False;
  try
    R.Descr := ‘‘;
    zeromemory(@R, sizeof(R));
    Result := True;
  except
    on E: Exception do
      Application.MessageBox(PChar(E.Message + ‘错误号:‘ + IntToStr(E.HelpContext)), ‘错误!‘, MB_OK + MB_ICONERROR + MB_TOPMOST);
  end;
end;
除了string 类型  还有动态数组和其它指针类型也需要单独处理,所以尽量把这类数据类型放到record的最后

网上有这种代码了,只是因为写的较早,有些地方写的不那么言简意赅,而且在XE后的版本中有问题(因为Unicode字符的关系)

下面是精简修改过的代码,只取第一块硬盘的序列号,Win7 + XE 测试通过。需要先安装JwApi函数库,因为有些结构体在库中有声明了

[delphi] view plaincopy

  1. unit uGetHDSN;
  2. interface
  3. uses
  4. Windows, JwaWinIoctl;
  5. function GetIdeSerialNumber: AnsiString;
  6. implementation
  7. type
  8. TIdSector = packed record
  9. wGenConfig: USHORT;
  10. wNumCyls: USHORT;
  11. wReserved: USHORT;
  12. wNumHeads: USHORT;
  13. wBytesPerTrack: USHORT;
  14. wBytesPerSector: USHORT;
  15. wSectorsPerTrack: USHORT;
  16. wVendorUnique: array [0 .. 2] of USHORT;
  17. sSerialNumber: array [0 .. 19] of AnsiChar;
  18. wBufferType: USHORT;
  19. wBufferSize: USHORT;
  20. wECCSize: USHORT;
  21. sFirmwareRev: array [0 .. 7] of AnsiChar;
  22. sModelNumber: array [0 .. 39] of AnsiChar;
  23. wMoreVendorUnique: USHORT;
  24. wDoubleWordIO: USHORT;
  25. wCapabilities: USHORT;
  26. wReserved1: USHORT;
  27. wPIOTiming: USHORT;
  28. wDMATiming: USHORT;
  29. wBS: USHORT;
  30. wNumCurrentCyls: USHORT;
  31. wNumCurrentHeads: USHORT;
  32. wNumCurrentSectorsPerTrack: USHORT;
  33. ulCurrentSectorCapacity: ULONG;
  34. wMultSectorStuff: USHORT;
  35. ulTotalAddressableSectors: ULONG;
  36. wSingleWordDMA: USHORT;
  37. wMultiWordDMA: USHORT;
  38. bReserved: array [0 .. 127] of Byte;
  39. end;
  40. PIdSector = ^TIdSector;
  41. const
  42. IDE_ATA_IDENTIFY = $EC;
  43. function LittleToBig(Data: Word): Word;
  44. asm
  45. xchg ah, al
  46. end;
  47. function GetIdeSerialNumber: AnsiString;
  48. var
  49. hDevice: THandle;
  50. Size, cbBytesReturned: DWORD;
  51. SCIP: TSendCmdInParams;
  52. SCOP: PSendCmdOutParams;
  53. P: PWORD;
  54. I: Integer;
  55. begin
  56. Result := ‘‘;
  57. hDevice := CreateFile(‘\\.\PhysicalDrive0‘, GENERIC_READ or GENERIC_WRITE, FILE_SHARE_READ or
  58. FILE_SHARE_WRITE, nil, OPEN_EXISTING, 0, 0);
  59. if hDevice = INVALID_HANDLE_VALUE then
  60. Exit;
  61. Size := SizeOf(TSendCmdOutParams) + IDENTIFY_BUFFER_SIZE - 1;
  62. SCOP := AllocMem(Size);
  63. SCIP.irDriveRegs.bCommandReg := IDE_ATA_IDENTIFY;
  64. if DeviceIoControl(hDevice, SMART_RCV_DRIVE_DATA, @SCIP, SizeOf(TSendCmdInParams) - 1, SCOP, Size,
  65. cbBytesReturned, nil) = False then
  66. begin
  67. FreeMem(SCOP);
  68. CloseHandle(hDevice);
  69. Exit;
  70. end;
  71. // 处理一下序列号在内存中的顺序
  72. with PIdSector(@SCOP^.bBuffer[0])^ do
  73. begin
  74. SetLength(Result, Length(sSerialNumber));
  75. P := @Result[1];
  76. CopyMemory(P, @sSerialNumber[0], Length(sSerialNumber));
  77. for I := 1 to Length(sSerialNumber) div 2 do
  78. begin
  79. P^ := LittleToBig(P^);
  80. Inc(P);
  81. end;
  82. end;
  83. FreeMem(SCOP);
  84. end;
  85. end.
时间: 2024-10-06 01:19:37

盒子 收藏帖子 转移-实现向网页自动填写用户名密码并自动点击登录按钮 完成全自动凳录的相关文章

通过VBS编写自动输入账号和密码、自动登录程序的脚本

通过VBS编写自动输入账号和密码.自动登录的脚本. 请查看附件: 附件中是以QQ为例. 这个脚本的好处是: 1.可以用于开机自动登录 2.可以用于运维人员自动登录一些程序 3.可以用于......

TortoiseGit自动记住用户名密码的方法

TortoiseGit自动记住用户名密码的方法 windows下比较比较好用的git客户端有2种: msysgit + TortoiseGit(乌龟git) GitHub for Windows github的windows版也用过一段时间,但还是不太习惯.所以目前仍然青睐与msysgit+乌龟git的组合.TortoiseGit在提交时总数会提示你输入用户名密码,非常麻烦.解决方案如下: 方法一: 设置 -> git 编辑本地 .git/config 增加 [credential] helpe

让Team Foundation Server/TFS自动记住用户名密码解决方案

在使用Team Foundation Server(以下简称TFS) 的时候,在每次打开Visual Studio TFS时候,需要输入用户名和秘密,比较麻烦.现提供一种方法可以解决这个问题: 依次执行下面操作:打开控制面板-->凭据管理器-->windows凭据->输入IP和用户名.密码TFS就能自动登录了. 如下图所示:

vcenter web登陆时自动记住用户名密码的方法

1.windows vcenter环境修改以下文件 C:\ProgramData\VMware\vCenterServer\runtime\VMwareSTSService\webapps\websso\WEB-INF\view\unpentry.jsp 2.VCSA环境修改以下文件 /usr/lib/vmware-sso/vmware-sts/webapps/websso/WEB-INF/views/unpentry.jsp 3.在上述文件中找到以下这行代码,并将相应的值填进去 <input

基于localStorge开发登录模块的记住密码与自动登录

前沿||我是乐于分享,善于交流的鸟窝 先做写一篇关于登录模块中记住密码与自动登录的模块.鸟窝微信:jkxx123321 关于这个模块功能模块的由来,这是鸟大大的处女秀,为什么这么说呢?一天在群里,一个哥们说有私活,开发一个****模块,我那天手痒痒就和他聊了两句,然后,就决定给她做这个模块了,和他谈了谈交付时间,他说最迟两天,然后谈了谈加个,最后达成,500¥!!!这个模块其实第一天晚上我就开发出来了,那时我给他微信说,功能模块开发ok了,要不要远程查看一下,没问题的话就交了,一会他回我,好了就

(转)业务系统实现记住密码和自动登录功能

公司的业务系统本来是受域控的,用户不需要登录可以直接访问系统.当然,虽然不用人工登录,系统本身会读取电脑的用户名为登录标识,对系统操作权限和记录也是以电脑名.近段时间,由于系统要牵到云端,也就是不受域控了,那就需要每人手头上都有账号和密码了,这个和一般的业务系统没什么区别.但是由于用户之前的习惯是不用登录的,而且每天打开关闭的次数较多.OK,一般的系统登录都会有个记住密码的功能,但是,这还满足不了用户的需求,那么我们给用户增加多一个自动登录功能,类似QQ那样,我上次访问勾选了自动登录功能,然后再

SharedPreferences实现自动登录记住用户名密码

最近Android项目需要一个自动登录功能,完成之后,特总结一下,此功能依靠SharedPreferences进行实现. SharedPreferences简介 SharedPreferences也是一种轻型的数据存储方式,它的本质是基于XML文件存储key-value键值对数据,通常用来存储一些简单的配置信息.其存储位置在/data/data/<包名>/shared_prefs目录下.SharedPreferences对象本身只能获取数据而不支持存储和修改,存储修改是通过Editor对象实现

让网页背景图片 根据屏幕大小自动铺满

让网页背景图片 根据屏幕大小自动铺满:设置两层div,底层div当做背景使用,放置一张图片即可.<div id="background" style="position:absolute;z-index:-1;width:100%;height:100%;top:0px;left:0px;"><img src="1.jpg" width="100%" height="100%"/>&

ESP8266 HTTP 项目(2)HTTP网页修改WIFI连接,上电自动连接上次的WIFI。

网页 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-