DELPHI盒子
!实时搜索: 盒子论坛 | 注册用户 | 修改信息 | 退出
检举帖 | 全文检索 | 关闭广告 | 捐赠
技术论坛
 用户名
 密  码
自动登陆(30天有效)
忘了密码
≡技术区≡
DELPHI技术
lazarus/fpc/Free Pascal
移动应用开发
Web应用开发
数据库专区
报表专区
网络通讯
开源项目
论坛精华贴
≡发布区≡
发布代码
发布控件
文档资料
经典工具
≡事务区≡
网站意见
盒子之家
招聘应聘
信息交换
论坛信息
最新加入: wjy13061029975
今日帖子: 3
在线用户: 4
导航: 论坛 -> 信息交换 斑竹:huadugaojian,sunyesy,huangjacky  
作者:
男 qewnja (伊亓) ★☆☆☆☆ -
普通会员
2019/11/19 10:09:56
标题:
求教大神!怎样用1号程序启动2号程序并让2号程序打开一个文本文件 浏览:2666
加入我的收藏
楼主: 各位大神好,我现在要做一个自动操作的程序来自动点击原来需要人工点击的一个测试程序上面的按钮,现在已经可以通过findwindow来获取测试程序的句柄了,按钮也能自动点击,现在问题是测试程序需要加载一个txt文件,我做的程序能点击 打开对话框 的按钮,但是没办法给 打开对话 框输入路径,请各位大神协助

已经可以自动点击<open code> 按钮呼出打开对话框,但是该怎样在对话框中自动输入路径啊
此帖子包含附件:
JPEG 图像
大小:80.8K
----------------------------------------------
-
作者:
男 qewnja (伊亓) ★☆☆☆☆ -
普通会员
2019/11/19 12:09:18
1楼: 哪位大神出手帮忙啊啊啊啊
----------------------------------------------
-
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2019/11/19 12:42:49
2楼: combobox是一个组合控件,我记得常规手段是无法自动填充内容的。因为你findwindow的句柄不是combobox里edit框的句柄。

兰州折腾这么久,就不看看手册啥的,看看这个软件是否能支持启动参数嘛?
比如:node.exe 1.txt这种调用方式呢?
----------------------------------------------
--
作者:
男 qewnja (伊亓) ★☆☆☆☆ -
普通会员
2019/11/19 13:02:15
3楼: 试过了,这个软件不支持启动参数的,查找三层句柄的方式句柄是找到了,但是还是无法填充内容,用的是setwindowtxt和postMessagea两个函数都没办法填充内容,没招了...
----------------------------------------------
-
作者:
男 letianwuji (大器晚成) ▲▲▲▲▲ -
普通会员
2019/11/19 13:54:38
4楼: 卧槽..楼主直接找地址汇编 赋值...得了。
----------------------------------------------
相信自己,若自己都不相信,那还有谁可信。
作者:
男 bahamut8348 (leonna) ★☆☆☆☆ -
普通会员
2019/11/19 15:27:24
5楼: 那就模拟键盘输入不就行了么。
弹出这个打开对话框的时候,地址然必然是有默认焦点的。
----------------------------------------------
--
作者:
男 helyna (Person) ★☆☆☆☆ -
普通会员
2019/11/19 20:50:53
6楼: s:='1111';
SendMessage(h,WM_SETTEXT,length(s)+1,DWORD(PChar(s)));

h为combobox框中的edit句柄

combobox是下拉框和文本框组成的,你必须获取到文本框的句柄。
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/11/19 22:47:54
7楼: procedure TForm1.Timer1Timer(Sender: TObject);
var
  str, strTrim: Widestring;

  i: Integer;
begin
  strTrim := copy(strScroll, 1, 1); // 获取第1个字符
  Delete(strScroll, 1, 1); // 将第1个字符删除
  strScroll := strScroll + strTrim; // 将原来第1个字符放到最后一位
  Form1.Caption := strScroll; // 显示出来。
  if h <> 0 then
  begin // 103 56 YY最终 第一个字符坐标
    PostMessage(h { 30017298 } , Winapi.Messages.WM_LBUTTONDOWN, 0,
      makelparam(x, y)); { 按下鼠标左键 }
    PostMessage(h { 30017298 } , Winapi.Messages.WM_LBUTTONUP, 0,
      makelparam(x, y)); { 抬起鼠标左键 }

    for i := 1 to Length(strScroll) do // 循环        29294696
    begin
      PostMessage(h, WM_IME_CHAR, Wparam(strScroll[i]), 0); // 发送字符串给窗口

    end;
    PostMessage(h { 30017298 } , WM_KEYDOWN, VK_RETURN, 0);
  end;
