请教怎么捕捉 VB IDE 中的代码

yrzzy 2011-08-26 02:21:18
正在编写一个VB编程的辅助软件,需要在运行后能够捕捉VB代码窗口的文本,查了一些资料,可以实现捕捉别的程序窗口的句柄、类名、标题,可以捕捉记事本窗口的文本内容,但无法捕捉 VB自己的 IDE 窗口的代码文本。请教大家,要怎样才能捕捉VB代码窗口的内容呢?用GetWindowText实现不了。
...全文
135 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
王二.麻子 2011-08-29
  • 打赏
  • 举报
回复
既然是vb的辅助程序,那就用vb ide的addin吧.
新建项目,选择addin项目类型.

然后就是debug.Print vbinstance.ActiveCodePane.CodeModule.Lines(1,10)
来显示ide里么的活动代码窗口的第一行开始的10行.

至于LS各位的上面那些,都太复杂了.

下面例子:
建立一个add-in工程,
系统自动添加了connect.dsr设计器和一个窗体frmaddin.frm
在窗体添加一个定时器,时间间隔随便,100ms吧.
添加一个textbox2,multline设置为true
在定时器里么写代码:


Private Sub Timer1_Timer()
With VBInstance
If Not (.ActiveCodePane Is Nothing) Then
'Text2.Text = .ActiveCodePane.Name
Text2.Text = .ActiveCodePane.CodeModule.Lines(1, .ActiveCodePane.CodeModule.CountOfLines)
End If
End With
End Sub

设置工程属性:调试,启动程序,启动程序设置成vb6.exe
运行自己的add-in例程,默认的工程名字是myaddin

运行,在新出现的vb6 ide里随便选择一个工程类型,
然后在外接程序管理器里么加载myaddin,出现frmaddin窗体
在新的ide里进入代码窗口..

在frmaddin的text2里出现来新vb6 ide的代码窗口的内容.

  • 打赏
  • 举报
回复
类名是“VbaWindow”


Vb程序的调试(2010-05-01 20:47:08)转载标签: it 分类: 技术文章
要做一个程序,写代码只是其中的一部分,更重要的部分是调试程序,如果你写的是一种玩具程序,基本上不会出什么错,也就没有调试的必要。不过,更多的情况是,程序运行正常,但结果却跟我们预期的不一样。这时候就要调试了。

一般我们都会跟着程序一行一行的走,看问题到底出在什么地方,程序运行中,各个变量的值是我们比较关心的东西。那怎么查看变量的值呢。

先设上断点,让程序在想看的地方停下来。鼠标指向想看的变量,它的值就会显示出来。还可以看到值的方法有,监视窗口,本地窗口,而且还可以修改变量的值。

还有一种方法是msgbox把变量的值弹出来,但是这样弹出来的值,只能看,不能改,也不能复制。不过我们可以在立即窗口把这个值输出来。

Debug.print 变量

这样就可以把变量的值输到立即窗口,但程序也不会中断,输出来的值也可以复制。另外,在立即窗口可以直接写代码。

但是立即窗口的内容却不会自动清除。

让程序清除立即窗口的内容

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long

Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long

Private Const WM_ACTIVATE As Long = &H6

'调用这个函数就可以清除立即窗口的内容

Dim ideHwnd&, debugFrmHwnd&

ideHwnd = FindWindow("wndclass_desked_gsk", vbNullString)

If ideHwnd > 0 Then

debugFrmHwnd = FindWindowEx(ideHwnd, ByVal 0&, "VbaWindow", vbNullString)

If debugFrmHwnd > 0 Then

PostMessage debugFrmHwnd, WM_ACTIVATE, 1, 0&

SendKeys "^{HOME}+^{END}^{BREAK}{ DEL}{F5}", False

End If

End If

这个方法是用来删除,改一下可以
SendKeys "^{HOME}+^{END}^{BREAK}^{c}", False

具体没实测过
  • 打赏
  • 举报
回复
有可能代码编辑窗口是直接TEXTOUT,GDI直接绘制出来的文字,因为有好多种色彩嘛
  • 打赏
  • 举报
