#include <WinAPI.au3>
Opt("WinWaitDelay", 0)
While Sleep(10)
$sCtrl = ControlGetFocus("")
If StringInStr($sCtrl, "Edit") Then
$hWnd = ControlGetHandle("", "", $sCtrl)
If _WinAPI_GetClassName(_WinAPI_GetParent($hWnd)) = "CtrlNotifySink" Then WinClose($hWnd)
EndIf
WEnd
#include <WinAPI.au3>
#include <APIConstants.au3>
Opt("WinWaitDelay", 0)
While Sleep(10)
$sCtrl = ControlGetFocus("")
If StringInStr($sCtrl, "Edit") Then
$hWnd = ControlGetHandle("", "", $sCtrl)
$sClass = _WinAPI_GetClassName(_WinAPI_GetAncestor($hWnd, $GA_ROOT))
If StringRegExp($sClass, "^(CabinetWClass|Progman|WorkerW)$") Then
WinClose($hWnd)
EndIf
EndIf
WEnd
В данном случае невозможно ввести путь в строке адреса, т.к. при клике там тоже появляется Edit.так наверно будет правильнее
Я ещё не встречал пользователя, способного вручную переименовать файл в проводнике за 10 мснужно более надёжно
Я про отлов элементов и окон.Я ещё не встречал пользователя, способного вручную переименовать файл в проводнике за 10 мс
#NoTrayIcon
#include <WinAPI.au3>
#include <APIConstants.au3>
Global Const $sEditParentClass = "^(SysListView32|CtrlNotifySink)$"
Global Const $sEditAncestorClass = "^((Cabinet|Explore)WClass|Progman|WorkerW)$"
Opt("WinWaitDelay", 0)
HotKeySet('{ESC}', '_Exit')
While Sleep(10)
$sCtrl = ControlGetFocus("[ACTIVE]")
If StringLeft($sCtrl, 4) = "Edit" Then
$hWnd = ControlGetHandle("[ACTIVE]", "", $sCtrl)
$sAncestorClass = _WinAPI_GetClassName(_WinAPI_GetAncestor($hWnd, $GA_ROOTOWNER))
$sParentClass = _WinAPI_GetClassName(_WinAPI_GetParent($hWnd))
If StringRegExp($sAncestorClass, $sEditAncestorClass) And StringRegExp($sParentClass, $sEditParentClass) Then
;ControlSend($hWnd, '', '', '{ESC}')
WinClose($hWnd)
EndIf
EndIf
WEnd
Func _Exit()
Exit
EndFunc
этот код не дает открыть ни одну папку на рабочем столе. только через правый кликВот так тогда уж:
Всему виной ControlGetFocus в цикле:этот код не дает открыть ни одну папку на рабочем столе
HotKeySet('{ESC}', '_Exit')
While Sleep(10)
ControlGetFocus("[ACTIVE]")
WEnd
Func _Exit()
Exit
EndFunc
Это зависит от настройки. При включении "Открывать одним щелчком, выделять указателем" файлы запускаются.после отжатия кнопки мышки начинается редактирование имени файла
Мне оно нужно когда эта опция не включена :laugh:.Это зависит от настройки. При включении "Открывать одним щелчком, выделять указателем" файлы запускаются
На Win7 изменения происходят здесь:в реестре проверяется
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer, ShellState (REG_BINARY)
Обход проблемы:этот код не дает открыть ни одну папку на рабочем столе
#NoTrayIcon
#include <APIConstants.au3>
#include <WinAPI.au3>
Global Const $sEditParentClass = '^(SysListView32|CtrlNotifySink)$'
Global Const $sEditAncestorClass = '^((Cabinet|Explore)WClass|Progman|WorkerW)$'
Opt('WinWaitDelay', 0)
HotKeySet('{ESC}', '_Exit')
While Sleep(10)
$sCtrl = _ControlGetFocusEx('[ACTIVE]')
If StringLeft($sCtrl, 4) = 'Edit' Then
$hWnd = ControlGetHandle('[ACTIVE]', '', $sCtrl)
$sAncestorClass = _WinAPI_GetClassName(_WinAPI_GetAncestor($hWnd, $GA_ROOTOWNER))
$sParentClass = _WinAPI_GetClassName(_WinAPI_GetParent($hWnd))
If StringRegExp($sAncestorClass, $sEditAncestorClass) And StringRegExp($sParentClass, $sEditParentClass) Then
WinClose($hWnd)
EndIf
EndIf
WEnd
Func _ControlGetFocusEx($sTitle)
Local $aRet
While 1
$aRet = DllCall('user32.dll', 'short', 'GetAsyncKeyState', 'int', '0x01')
If Not @error And BitAND($aRet[0], 0x8000) <> 0 Then
Sleep(RegRead('HKCU\Control Panel\Mouse', 'DoubleClickSpeed') + 50)
Else
Return ControlGetFocus($sTitle)
EndIf
Wend
EndFunc
Func _Exit()
Exit
EndFunc
Хотел создать тикет, но оказывается (см. выше) такой уже создан, причём 7 лет назад.Похоже, что да.
#include <WinAPI.au3>
#include "UIAutomate.au3"
$UIA_ConsoleWriteError = 0
While Sleep(10)
$oCtrl = _UIA_GetFocusedElement()
$hWnd = HWnd(_UIA_ElementGetPropertyValue($oCtrl, "NativeWindowHandle"))
$sClass = _UIA_ElementGetPropertyValue($oCtrl, "ClassName")
$sRootClass = _WinAPI_GetClassName(_WinAPI_GetAncestor($hWnd, 2))
If $sClass = "UIRenameTextElement" Or ($sClass = "Edit" And ($sRootClass = "Progman" Or $sRootClass = "WorkerW")) Then ControlSend("", "", $hWnd, "{ESC}")
WEnd