end;
目标程序
http://yydl.duowan.com/4/setup/YYSetup-8.54.0.0-zh-CN.exe
ui 用的QT 
代码作用 滚动 字符串  也就是名字啦。(YY限制后就没用过了)
也可以用来 在频道刷屏。
网上的代码
procedure SendText2Win(text: Widestring; Handle: HWnd);
var
  i: Integer;
  tmp: string;
begin
  if Handle = 0 then
    exit;
  for i := 1 to Length(text) do
  begin
    tmp := text[i];
    if ord(text[i]) > 255 then
    begin
      PostMessage(Handle, WM_IME_COMPOSITION, 0, $808);
      // SendMessage(handle,WM_IME_CHAR ,Ord(tmp[1]) shl 8 + Ord(tmp[2]),1);
      SendMessage(Handle, WM_IME_CHAR, ord(tmp[1]) - 160 + ord(tmp[2])
        - 160, 1);
      PostMessage(Handle, WM_IME_ENDCOMPOSITION, 0, 0);
    end
    else
      SendMessage(Handle, WM_CHAR, ord(tmp[1]), 0);
  end;
  SendMessage(Handle, EM_REPLACESEL, 0, 0);
  // EM_REPLACESEL
end;
我怀疑你没拿到 选择编辑框带下拉 的句柄,
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 qewnja (伊亓) ★☆☆☆☆ -
普通会员
2019/11/24 16:43:28
8楼: 感谢楼上几位大侠的建议和帮助,问题最终得到了解决,通过分层的方式找到了edit控件的句柄,然后再通过SendMessageW将路径写入对话框,不知为什么一开始用的是SendMessageA这个函数只能在对话框里面写入一个字符,用SendMessageW就彻底没问题了,程序能正常跑起来了。

为了让程序更人性化,更快更可靠,我决定再深入的研究一下,在这个窗体中有一个button类的控件,如图所示,这个button没有caption,所以暂时我还没办法获取它的句柄,这个软件的一切状态好像都是通过更换这个button的背景图片来显示的,如图所示,问题来了,怎样才能通过获取button所加载的图片来判断程序处于什么状态呢?
此帖子包含附件:
PNG 图像
大小:124.5K
----------------------------------------------
-
作者:
男 qewnja (伊亓) ★☆☆☆☆ -
普通会员
2019/11/24 16:46:25
9楼: 程序正在工作的的时候
此帖子包含附件:
PNG 图像
大小:91.6K
----------------------------------------------
-
作者:
男 qewnja (伊亓) ★☆☆☆☆ -
普通会员
2019/11/24 16:47:00
10楼: 程序出错的时候
此帖子包含附件:
PNG 图像
大小:96.8K
----------------------------------------------
-
作者:
男 qewnja (伊亓) ★☆☆☆☆ -
普通会员
2019/11/24 16:47:23
11楼: 一切都正常的时候
此帖子包含附件:
PNG 图像
大小:109.0K
----------------------------------------------
-
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/11/24 16:57:18
12楼:


