AU3如何实现只运行程序同时运行一个?谢谢!!
做好的AU3文件,运行可以同时打开好几个。如何实现,只能同时打开一个这个程序?是用Singleton么?我看帮助文档没看懂,就具体指点。谢谢啊。 回复 1# asasas #include <Misc.au3>If _Singleton("我的脚本", 1) = 0 Then
MsgBox(4096, "报错", "我的脚本 已经运行了一个实例!")
Exit
EndIf
MsgBox(4096, "正常", "我的脚本 开始运行!") 2楼解释的非常对。 回复 2# user3000
我复制到我的AU3脚本里面后,原来可以运行的脚本反而运行后没反应了。额。。我是新手。还是有点看不懂。见谅。可以再稍微解释下么。谢谢啊。。 回复 3# cj4025
我复制到我的AU3脚本里面后,原来可以运行的脚本反而运行后没反应了。额。。我是新手。还是有点看不懂。见谅。可以再稍微解释下么。谢谢啊。。 回复 5# asasas
如果你把二楼的代码编译成EXE,再尝试同一时间运行几个副本的话,我想你就不会有什么疑问了。#include <Misc.au3>
Local $s_identification= '我的脚本20140102'
; 程序的独特的识别标志,但只能用函数 _Singleton 进行识别!
; 此字符串内容没有特定要求,不为空。实际上弄成一个变量有点多余。
;但其内容应区别于其它独立脚本里的的识别标志。
If _Singleton($s_identification, 1) = 0 Then
MsgBox(4096, "出错了", "本程序已经运行了一个实例!")
Exit
EndIf
; 以下才是主代码,请继续码出程序的所有功能
MsgBox(4096, "正常工作", "本程序正常启动了!") 老师:这样编译完还是能运行,多个脚本,错在哪里。
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#AutoIt3Wrapper_outfile=C:\Users\Administrator\Desktop\00.exe
#AutoIt3Wrapper_UseUpx=n
#EndRegion ;**** 参数创建于 ACNWrapper_GUI ****
#include <Misc.au3>
$hGui = GUICreate("自由人制作Windows 系统优化工具 ", 528, 363, -1, -1)
If _Singleton($hGui, 1) = 0 Then
MsgBox(4096, "出错了", "本程序已经运行了一个实例!")
Exit
EndIf
$Pic1 = GUICtrlCreatePic(@ScriptDir & "\ziyouren.jpg", 0, 0, 545, 65)
$Group1 = GUICtrlCreateGroup(" 优化网络工具", 8, 72, 145, 297)
$Button1 = GUICtrlCreateButton("网络加速器", 40, 120, 81, 33)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup(" 优化内存工具", 193, 71, 145, 297)
$Button2 = GUICtrlCreateButton("内存管理", 226, 114, 81, 33)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group3 = GUICtrlCreateGroup(" 运行磁盘工具", 378, 72, 145, 297)
$Button3 = GUICtrlCreateButton("diskgenius", 411, 116, 81, 33)
GUICtrlCreateLabel(" 特别鸣谢:afanpoiuxiehuahere …… 等好友", 10, 350, 520, 360)
GUICtrlSetColor(-1, 0xFF0000)
GUICtrlCreateGroup("", -99, -99, 1, 1)
DllCall('user32.dll', 'int', 'AnimateWindow', 'hwnd', $hGui, 'int', 1000, 'long', 0x40010)
GUISetState()
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case -3
Exit
Case $Button1
Run(@ScriptDir & "\UltraISO.exe")
Case $Button1
Run(@ScriptDir & "\UltraISO.exe")
Case $Button1
Run(@ScriptDir & "\UltraISO.exe")
EndSwitch
WEnd MARK,正好要用到 MARK,正好要用到 老师:这样编译完还是能运行,多个脚本,错在哪里。
#Region ;**** 参数创建于 ACNWrapper_GUI ****
#Aut ...
QQ386263723 发表于 2014-1-8 07:48 http://www.autoitx.com/images/common/back.gif
下面这句有问题:
If _Singleton($hGui, 1) = 0 Then
你的脚本中“$hGui”是句柄值,每次都是有变化的。
其实这个参数是互斥体对象名,创建这个互斥体后,下次启动脚本创建这个名称的互斥体,产生183错误,来判断同一脚本启动了。把这个参数设为“系统优化工具”诸如这样的字符串就可以了。
其实,用自定义函数不便于理解,直接这样用,则简单明了:
Local $MutexName="au3实例1" ;互斥体命名
DllCall("kernel32.dll", "handle", "CreateMutex", "ptr", 0, "bool", 1, "wstr", $MutexName) ;创建一个互斥体
Local $CMutex = DllCall("kernel32.dll", "dword", "GetLastError") ;返回错误代码值
If $CMutex=183 Then Exit ;错误代码值为183,说明互斥体已存在则退出 有些没看懂哦 local $key = "【这是一个测试au3程序】"
If WinExists($key) Then
MsgBox(4096, "出错了", "本程序已经运行了一个实例!")
Exit
Endif
AutoItWinSetTitle($key)
MsgBox(4096, "正常工作", "本程序正常启动了!")
不用UDF这样写也OK的...{:face (303):}
页:
[1]