查看完整版本: AutoIt v3 FAQ By一点笔记

似水年华 2007-5-2 01:03 PM

AutoIt v3 FAQ By一点笔记

转自 [url=http://my.opera.com/z8519312/blog/show.dml/698300][color=#0000ff]http://my.opera.com/z8519312/blog/show.dml/698300[/color][/url]
  作为论坛里的一个资深潜水员,我注意到许多被初学者反复询问的问题都很容易找到答案。这些问题大多不会被及时回答,原因就是提问者没有事先在论坛搜索答案,因此相同的答案往往会在不同的帖子里出现很多次。或者说,作出这些回答已经令人厌烦、生气,因为大家之前已经看到同样的问题被问了无数遍。所以我在这里贴出许多被新手反复提及的问题的答案,我会给所有的问题编号并列出一个方便查找的索引。
[b]Q1. 我怎样才能DEBUG我的脚本?[/b]
  [b]A1.[/b] 这个问题有无数个答案,不过最有效的还是从SciTE4AutoIt3开始,大多数人都使用这个软件来编写脚本。在debug方面SciTE有下面几条优势:
[list=1][*]Syntax会即时高亮不符合语法的语句,这会让用户更容易发现脚本里的错误[*]内建在工具菜单里的Syntax可以一次检测脚本里的全部错误[*]内置的代码清理程序可以让代码变得更整齐、更具有可读性,它同时也能修正错误拼写的函数和变量[/list]  [b]A2.[/b] 你也能通过添加下面的代码来在任何一台电脑上debug你的脚本:

[indent][color=#0000ff]Func[/color] dbg[color=#ff0000]([/color][color=#5a5a5a]$msg[/color][color=#ff0000])
[/color]    [i][color=#000080]DllCall[/color][/i][color=#ff0000]([/color][color=#008080]"kernel32.dll"[/color], [color=#008080]"none"[/color], [color=#008080]"OutputDebugString"[/color], [color=#008080]"str"[/color], [color=#5a5a5a]$msg[/color][color=#ff0000])
[/color][color=#0000ff]EndFunc[/color]
然后,你可以在需要debug的地方加上下面的代码:
[/indent][indent]dbg[color=#ff0000]([/color][color=#008080]"The value of Variable 1 at this time is "[/color] & [color=#5a5a5a]$var1[/color][/indent]  这个方法对用户来说更加透明,同时也只对DebugView from SysInternals之类的程序可见。这个方法在那些没有安装SciTE的机器上更具有优势。
[b]Q2.我怎样才能打开那些非exe格式的文件[.txt, .msi, .pdf, .jpg 之类]? [或] 我怎样才能用默认的浏览器打开网页?[/b]
  [b]A1.[/b] 这也就是为什么我们创建ShellExecute函数.下面有一个例子:
[indent]
ShellExecute[color=#ff0000]([/color][color=#008080]"C:\autoitscripts\test.au3"[/color], [color=#008080]""[/color], [color=#008080]""[/color], [color=#008080]"edit"[/color], [color=#800000]@SW_MAXIMIZE[/color][color=#ff0000])[/color]
[/indent]  你也能像这样打开一个网址:
[indent]ShellExecute[color=#ff0000]([/color][color=#008080]"http://www.autoitscript.com/forum"[/color][color=#ff0000])[/color]
[/indent]  如果文件的右键菜单里有打印选项,你就可以这样用AutoIt打印文件:
[indent]ShellExecute[color=#ff0000]([/color][color=#008080]"C:\boot.ini"[/color], [color=#008080]""[/color], [color=#008080]""[/color], [color=#008080]"print"[/color][color=#ff0000])[/color]
[/indent]  如果你希望暂停脚本直到程序结束,你可以使用ShellExecuteWait函数,它们的运行参数是相同的.
[b]Q3. 我怎样才能让脚本只运行一个进程?
[/b]  [b]A1.[/b] 你可以使用_Singleton函数来阻止脚本的副本运行,下面有一个实例:
[indent]#include <Misc.au3>
_Singleton[color=#ff0000]([/color][color=#008080]"TheNameOfMyScript"[/color][color=#ff0000])[/color]
[/indent]  这样如果脚本检测到自己已经启动就会立即退出,如果你只是想简单地知道脚本是否已经运行,你可以使用下面的代码:
[indent]#include <Misc.au3>
[color=#0000ff]If[/color] _Singleton[color=#ff0000]([/color][color=#008080]"MyScriptName"[/color], [color=#004040]1[/color][color=#ff0000])[/color] [color=#0000ff]Then
[/color]    [color=#009933]; We know the script is already running. Let the user know.
[/color]    [i][color=#000080]MsgBox[/color][/i][color=#ff0000]([/color][color=#004040]0[/color], [color=#008080]"Script Name"[/color], [color=#008080]"This script is already running. Using multiple copies of this script at the same breaks the [(UltimaCoder)] License!"[/color][color=#ff0000])
[/color]    [color=#0000ff]Exit
Endif[/color]
[/indent][b]Q4. 我怎样才能让脚本作为系统服务启动?[/b]
  这也是一个有多个答案的问题
  [b]A1.[/b]如果你只想在自己的电脑上安装服务,最简单的方法是使用[url=http://www.pirmasoft.com/runassvc.php][color=#0000ff]Pirmasoft RunAsSvc[/color][/url].这个程序可以方便地添加/删除系统服务.
  [b]A2.[/b]如果你想让服务能在任何电脑上都能安装,你可以使用[url=http://www.electrasoft.com/srvany/srvany.exe][color=#0000ff]SRVANY.EXE[/color][/url]和[url=http://www.autoitscript.com/forum/index.php?showtopic=6487][color=#0000ff]ServiceControl.au3[/color][/url],像这样安装服务:
[indent]#include [color=#008080]"ServiceControl.au3"
[/color][color=#5a5a5a]$servicename[/color] = [color=#008080]"MyServiceName"
[/color]_CreateService[color=#ff0000]([/color][color=#008080]""[/color], [color=#5a5a5a]$servicename[/color], [color=#008080]"My AutoIt Script"[/color], [color=#008080]"C:\Path_to_srvany.exe"[/color], [color=#008080]"LocalSystem"[/color], [color=#008080]""[/color], 0x110[color=#ff0000])
[/color][i][color=#000080]RegWrite[/color][/i][color=#ff0000]([/color][color=#008080]"HKLM\SYSTEM\CurrentControlSet\Services\"[/color] & [color=#5a5a5a]$servicename[/color] & [color=#008080]"\Parameters"[/color], [color=#008080]"Application"[/color], [color=#008080]"REG_SZ"[/color], [color=#800000]@ScriptFullPath[/color][color=#ff0000])[/color]
[/indent]  或者使用下面的代码删除服务:
[indent]#include [color=#008080]"ServiceControl.au3"
[/color][color=#5a5a5a]$servicename[/color] = [color=#008080]"MyServiceName"
[/color]_DeleteService[color=#ff0000]([/color][color=#008080]""[/color], [color=#5a5a5a]$servicename[/color][color=#ff0000])[/color]
[/indent][b]Q5. 我怎样启动/停止服务?[/b]
  [b]A1.[/b]有两个函数集能帮助你控制服务:
[indent]SumTingWong制作的[url=http://www.autoitscript.com/forum/index.php?showtopic=6487][color=#0000ff]ServiceControl.au3[/color][/url] ,包含的函数有:
[list=1][*]_StartService()[*]_StopService()[*]_ServiceExists()[*]_ServiceRunning()[*]_CreateService()[*]_DeleteService()[/list]CatchFish制作的[url=http://www.autoitscript.com/forum/index.php?showtopic=22165][color=#0000ff]_NTServices.au3[/color][/url],包含的函数有:
[list=1][*]_ServiceStart()[*]_ServiceStop()[*]_ServiceStatus()[*]_ServicePause()[/list][/indent][b]Q6. 我怎样在复制文件时显示进度条?[/b]
  [b]A1[/b].函数集[url=http://www.autoitscript.com/forum/index.php?s=5e391b3b11faacf068f4fca7a78b5461&act=attach&type=post&id=11570][color=#0000ff]ShellFileOperation.au3[/color][/url]能完成这个操作:
[b]Q7. 我怎样让快捷键只在自己的GUI起作用?[/b]
  [b]A1.[/b] 在更好的方法出现之前,最简单的方法是使用下面的代码:
[indent]#include <GuiConstants.au3>
[i][color=#000080]HotKeySet[/color][/i][color=#ff0000]([/color][color=#008080]"{ENTER}"[/color], [color=#008080]"catchguikey"[/color][color=#ff0000])
[/color][color=#5a5a5a]$gui[/color] = [i][color=#000080]GuiCreate[/color][/i][color=#ff0000]([/color][color=#008080]"Hotkey Test"[/color][color=#ff0000])
[/color][i][color=#000080]GuiCtrlCreateLabel[/color][/i][color=#ff0000]([/color][color=#008080]"Press Enter"[/color], [color=#004040]0[/color], [color=#004040]0[/color][color=#ff0000])
[/color][i][color=#000080]GuiSetState[/color][/i][color=#ff0000]()
[/color][color=#0000ff]While[/color] [color=#004040]1
[/color]    [color=#5a5a5a]$msg[/color] = [i][color=#000080]GUIGetMsg[/color][/i][color=#ff0000]()
[/color]    [color=#0000ff]If[/color] [color=#5a5a5a]$msg[/color] = [color=#5a5a5a]$GUI_EVENT_CLOSE[/color] [color=#0000ff]Then[/color] [color=#0000ff]ExitLoop
Wend

Func[/color] catchguikey[color=#ff0000]()
[/color]    [color=#0000ff]Local[/color] [color=#5a5a5a]$opt[/color] = [i][color=#000080]Opt[/color][/i][color=#ff0000]([/color][color=#008080]"WinTitleMatchMode"[/color], [color=#004040]4[/color][color=#ff0000])
[/color]    [color=#0000ff]If[/color] [i][color=#000080]WinGetHandle[/color][/i][color=#ff0000]([/color][color=#008080]"active"[/color][color=#ff0000])[/color] = [color=#5a5a5a]$gui[/color] [color=#0000ff]Then
[/color]        [color=#0000ff]If[/color] @HotKeyPressed = [color=#008080]"{ENTER}"[/color] [color=#0000ff]Then
[/color]            [color=#009933];Do something here
[/color]            [i][color=#000080]ToolTip[/color][/i][color=#ff0000]([/color][color=#008080]"Key Pressed"[/color][color=#ff0000])
[/color]            [i][color=#000080]Sleep[/color][/i][color=#ff0000]([/color][color=#004040]1000[/color][color=#ff0000])
[/color]            [i][color=#000080]ToolTip[/color][/i][color=#ff0000]([/color][color=#008080]""[/color][color=#ff0000])
[/color]        [color=#0000ff]EndIf
[/color]    [color=#0000ff]Else
[/color]        [i][color=#000080]HotKeySet[/color][/i][color=#ff0000]([/color]@HotKeyPressed[color=#ff0000])
[/color]        [i][color=#000080]Send[/color][/i][color=#ff0000]([/color]@HotKeyPressed[color=#ff0000])
[/color]        [i][color=#000080]HotKeySet[/color][/i][color=#ff0000]([/color]@HotKeyPressed, [color=#008080]"catchguikey"[/color][color=#ff0000])
[/color]    [color=#0000ff]EndIf
[/color]    [i][color=#000080]Opt[/color][/i][color=#ff0000]([/color][color=#008080]"WinTitleMatchMode"[/color], [color=#5a5a5a]$opt[/color][color=#ff0000])
[/color][color=#0000ff]EndFunc[/color]
[/indent][b]Q8. 我怎样检测键盘是否按下了指定的键?[/b]
  [b]A1.[/b] 你可以使用_IsPressed()函数来检测按键. 你可以在帮助文件里找到这个函数:User Defined Functions -> Misc Management -> _IsPressed. 下面的例子会显示如何在K键按下时单击鼠标左键:
[indent]#Include <Misc.au3>
[color=#5a5a5a]$pressed[/color] = [color=#004040]0
[/color][color=#0000ff]While[/color] [color=#004040]1
[/color]    [color=#0000ff]If[/color] _IsPressed[color=#ff0000]([/color][color=#008080]"4B"[/color][color=#ff0000])[/color] [color=#0000ff]Then
[/color]        [color=#0000ff]If[/color] [color=#0000ff]Not[/color] [color=#5a5a5a]$pressed[/color] [color=#0000ff]Then
[/color]            [i][color=#000080]ToolTip[/color][/i][color=#ff0000]([/color][color=#008080]"K Key being held down"[/color][color=#ff0000])
[/color]            [i][color=#000080]MouseDown[/color][/i][color=#ff0000]([/color][color=#008080]"left"[/color][color=#ff0000])
[/color]            [color=#5a5a5a]$pressed[/color] = [color=#004040]1
[/color]        [color=#0000ff]EndIf
[/color]    [color=#0000ff]Else
[/color]        [color=#0000ff]If[/color] [color=#5a5a5a]$pressed[/color] [color=#0000ff]Then
[/color]            [i][color=#000080]ToolTip[/color][/i][color=#ff0000]([/color][color=#008080]""[/color][color=#ff0000])
[/color]            [i][color=#000080]MouseUp[/color][/i][color=#ff0000]([/color][color=#008080]"left"[/color][color=#ff0000])
[/color]            [color=#5a5a5a]$pressed[/color] = [color=#004040]0
[/color]        [color=#0000ff]EndIf
[/color]    [color=#0000ff]EndIf
[/color]    [i][color=#000080]Sleep[/color][/i][color=#ff0000]([/color][color=#004040]250[/color][color=#ff0000])
[/color][color=#0000ff]WEnd[/color]
[/indent][b]Q9. 我怎样在远程计算机上运行脚本?[/b]
  [b]A1.[/b] 这个问题的答案由你在局域网的经验决定,如果目标系统是Windows 2000或Windows XP而且你拥有管理员权限,你就可以使用下面的两个程序:
[list][*]SysInternals的[url=http://www.sysinternals.com/Utilities/PsExec.html][color=#0000ff]PsExec[/color][/url][*]BeyondLogic的[url=http://www.beyondlogic.org/solutions/remoteprocess/BeyondExec.htm][color=#0000ff]BeyondExec[/color][/url][/list]  这两个程序都允许在远程计算机上运行任何程序,甚至可以把你的脚本复制到目标系统上.不过Windows XP Home Edition 上不能运行这个两个程序.
[b]Q10. 我怎样制作一个拥有可选参数的自定义函数?[/b]
  [b]A1.[/b] 你可以通过在声明函数时给参数指定一个默认值来做到. 下面是一个例子:
[indent][color=#0000ff]Func[/color] testme[color=#ff0000]([/color][color=#5a5a5a]$param1[/color], [color=#5a5a5a]$param2[/color] = [color=#008080]"nothing"[/color], [color=#5a5a5a]$param3[/color] = [color=#004040]5[/color][color=#ff0000])
[/color]    [i][color=#000080]MsgBox[/color][/i][color=#ff0000]([/color][color=#004040]0[/color], [color=#008080]""[/color], [color=#008080]"Parameter one is required. The value of Parameter 1 is "[/color] & [color=#5a5a5a]$param1[/color] & [color=#800000]@CRLF[/color] & [color=#008080]"Parameter 2 is optional. The value of Parameter 2 is "[/color] & [color=#5a5a5a]$param2[/color] & [color=#800000]@CRLF[/color] & [color=#008080]"Parameter 3 is optional. The value of Parameter 3 is "[/color] & [color=#5a5a5a]$param3[/color][color=#ff0000])
[/color][color=#0000ff]EndFunc[/color]
[/indent]  如果调用testme()时只使用了一个参数[比如testme("test")]就会输出:
[indent][color=#aaaaaa]Parameter one is required. The value of Parameter 1 is test
Parameter 2 is optional. The value of Parameter 2 is nothing
Parameter 3 is optional. The value of Parameter 3 is 5[/color]
[/indent]  不过,如果调用函数时使用了超过2个参数,比如testme("test", "something"), 就会输出:
[indent][color=#aaaaaa]Parameter one is required. The value of Parameter 1 is test
Parameter 2 is optional. The value of Parameter 2 is something
Parameter 3 is optional. The value of Parameter 3 is 5[/color]
[/indent]
[b]Q11. 我怎样让系统启动时自动运行脚本?[/b]
  [b]A1.[/b]你可以使用下面的语句来做到:
[indent][i][color=#000080]RegWrite[/color][/i][color=#ff0000]([/color][color=#008080]"HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Run"[/color], [color=#008080]"MyProgramName"[/color], [color=#008080]"REG_SZ"[/color], [color=#800000]@ScriptFullPath[/color][color=#ff0000])[/color]
[/indent]  或者:
[indent][i][color=#000080]FileCreateShortcut[/color][/i][color=#ff0000]([/color][color=#800000]@ScriptFullPath[/color], [color=#800000]@StartupCommonDir[/color] & [color=#008080]"\MyProgramName.lnk"[/color][color=#ff0000])[/color]
[/indent]
[b]Q12. 我怎样让脚本删除自己?
[/b]  [b]A1.[/b] 下面的代码可以删除一个正在运行的脚本.
[indent][color=#0000ff]Func[/color] _SelfDelete[color=#ff0000]([/color][color=#5a5a5a]$iDelay[/color] = [color=#004040]0[/color][color=#ff0000])
[/color]    [color=#0000ff]Local[/color] [color=#5a5a5a]$sCmdFile
[/color]    [i][color=#000080]FileDelete[/color][/i][color=#ff0000]([/color][color=#800000]@TempDir[/color] & [color=#008080]"\scratch.bat"[/color][color=#ff0000])
[/color]    [color=#5a5a5a]$sCmdFile[/color] = [color=#008080]'ping -n '[/color] & [color=#5a5a5a]$iDelay[/color] & [color=#008080]'127.0.0.1 > nul'[/color] & [color=#800000]@CRLF[/color] _
            & [color=#008080]':loop'[/color] & [color=#800000]@CRLF[/color] _
            & [color=#008080]'del "'[/color] & [color=#800000]@ScriptFullPath[/color] & [color=#008080]'"'[/color] & [color=#800000]@CRLF[/color] _
            & [color=#008080]'if exist "'[/color] & [color=#800000]@ScriptFullPath[/color] & [color=#008080]'" goto loop'[/color] & [color=#800000]@CRLF[/color] _
            & [color=#008080]'del '[/color] & [color=#800000]@TempDir[/color] & [color=#008080]'\scratch.bat'
[/color]    [i][color=#000080]FileWrite[/color][/i][color=#ff0000]([/color][color=#800000]@TempDir[/color] & [color=#008080]"\scratch.bat"[/color], [color=#5a5a5a]$sCmdFile[/color][color=#ff0000])
[/color]    [i][color=#000080]Run[/color][/i][color=#ff0000]([/color][color=#800000]@TempDir[/color] & [color=#008080]"\scratch.bat"[/color], [color=#800000]@TempDir[/color], [color=#800000]@SW_HIDE[/color][color=#ff0000])
[/color][color=#0000ff]EndFunc[/color]
[/indent][b]Q13. 我怎样在GUI里建立一个可点击的超链接?[/b]
  [b]A1.[/b] Gafrost在这方面做了很大努力,并提供了一个[url=http://www.autoitscript.com/forum/index.php?showtopic=23111&st=0][color=#0000ff]UDF[/color][/url]来帮助完成这个功能.
[b]Q14. 我怎样修改屏幕分辨率/刷新频率/颜色深度?
[/b]  [b]A1.[/b] [url=http://www.autoitscript.com/forum/index.php?showtopic=20121][color=#0000ff]ChangeResolution.au3[/color][/url]可以完成这些设置.
[b]Q15. 在多显示器情况下我怎样得到屏幕分辨率?[/b]
  [b]A1.[/b] 下面的代码可以得到屏幕的总分辨率:
[indent][color=#0000ff]Global[/color] [color=#0000ff]Const[/color] [color=#5a5a5a]$SM_VIRTUALWIDTH[/color] = [color=#004040]78
[/color][color=#0000ff]Global[/color] [color=#0000ff]Const[/color] [color=#5a5a5a]$SM_VIRTUALHEIGHT[/color] = [color=#004040]79
[/color][color=#5a5a5a]$VirtualDesktopWidth[/color] = [i][color=#000080]DLLCall[/color][/i][color=#ff0000]([/color][color=#008080]"user32.dll"[/color], [color=#008080]"int"[/color], [color=#008080]"GetSystemMetrics"[/color], [color=#008080]"int"[/color], [color=#5a5a5a]$SM_VIRTUALWIDTH[/color][color=#ff0000])
[/color][color=#5a5a5a]$VirtualDesktopWidth[/color] = [color=#5a5a5a]$VirtualDesktopWidth[/color][color=#ff0000][[/color][color=#004040]0[/color][color=#ff0000]]
[/color][color=#5a5a5a]$VirtualDesktopHeight[/color] = [i][color=#000080]DLLCall[/color][/i][color=#ff0000]([/color][color=#008080]"user32.dll"[/color], [color=#008080]"int"[/color], [color=#008080]"GetSystemMetrics"[/color], [color=#008080]"int"[/color], [color=#5a5a5a]$SM_VIRTUALHEIGHT[/color][color=#ff0000])
[/color][color=#5a5a5a]$VirtualDesktopHeight[/color] = [color=#5a5a5a]$VirtualDesktopHeight[/color][color=#ff0000][[/color][color=#004040]0[/color][color=#ff0000]][/color]
[/indent][b]Q16. 我怎样注册一个文件类型[或者] 我怎样才能让我的程序变为一个文件类型的默认打开方式?
[/b]  [b]A1.[/b] 文件注册对那些新手来说的确有些困难. 第一件要做的事就是要让你的脚本能接受命令行调用. 下面是一段示例代码:
[indent][color=#009933];$cmdline[0] is the number of parameters passed
[/color][color=#0000ff]If[/color] [color=#5a5a5a]$cmdline[/color][color=#ff0000][[/color][color=#004040]0[/color][color=#ff0000]][/color] <> [color=#004040]0[/color] [color=#0000ff]Then
[/color]    [color=#5a5a5a]$filename[/color] = [color=#5a5a5a]$cmdline[/color][color=#ff0000][[/color][color=#004040]1[/color][color=#ff0000]]
[/color]    [color=#009933]; Do something with the file here
[/color]    [i][color=#000080]MsgBox[/color][/i][color=#ff0000]([/color][color=#004040]0[/color], [color=#008080]"UXYFixer"[/color], [color=#008080]'The file name passed to the command line is "'[/color] & [color=#5a5a5a]$filename[/color] & [color=#008080]'"'[/color][color=#ff0000])
[/color][color=#0000ff]Else
[/color]    [color=#009933]; We did not get any command line parameters.
[/color]    [color=#009933]; If this is a command line only program, you would want to
[/color]    [color=#009933]; alert the user that the command line parameters were incorrect.
[/color]    [color=#009933]; If this is a GUI program (like a notepad program), you would
[/color]    [color=#009933]; want to simply continue from here without opening a file.
[/color]    [i][color=#000080]MsgBox[/color][/i][color=#ff0000]([/color][color=#004040]0[/color], [color=#008080]"UXYFixer"[/color], [color=#008080]'Command line parameters incorrect.'[/color] & [color=#800000]@CRLF[/color] & [color=#008080]'Command line usage: "'[/color] & [color=#800000]@ScriptName[/color] & [color=#008080]'" "file to process"'[/color][color=#ff0000])
[/color][color=#0000ff]EndIf[/color]
[/indent]  然后你的脚本就能接受文件了, 你可以开始注册一个文件类型. 为了避免错误,我对此专门制作了一个UDF—— [url=http://www.autoitscript.com/forum/index.php?s=5e391b3b11faacf068f4fca7a78b5461&act=attach&type=post&id=11596][color=#0000ff]FileRegister.au3[/color][/url]
  下面的代码演示了如何用这个UDF来注册/反注册一个文件类型:
[indent]#include [color=#008080]"FileRegister.au3"
[/color][color=#009933];==============================================================================================
;
; Description:    FileRegister($ext, $cmd, $verb[, $def[, $icon = ""[, $desc = ""]]])
;               Registers a file type in Explorer
; Parameter(s):  $ext -   File Extension without period eg. "zip"
;               $cmd -     Program path with arguments eg. '"C:\test\testprog.exe" "%1"'
;                     (%1 is 1st argument, %2 is 2nd, etc.)
;               $verb - Name of action to perform on file
;                     eg. "Open with ProgramName" or "Extract Files"
;               $def -     Action is the default action for this filetype
;                     (1 for true 0 for false)
;                     If the file is not already associated, this will be the default.
;               $icon - Default icon for filetype including resource # if needed
;                     eg. "C:\test\testprog.exe,0" or "C:\test\filetype.ico"
;               $desc - File Description eg. "Zip File" or "ProgramName Document"
;
;===============================================================================================

[/color]FileRegister[color=#ff0000]([/color][color=#008080]"uxy"[/color], [color=#008080]'"'[/color] & [color=#800000]@ScriptFullPath[/color] & [color=#008080]'" "%1"'[/color], [color=#008080]"Open in UXYFixer"[/color], [color=#004040]1[/color], [color=#800000]@ScriptFullPath[/color] & [color=#008080]',0'[/color], [color=#008080]"UXYFixer Document"[/color][color=#ff0000])

[/color][color=#009933];===============================================================================
;
; Description:    FileUnRegister($ext, $verb)
;               UnRegisters a verb for a file type in Explorer
; Parameter(s):  $ext - File Extension without period eg. "zip"
;               $verb - Name of file action to remove
;                     eg. "Open with ProgramName" or "Extract Files"
;
;===============================================================================

[/color]FileUnRegister[color=#ff0000]([/color][color=#008080]"uxy"[/color], [color=#008080]"Open in UXYFixer"[/color][color=#ff0000])[/color]
[/indent][b]Q17. 为什么点击我的下拉框(GUICtrlCreateCombo)时不出现一个下拉列表?
[/b]  [b]A1.[/b] 在使用GUICtrlCreateCombo前你先要确认height参数是你想要的下拉列表的高度,Windows XP会自动选择一个高度,但其他版本的Windows并不能这样做.
[indent][color=#5a5a5a]$combo[/color] = [i][color=#000080]GUICtrlCreateCombo[/color][/i][color=#ff0000]([/color][color=#008080]""[/color],[color=#004040]10[/color],[color=#004040]10[/color],[color=#004040]200[/color],[color=#004040]20[/color][color=#ff0000])[/color]
应修改为:
[color=#5a5a5a]$combo[/color] = [i][color=#000080]GUICtrlCreateCombo[/color][/i][color=#ff0000]([/color][color=#008080]""[/color],[color=#004040]10[/color],[color=#004040]10[/color],[color=#004040]200[/color],[color=#004040]200[/color][color=#ff0000])[/color]
[/indent][b]Q18. 为什么我的帖子没有人回答?[/b]
  [b]A1.[/b] 你是否对你的问题做了得体的描述? 如果你的标题或者对问题的描述含糊不清, 其他人只会忽略掉你的问题而不是回答它. 那些标题像 "帮助我", "我有了麻烦", "问题", "帮我看看代码的问题", "这段代码不能工作" 的帖子并不会引起其他人的注意. 那些有经验的用户(他们通常能解决你的问题) 经常会跳过类似的帖子. 一个规范的标题应该像这样:"使用WinWaitClose时出现的问题",或者 "陷入了死循环".
  [b]A2.[/b] 你是否贴出了你的代码? 如果你不贴出你的问题代码你就不可能得到帮助. 在发代码之前先把不相关的代码去掉.也许当然去掉不相关的代码时你已经看到问题所在的地方..也许会发现.原来是一个那样简单的问题.
  [b]A3. [/b]请让你的文字变得易于阅读,适当的标点很重要,同时也不要给文字加上颜色.另外最好不要使用繁体字,繁体字并不能让你显得更有文化,相反而会影响他人的阅读.
  另外很多人喜欢用些比较吓人的标题,比如"比如高手进来看一下"."版主进来解决一下"."高难度的问题".问题常常因为我不是高手或者版主而没有回答.或者发现"高难度"的问题原来是很菜滴.不是每个人都喜欢扮帅滴.....
  还有,在提问建议多搜索一下.
[b]Q18. 为什么杀毒软件报告我的脚本被感染?[/b]
  [b]A1.[/b] AutoIt并没有在你的系统里安装病毒,如果你的程序被报毒的话(前提是你自己不怀恶意) 那么这就是一次误报. 杀毒软件会在编译过后的AutoIt脚本里发现一些标记,并以此认为你的脚本被感染病毒.之所以会出现这样的情况有下面的两点原因:
[list][*]AutoIt使用UPX加壳. UPX是一种开源的程序压缩软件. 经常被一些病毒使用(让它们变得更小).[*]一些怀恶意的写脚本的人让AutoIt脚本引擎被标识为了病毒.[/list]  所以,请积极拨打各大杀毒软件厂商的电话来报告这些误报情况:
[list][*]金山:010-82331816[*]瑞星:010-82678800[*]江民:800-8102300[*]卡巴斯基:4008110186[/list]

redapple 2007-5-2 05:06 PM

这么多的知识点。我收藏了。楼主辛苦了!

bearzyx 2008-3-9 05:57 PM

不顶 不行~~~要让更多的人看看~~~

zxyy 2008-3-23 04:26 PM

学习了,收藏这些技巧,谢谢 你了。、

cafews 2008-7-16 05:18 PM

yct06 辛苦了啊..LZ...
页: [1]
查看完整版本: AutoIt v3 FAQ By一点笔记
Google