绿
1
屏幕取色
2
截图 识别文字
。。
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 qewnja (伊亓) ★☆☆☆☆ -
普通会员
2019/11/24 17:07:26
13楼: to 楼上
有没有什么比较简单的办法,比如通过FindWindowEx这样的API函数就能实现的?太麻烦的办法容易出错,适得其反
----------------------------------------------
-
作者:
男 helyna (Person) ★☆☆☆☆ -
普通会员
2019/11/25 16:59:42
14楼: 你确定他加载的是图片吗?还是只是文本?
----------------------------------------------
-
作者:
男 hbug (hbug) ★☆☆☆☆ -
普通会员
2019/11/25 17:11:14
15楼: 如果是图片,用ocr方式识别图片也是不错的。
----------------------------------------------
专业提供人力资源软件、指纹考勤软件、POS进销存软件、酒店餐饮软件
http://www.winsoftcn.com
作者:
男 xlonger (xlonger) ★☆☆☆☆ -
普通会员
2019/11/25 18:13:54
16楼: 没有Caption 就不能取得句柄了吗?
----------------------------------------------
我打的是酱油,而不是别的什么油。
我灌的是口水,而不是别的什么水。
我聊的折腾不是那个不折腾的折腾。
我说的阿娇不是那个邓玉娇的阿娇。
3个代表,6个为什么,9个肠胃炎。
D性强的领导干部都不喜欢热比娅。
我特别要讲的是,屁民网黄色论坛是我经常上网必选的 网站之一
作者:
男 keymark (嬲) ▲▲▲△△ -
普通会员
2019/11/25 18:57:06
17楼: 其实吧 拿memo的内容也行的。按此在新窗口浏览图片
----------------------------------------------
[alias]  co = clone --recurse-submodules  up = submodule update --init --recursiveupd = pullinfo = statusrest = reset --hard懒鬼提速https://www.cctry.com/>http://qalculate.github.io/downloads.htmlhttps://www.cctry.com/
作者:
男 qewnja (伊亓) ★☆☆☆☆ -
普通会员
2019/11/28 9:26:41
18楼: To 14楼,确定是图片,我用资源编辑软件看了,图中显示的Fail PASS都是图片
To 15楼,OCR挺复杂的吧....
To 16楼,我不知怎样获取没有Caption的句柄,有个遍历控件的函数不会用....
To 17楼,我目前打算是拿MEMO的内容,也是得不到句柄,遍历函数不会用...

几位大侠给个例子参考参考呗,一个函数代码就行了
----------------------------------------------
-
作者:
男 helyna (Person) ★☆☆☆☆ -
普通会员
2019/11/28 11:20:01
19楼: var
  str:string;
  Buffer:array of Char;
  hDlg,hReportEdit:THandle;
begin
  hDlg:=FindWindow(nil,' FET-Pro430  ( FET MSP430 Flash Programmer)  -  Elprotronic Inc.');
  if hDlg <> 0 then
  begin
    hReportEdit:=GetDlgItem(hDlg,1026);
    SetLength(Buffer,1024);
    SendMessage(hReportEdit,WM_GETTEXT,Length(Buffer),DWORD(@Buffer[0]));
    str:=StrPas(PChar(@Buffer[0]));
    ShowMessage(str);
  end;
end;
----------------------------------------------
-
作者:
男 qewnja (伊亓) ★☆☆☆☆ -
普通会员
2019/11/28 11:57:03
20楼: To 19楼,GetDlgItem(hDlg,1026); 这里面的1026是啥?我运行了一下获取不到句柄,Finwindow可以找到窗体句柄。我用spy++查看,显示状态的控件是个edit类的
----------------------------------------------
-
作者:
男 qewnja (伊亓) ★☆☆☆☆ -
普通会员
2019/11/28 12:34:14
21楼: To 19楼 已搞定,GetDlgItem() 函数真是个神器啊,多谢19楼大侠,多谢多谢!
----------------------------------------------
-
作者:
男 nevergrief (孤独骑士) ★☆☆☆☆ -
盒子活跃会员
2019/11/28 21:41:07
22楼: 那 1026 到底是什么意思呢?
----------------------------------------------
只有偏执狂才能生存!
作者:
男 helyna (Person) ★☆☆☆☆ -
普通会员
2019/11/29 10:51:57
23楼: 1026是那个edit的控件ID,会变不会变具体我也不知道。

遍历所有控件,以控件的长宽为条件过滤,应该也能找到句柄。
----------------------------------------------
-
作者:
男 qewnja (伊亓) ★☆☆☆☆ -
普通会员
2019/11/30 11:43:42
24楼: To 22楼 正如23楼兄弟所说,是控件ID
TO 23楼 这个控件ID应该是不会变的,我用资源编辑器直接查看的,并且每一次启动程序都能正常运行,可见这个ID是固定的,另外您说“以控件的长宽为条件过滤,应该也能找到句柄。”有没有可参考代码?那过滤条件能不能用加载的图片呢?资源编辑器可以看到所加载图片的ID号
----------------------------------------------
-
信息
登陆以后才能回复
Copyright © 2CCC.Com 盒子论坛 v3.0.1 版权所有 页面执行142.5781毫秒 RSS