我需要选择Windows自动化脚本语言.你推荐哪一个; AutoIt,AutoHotkey还是其他?
我读过" An AutoIt/AutoHotkey比较 ".有趣的历史,但没有推荐.搜索谷歌大约有312,000次点击,而AutoHotkey Windows对于482k AutoIt Windows.在Stack Overflow上有15个问题标记为autoit vs 18 autohotkey.
我对程序员的看法很感兴趣.您认为哪一个更易于使用,更易于部署且功能更强大?我已经将AutoHotkey用于个人用途,所以我最初的偏好就是这个.
如何在未注册的情况下在.NET C#应用程序中使用AutoitX(OCX/ActiveX库)?
我想用它创建一个应用程序,而无需使用管理员权限进行安装.
我在MSDN上找到了一些页面,如COM组件的免注册激活:关于为DLL文件创建清单文件的演练.我尝试过但没有成功.也许这是可能的,我错误地创造了它.不幸的是我丢失了XML文件,所以我不能在这里发布.
我还尝试在参考属性中设置隔离并启用互操作类型,但没有成功.
是否可以让AutoItX在C#中工作而无需注册?如果是这样,我该怎么办?
我认为它应该可以用作DLL而不是OCX,但我不知道在C#中如何使用它.
目前,我使用它像:
AutoItX3Lib.AutoItX3 autoit = new AutoItX3Lib.AutoItX3();
autoit.AutoItSetOption("WinTitleMatchMode", 2);
Run Code Online (Sandbox Code Playgroud)
所以,如果我要进行直接的DLL调用,我该怎么办?
我经常在工作中使用stata.我选择的文本编辑器是(g)vim.我一直在使用这里或这里提供的脚本将代码从vim发送到stata.这个功能是非常实用的,实际上是唯一阻止我完全切换到Linux的东西.脚本是用AutoIT编写的,所以我不能在linux中使用它们.它们也基本上独立于文本编辑器的选择,编写它们的人使用的是notepad ++.
基本上,这些脚本与我的vimrc中的几行一起允许我将选择或整个文件发送到正在运行的stata窗口(如果没有打开,则首先启动stata).
我正在寻找一个在linux中执行此操作的解决方案,但我不知道从哪里开始.在linux中有两个不同的stata版本,命令行的stata和xstata是gui版本.我需要使用gui版本,因为命令行版本的功能有限,所以屏幕/ tmux被排除在外.
如果这是微不足道的,我真的很抱歉错过了它,并非常感谢解决方案.我也无法找到我可以使用的vim的现有插件.如果没有,我愿意花一些时间来弄清楚如何实施解决方案.然而,正确方向的指针会非常有用.我对linux和编程一般比较陌生,但愿意学习.
关于工具:我不知道bash,但在某些时候我想要查看它.我已经在python中涉足了一点,所以这也没关系.如果此任务还有其他优势,请告诉我.
任何帮助是极大的赞赏.AutoIT脚本托管在网站上,但如果需要,我可以在此处发布我的Windows设置.
编辑
好的,经过评论中的一些争论,这里是我需要翻译的基本AutoIT脚本.(我更喜欢每次都不会覆盖系统剪贴板内容的解决方案.)
Edit2我想这就是脚本本质上的作用:它检查一个打开的stata窗口,选择它(或执行一个),将要执行的内容粘贴到一个临时文件中,切换到stata窗口,选择命令行使用ctrl-1(以及可能已经使用ctrl-a编写的任何内容),然后粘贴"tempfile"到命令行,然后命令行执行发送的代码.至少这是我理解它的方式.
最后评论
我不久前在bash中编写了一个解决方案,它在这里作为这个问题的先前版本的答案发布.
; Declare variables
Global $ini, $statapath, $statawin, $statacmd, $dofile, $clippause, $winpause, $keypause
; File locations
; Path to INI file
$ini = @ScriptDir & "\rundo.ini"
;; contents of ini file are the following
;[Stata]
;; Path to Stata executable
;statapath = "C:\Program Files\Stata11\StataSE.exe"
;; Title of Stata window
;statawin = "Stata/SE 11.2"
;; Keyboard shortcut for Stata command window
;statacmd = …Run Code Online (Sandbox Code Playgroud) 我看过这篇文章提到有一个AutoIt3 COM版本,有了它,我可以在Python中调用AutoIt函数.
我在AutoIt网站上找不到COM版本.它隐藏在某个地方吗?我怎么才能得到它?
设置环境:
我正在使用vb.net开发一个带有.NET Framework 4的Windows窗体应用程序.
我的目标:
Process.Start5 + 5 =我不想使用SendKeys作为方法.
经过研究,这个链接提供了一个良好的开端:
本教程(用C#编写)与我尝试使用vb.net非常相似:
有人可以提供一个关于如何接近这个的指针吗?我真的很感激.
所以我试图在给定区域的屏幕中间找到某种模式.我正在使用AutoItX库和PixelSearch方法.
它没有返回已发现的模式,但如果我调整矩形的绳索,0, 0则表明已找到该模式.
使用以下脚本:
public void MonsterScan()
{
if(SixStarMax() == true)
{
Console.WriteLine("Pattern found");
}
}
public bool SixStarMax()
{
Rectangle rect = new Rectangle(1980, 630, 1240, 180);
autoSumPoint = AutoItX.PixelSearch(rect, 0xF8F0E0); // 0xF8F0E0
autoSumPoint2 = AutoItX.PixelSearch(rect, 0xB7AD9F); // 0xB7AD9F
autoSumPoint3 = AutoItX.PixelSearch(rect, 0xCDC6B8); // 0xCDC6B8
autoSumPoint4 = AutoItX.PixelSearch(rect, 0x949084); // 0x949084
if (rect.Contains(autoSumPoint2) == true && rect.Contains(autoSumPoint2) == true && rect.Contains(autoSumPoint3) == true && rect.Contains(autoSumPoint4) == true)
{
AutoItX.MouseMove(autoSumPoint.X, …Run Code Online (Sandbox Code Playgroud) 我有一个带有GUI界面的程序,我需要手动进行初始设置.到目前为止,AutoIt对此非常有帮助,因为它提供了非常简单的工作方式,即使是复杂的访问GUI对象(下拉列表,悬停菜单等).
但是,为了进行程序设置,我最终需要的脚本需要传递一个大型数组/变量列表 - 有许多不同的设置需要更改.
我已经设置了逻辑来决定这些设置变量将使用Python脚本.现在我想弄清楚如何让Python和AutoIt相互通信.
使用Python从命令行调用自定义AutoIt脚本大多是不可能的,因为需要传递大量变量.不舒服.我可以尝试让Python编写一个AutoIt"密钥文件",然后AutoIt可以读取它以设置其初始变量,但我想确保我已经用尽所有Python的选项,以便首先直接使用AutoIt.
为此,我一直在尝试使用Python和win32com库来与AutoIt进行交互.事情似乎运作良好 - 只要我通过字符串标题而不是它们的(内存?)句柄来引用窗口/菜单/对象.这是有问题的,因为我的设置脚本可能并行运行,同时设置两个或多个单独的文件.如果是这种情况,在每个文件中同时打开一个带有标题字符串"打开文件..."的框可能会让事情变得混乱.
在AutoIt中解决这个问题的明显方法是使用相关对象的"句柄",我相信这些是某种内存地址,而不是字符串标题.我猜这些是内存地址作为AutoIt窗口信息工具,当指向特定的窗口/ GUI对象选项时,会将十六进制数字列为对象的句柄值.
AutoIt有一套函数可以获取窗口,菜单等的句柄.它们是在AutoIt COM dll中实现的,但是我无法让它们在Python中工作.handle函数返回Python中的unicode对象,而不是AutoIt中的十六进制字符串.我认为这就是为什么然后尝试在Python中使用这个"句柄"的函数不起作用的原因.
例:
autoIt = win32com.client.Dispatch("AutoItX3.Control")
windowHandle = autoIt.WinGetHandle(knownWindowTitle)
returnedWindowTitle = autoIt.WinGetTitle(windowHandle)
Run Code Online (Sandbox Code Playgroud)
通常,returnsWindowTitle和knownWindowTitle不匹配,因为returnsWindowTitle似乎总是为"0".帽子发生在这里?
除了使用win32com,命令行或使用AutoIt密钥文件之外,还有其他方法可以调用自定义AutoIt函数吗?
谢谢你的帮助.
编辑:我忘了提到unicode字符串实际上匹配我在AutoIt中打印出handle变量时得到的十六进制数字.
例如,在Python中,打印出来的句柄变量给我u'000C0326'.在AutoIt中它给我'0x000C0326'.
编辑:根据Mat的建议进行的一些试验:
In: autoIt = win32com.client.Dispatch("AutoItX3.Control")
In: mainWindowTitle = "Untitled"
In: mainWindowHandle = autoIt.WinGetHandle(mainWindowTitle)
In: mainWindowHandle
Out: u'000204AC'
In: testHandle = int(mainWindowHandle, 16)
In: testHandle
Out: 132268
In: autoIt.WinGetTitle(testHandle)
Out: u'0'
Run Code Online (Sandbox Code Playgroud)
编辑:我发现了窗口句柄对象的类型:它是一个Microsoft HWND对象.AutoIt具有可以将基本16号"转换"为HWND对象的功能(即,找到具有该基本16号码存储器/句柄/等的HWND对象).只是我的运气,他们没有将该功能放入AutoItX(COM dll).所以,如果我真的想用这个运行,我将不得不试图弄清楚如何返回基本16地址所指向的任何对象,然后以正确的方式将其传递给AutoItX?我可能听起来很困惑,因为现在这一切都不是我头脑中的清晰.
我维护Autoit项目用于swing应用程序的自动测试.那些测试现在有大约70个文件.在没有遵循一些"最佳实践"的情况下维护所有这些代码变得非常困难我试图创建尽可能多的函数(因为重复的代码)和常量(频繁的更改)芽似乎不够.
我一般有这种类型的功能:
AutoIt没有类=>没有继承=> OOP原则难以复制(:D清楚)
有人用AutoIt编写的大型应用程序有一些经验吗?我的观点是,AutoIt适用于<500行的脚本,对于这个大项目来说它不是一个好选择.
很遗憾,AutoIt没有一些有用的IDE.
autoit ×10
python ×3
automation ×2
.net ×1
autohotkey ×1
bash ×1
c# ×1
coding-style ×1
email ×1
ocx ×1
pywin32 ×1
registering ×1
scripting ×1
stata ×1
testing ×1
vb.net ×1
vim ×1
windows ×1