回复
用ADD-IN的方法完全可以,具体到当前窗口代码可以直接复制,也可以处理别的模块类中函数,还可以读每一行,每一个函数等

具体原理和这个一样。
学好了就可以把你自已的工程有多少函数都列出来,哪些函数要修改一下或加些字或行上去都可以了。

VBProject:代码操作代码之常用语句
http://blog.sina.com.cn/s/blog_51f1e43301009716.html


http://www.accessoft.com/blog/article-show.asp?userid=3967&id=4927

VBA代码编程方法详解(一)
摘 要:VBA代码编程方法详解(第一部分)
正 文:


一、前言
本文所说的VBA代码编程,即通过编程方法创建、删除或编辑VBA工程部件、模块或代码程序对象,还可以通过VBA代码创建新的代码,以此可以实现VBA的二次开发。

VBA代码编程,也就是所谓的VBA可扩展性。要实现VBA扩展功能,或者说实现对VBA代码的编程,我们必须事先完成以下相关设置。

1.1 引用VBA扩展类库(Microsoft Visual Basic For Applications Extensibility 5.3)

在ACCESS 2003中扩展库文件为:VBE6EXT.OLB,你可以在VBE(Visual Basic Editor即VB编辑器)窗口,点菜单 [工具] — [引用],在 [引用对话框] 中钩,来手动引用该扩展类库,你也可以通过代码实现对其的引用。
worldy 2011-08-26
  • 打赏
  • 举报
回复
[Quote=引用楼主 yrzzy 的回复:]
正在编写一个VB编程的辅助软件,需要在运行后能够捕捉VB代码窗口的文本,查了一些资料,可以实现捕捉别的程序窗口的句柄、类名、标题,可以捕捉记事本窗口的文本内容,但无法捕捉 VB自己的 IDE 窗口的代码文本。请教大家,要怎样才能捕捉VB代码窗口的内容呢?用GetWindowText实现不了。
[/Quote]

创建一个外接程序,可以操作IDE的任何东西
yrzzy 2011-08-26
  • 打赏
  • 举报
回复
问题是不能判断当前窗口对应的是哪一个文件
贝隆 2011-08-26
  • 打赏
  • 举报
回复
对!使用文本框打开窗体文件,可以得到其源码,这个办法非常可行。
yrzzy 2011-08-26
  • 打赏
  • 举报
回复
Ctrl+A全选,Ctrl+C复制,这样会使VB代码窗口滚动,并且从别的窗口转回来,又要重来一遍
yrzzy 2011-08-26
  • 打赏
  • 举报
回复
换个思路也许能实现,因为VB的代码都是以文本的形式保存在工程文件中的,如果能通过VB IDE窗口句柄得到对应的工程文件路径,就可以后台打开文件,读取代码了。但怎样根据IDE窗口句柄得到工程文件路径呢?
贝隆 2011-08-26
  • 打赏
  • 举报
回复
只要文本,那么考虑一下向IDE发送Ctrl+C,复制它?这就取得了他的内容
yrzzy 2011-08-26
  • 打赏
  • 举报
回复
OCR,跟我想到一块了,我正是用OCR识别的思路,实现了捕捉代码窗口中的英文,但只是捕捉鼠标暂停时的那一小块,识别出鼠标所在处的单词。但与OCR又有点不同,采用的是绝对匹配的方式,基本不存在识别率的问题,目前已经能做到100%的准确。
我现在想实现的是,捕捉当前VB窗口中的所有代码,加以分析,在鼠标暂停捕捉单词后,首先在这些代码中检索,看这个单词是不是窗体中、过程中或自定义函数中声明的变量,还是某个控件的名称,如果不是,再检索数据库给出结果进行提示。
用OCR不能捕捉当前窗口的所有代码,就算捕捉稍大的一块进行识别,效率也是一个问题。只有直接捕捉文本才能实现了,敬请高手解答。
贝隆 2011-08-26
  • 打赏
  • 举报
回复
突然想到了OCR,可以试一试?
把IDE中的代码文本截屏载入一个OCR识别框中,识别

1,486

社区成员

发帖
与我相关
我的任务
社区描述
VB API
社区管理员
  • API
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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