ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
楼主: 838833928

[已解决] (有偿)在不关闭TXT文档的情况下,TXT文档显示单元格内容

[复制链接]

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-19 14:35 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
morpheus126 发表于 2024-4-19 12:00
如果是给人看的,那就不要用TXT,用其他控件就可以啦
如果是给其他软件读取的,那就不用打开TXT

不用TXT,还可以用什么????

TA的精华主题

TA的得分主题

发表于 2024-4-19 14:41 | 显示全部楼层
本帖最后由 perfect131 于 2024-4-19 15:16 编辑
838833928 发表于 2024-4-19 14:30
其他软件只能用句柄的方式获取TXT内容

用进程方式 获取句柄也可以
具体步骤就是 关闭文件 写入内容 打开文件 激活txt


4.gif

TA的精华主题

TA的得分主题

发表于 2024-4-19 14:52 来自手机 | 显示全部楼层
本帖最后由 wanghan519 于 2024-4-19 15:40 编辑

用gvim也行,有个com对象vim.application可以操作打开的文本

但是,既然你提到按键精灵,就在想如果要同步表格和记事本内容,不如直接ahk,通过com对象获取表格内容,重写记事本内容,总感觉这需求怪怪的。。。
动画.gif

TA的精华主题

TA的得分主题

发表于 2024-4-19 15:35 | 显示全部楼层
本帖最后由 wanghan519 于 2024-4-19 15:36 编辑

用ahk试了一下,这东西确实适合这种控制不同窗口的需求,通过com对象绑定sheet1的change事件,触发后改写记事本Edit1控件的内容,字数多了肯定有bug,但意思到了,ahk真香

  1. #Requires AutoHotkey v2.0
  2. #SingleInstance Force
  3. xl := ComObjActive("excel.application")
  4. sht := xl.ActiveSheet
  5. ComObjConnect(sht, "SHT_")
  6. Persistent
  7. SHT_Change(x, y){
  8.     WinActivate("ahk_exe notepad.exe")
  9.     WinWaitActive("ahk_exe notepad.exe")
  10.     ControlSetText(x.Value2, "Edit1")
  11. }
复制代码



动画.gif

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-19 15:48 | 显示全部楼层
perfect131 发表于 2024-4-19 14:41
用进程方式 获取句柄也可以
具体步骤就是 关闭文件 写入内容 打开文件 激活txt

晚上回家试一试,现在是远程回复

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-19 17:11 | 显示全部楼层
wanghan519 发表于 2024-4-19 15:35
用ahk试了一下,这东西确实适合这种控制不同窗口的需求,通过com对象绑定sheet1的change事件,触发后改写记 ...

大师,可以用VBA完成吗,最多10个字符

TA的精华主题

TA的得分主题

发表于 2024-4-19 17:30 来自手机 | 显示全部楼层
838833928 发表于 2024-4-19 17:11
大师,可以用VBA完成吗,最多10个字符

不敢当。。。
vba不会这个。。。
ahk可以看做vb6.0的64位升级版,包装了大量win api,提供了很多方便的操作窗口控件快捷键的方法,对com对象的支持好,可以编译成小于1M的exe,用起来很爽
要不就把上面这几行代码打包成exe,vba里用shell启动一下,假装是vba代码。。。

TA的精华主题

TA的得分主题

发表于 2024-4-19 17:48 来自手机 | 显示全部楼层
838833928 发表于 2024-4-19 17:11
大师,可以用VBA完成吗,最多10个字符

问了一下ai,据说vba获取窗口句柄之后,可以用FindWindowEx获取Edit1控件的句柄,然后sendmessage使用settext方法改变记事本Edit1控件的内容,所以,我相信vba可以实现,但貌似不太方便,ahk相当于包装好了这些方法

TA的精华主题

TA的得分主题

 楼主| 发表于 2024-4-20 01:16 | 显示全部楼层
wanghan519 发表于 2024-4-19 17:48
问了一下ai,据说vba获取窗口句柄之后,可以用FindWindowEx获取Edit1控件的句柄,然后sendmessage使用set ...

可以写出代码不                        

TA的精华主题

TA的得分主题

发表于 2024-4-20 11:34 | 显示全部楼层
  1. Declare PtrSafe Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
  2. Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWndParent As LongPtr, ByVal hWndChildAfter As LongPtr, ByVal lpClassName As String, ByVal lpWindowName As String) As LongPtr
  3. Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As LongPtr, ByVal Msg As Long, ByVal wParam As LongPtr, lParam As Any) As LongPtr

  4. Sub settxt()
  5.     hWndNotepad = FindWindow("Notepad", vbNullString)
  6.     hWndEdit = FindWindowEx(hWndNotepad, 0, "Edit", vbNullString)
  7.     SendMessage hWndEdit, &HC, 0, ByVal "asdf"
  8. End Sub
复制代码
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-3 10:39 , Processed in 0.040924 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表