Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Autorun 
Author Message
Orion9



PostPosted: Sat Mar 16, 2024 20:06    Post subject: Reply with quote

Loopback
Спасибо за комментарий по поводу правильности/неправильности способа. Я еще только изучаю принципы автоматизации и что с ними связано, поэтому мне очень важно услышать мнения экспертов и опытных в этом деле людей для подтверждения собственных мыслей.

Исправил на p = SendMessage(RequestInfo(RequestInfo(1000) + Cool, 13, 100, "" , 2) - все работает. Но вызывает вопрос параметр 100. По идее здесь должно быть точное количество байт, полученное через WM_GETTEXTLENGTH? Иначе ведь при длинном пути он просто обрежется. Или можно просто цифру побольше взять?

Попробовал довести задачу до цели через скрипт AutoHotkey, чтобы посмотреть, как оно будет выглядеть в действительности. Вроде, ничего - мне нравится!
autorun.cfg
Code:

Func ShowItemHint
Local icacl, dat, p
dat = StrPart(ItemAtCursor('text'), auTAB, 1)
p = SendMessage(RequestInfo(RequestInfo(1000) + 8), 13, 100, "" , 2)
p = StrLeft(p, StrPos(p, "\", -1))
dat = p & dat
ShellExec "%COMMANDER_PATH%\Scripts\ahk\AutoHotkey32.exe" "FileSec.ahk ""%dat%""" "%COMMANDER_PATH%\Scripts\ahk\"
EndFunc

FileSec.ahk
Code:

#SingleInstance Force

ToolTip StrBuf(RunWaitOne('icacls "' A_Args[1]))     
KeyWait "LButton", "D"
   
RunWaitOne(command) {
local sOut
dhw := A_DetectHiddenWindows
pid :=0   
    DetectHiddenWindows true
    Run A_ComSpec " /k",, "Hide", &pid
    WinWait "ahk_pid " pid
   
    DllCall("AttachConsole", "UInt", pid)
    DetectHiddenWindows dhw

    shell := ComObject("WScript.Shell")
    exec := shell.Exec(A_ComSpec . " /C " . command)   
    sOut := exec.StdOut.ReadAll()
   
    DllCall("FreeConsole")
    if ProcessExist(pid)
       ProcessClose pid
return sOut
}

StrBuf(str)
{
    buf := Buffer(StrPut(str, "CP0"))
    StrPut(str, buf, "CP0")
    return StrGet(buf.ptr, "CP866")
}

Думаю, тултип Autorun нужен. Может, вам удастся как-то решить проблему с его скрытием? Ну, а если нет - ничего страшного Smile
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group