[已解决]鼠标右键shell扩展怎么添加? 如何根据某关键字替换文本文件中的一整行?
本帖最后由 ghosyyy 于 2011-3-29 21:38 编辑小弟用的绿色版UE自带的绿化程序在32位系统上很OK, 但64位系统(Win2003)上就不能添加鼠标右键菜单了, 这个绿化程序本来也不太完善, 就打算自己写一个, 呵呵.
现在这个小程序在WinXP上可以添加上右键菜单了, 还有2个没有解决的问题:
1. 64位系统上不行, 在网上查资料和在64位Windows2003上看注册表, 还是没能解决问题, 不知道少了什么东西
2. 不知道用au3如何能替换配置文件中的整行, 比如 文件中有Language File=F:\aa bb\UltraEdit\wordfiles 这么一行, 我需要查找到Language File这行并进行路径替换
小弟也是初学au3, 望高手帮下忙, 呵呵.
;
; UltraEdit 绿化工具
;
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
If @OSArch == "X86" Then
$arch = "您的系统是32位系统: " & @OSArch
$aaaa = @ScriptDir & "\" & "ue32ctmn.dll"
Else
$arch = "您的系统是64位系统: " & @OSArch
$aaaa = @ScriptDir & "\" & "ue64ctmn.dll"
EndIf
$explain = _
"此工具做2件事: " & @CRLF _
& "1. 32或64位系统正确的添加UE右键菜单." & @CRLF _
& "2. 修改UE配置文件(Uedit32.ini)中的2个路径为UE所在目录"
#Region ### START Koda GUI section ### Form=F:\360data\重要数据\桌面\current\trunk\myau3src\UE绿化工具.kxf
$gui_mainwindow = GUICreate("UltraEdit 绿化工具", 377, 154)
$gui_arch = GUICtrlCreateLabel("$arch", 14, 14, 343, 17)
$gui_explain = GUICtrlCreateLabel("$explain", 14, 37, 343, 41)
$gui_ok = GUICtrlCreateButton("绿化", 60, 89, 73, 28)
$gui_cancel = GUICtrlCreateButton("移除", 244, 89, 73, 28)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
GUICtrlSetData($gui_arch, $arch)
GUICtrlSetData($gui_explain, $explain)
; GUI MESSAGE LOOP
While 1
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
ExitLoop
Case $gui_ok
$ret = install()
If $ret <> 1 Then
MsgBox(0, "", "绿化不成功")
Else
MsgBox(0, "", "绿化成功")
EndIf
ExitLoop
Case $gui_cancel
$ret = uninstall()
If $ret <> 1 Then
MsgBox(0, "", "移除不成功")
Else
MsgBox(0, "", "移除成功")
EndIf
ExitLoop
EndSwitch
WEnd
Func install()
Local $ret = RegWrite("HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\UltraEdit", _
"", "REG_SZ", "{b5eedee0-c06e-11cf-8c56-444553540000}")
If $ret <> 1 Then
Return $ret
EndIf
Local $ret = RegWrite("HKEY_CLASSES_ROOT\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}\InProcServer32", _
"", "REG_SZ", $aaaa)
If $ret <> 1 Then
Return $ret
EndIf
Local $ret = RegWrite("HKEY_CLASSES_ROOT\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}\InProcServer32", _
"ThreadingModel", "REG_SZ", "Apartment")
If $ret <> 1 Then
Return $ret
EndIf
If @OSArch <> "X86" Then
Local $ret = RegWrite("HKEY_CLASSES_ROOT\Wow6432Node\*\shellex\ContextMenuHandlers\UltraEdit", _
"", "REG_SZ", "{b5eedee0-c06e-11cf-8c56-444553540000}")
If $ret <> 1 Then
Return $ret
EndIf
Local $ret = RegWrite("HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}\InProcServer32", _
"", "REG_SZ", $aaaa)
If $ret <> 1 Then
Return $ret
EndIf
Local $ret = RegWrite("HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}\InProcServer32", _
"ThreadingModel", "REG_SZ", "Apartment")
If $ret <> 1 Then
Return $ret
EndIf
EndIf
; 注册表设置马上生效
DllCall("user32.dll", "int", "SendMessageTimeout", "hwnd", 65535, "int", 26, "int", 0, "int", 0, "int", 0, "int", 1000, "str", "dwResult")
Return $ret
EndFunc
Func uninstall()
Local $ret = RegDelete("HKEY_CLASSES_ROOT\*\shellex\ContextMenuHandlers\UltraEdit")
Local $ret = RegDelete("HKEY_CLASSES_ROOT\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}")
If @OSArch <> "X86" Then
Local $ret = RegDelete("HKEY_CLASSES_ROOT\Wow6432Node\*\shellex\ContextMenuHandlers\UltraEdit")
Local $ret = RegDelete("HKEY_CLASSES_ROOT\Wow6432Node\CLSID\{b5eedee0-c06e-11cf-8c56-444553540000}")
EndIf
Return 1
EndFunc
根据某关键字替换文本文件中的一整行你参考我这个源码
http://www.autoitx.com/thread-22839-1-1.html
我这里的txt数据是及时替换的 根据某关键字替换文本文件中的一整行你参考我这个源码
我这里的txt数据是及时替换的
a62105400 发表于 2011-3-27 00:53 http://www.autoitx.com/images/common/back.gif
看了你的程序了, 和我情况不同啊. 你用的就是_ReplaceStringInFile函数是吧.
你是查找整行的内容, 再替换的.
我这个需求是查找一行的一部分, 但需要替换整行的.
Language File=xxxxxxxx(等号后面的内容不确定的)
替换成
Language File=@ScriptDir\wordfiles 文本替换的问题解决了, 64位系统右键菜单还是搞不定, 求高人指点啊
Func pathReplace($szFileName)
Local $str = FileRead($szFileName)
If @error == 1 Then
Return "打开配置文件Uedit32.INI失败!"
EndIf
$str = StringRegExpReplace($str, "((?m)^Language File=).*", StringReplace("$1" & @ScriptDir & "\wordfiles", "\", "\\") & @CR)
$str = StringRegExpReplace($str, "((?m)^TagListFilename=).*", StringReplace("$1" & @ScriptDir & "\TAGLIST.UET", "\", "\\") & @CR)
FileCopy($szFileName, $szFileName & ".back", 9)
Local $hFile = FileOpen($szFileName, 2)
FileWrite($hFile, $str)
FileClose($hFile)
EndFunc
论坛好冷清啊.
问题解决了, 在64位系统中32位的程序写注册表会被自动重定向.
如果根路径用类似HKCR64这样的开头, 则不会被重定向.
页:
[1]