Что нового

Получить путь активного окна проводника

antidog

Новичок
Сообщения
26
Репутация
2
Например- открыта папка в проводнике, нужно получить её полный путь. Возможно такое?
 

AlexTurist

Новичок
Сообщения
11
Репутация
1
А как скрипт должен понимать о какой папке идет речь? Скажем открыто 2 папки.
 

Glass4217

Знающий
Сообщения
146
Репутация
19
в windows 10 такой вот костыль сработал.
запускать на ё, только при активном окне проводника.

Код:
#include <Array.au3>
HotKeySet ("`", "check")
HotKeySet ("ё", "check")

Func check()
   $title = WinGetTitle("[ACTIVE]")
   $text = WinGetText ($title)
   $lines = StringSplit($text, @LF, 1)
   if IsArray($lines) Then
;~       ConsoleWrite($lines[15])
       $adres = StringRegExpReplace($lines[15],"Адрес: ","")
      ConsoleWrite($adres&@CRLF)
   Else
   EndIf
EndFunc

While 1
    Sleep(100)
WEnd
 
Автор
A

antidog

Новичок
Сообщения
26
Репутация
2
А как скрипт должен понимать о какой папке идет речь? Скажем открыто 2 папки.
Та, что является активным окном в данный момент. Но, не принципиально, так как планирую работать с одной папкой в единицу времени.
Сообщение автоматически объединено:

Сообщение автоматически объединено:

в windows 10 такой вот костыль сработал.
запускать на ё, только при активном окне проводника.
На win7 ничего не выводит в консоль =(
 

InnI

AutoIT Гуру
Сообщения
4,612
Репутация
1,298
Код:
Func check()
  $adres = StringRegExp(WinGetText("[ACTIVE]"), "Адрес: (.*)", 3)
  If IsArray($adres) Then ConsoleWrite($adres[0] & @CRLF)
EndFunc
 

AlexTurist

Новичок
Сообщения
11
Репутация
1
У меня на Windows 7 сработало так
Код:
HotKeySet ("1", "check")

Func check()
   $title = WinGetTitle("[ACTIVE]")
   $text = WinGetText ($title)
   MsgBox (0,"",$text)
EndFunc

While 1
    Sleep(100)
WEnd
Это я так криво переделал код Glass4217))))
 
Последнее редактирование:

joiner

Модератор
Локальный модератор
Сообщения
3,425
Репутация
597
Делал так
До сих пор пользуюсь. Система win 10 x64
 

AZJIO

Меценат
Меценат
Сообщения
2,762
Репутация
1,152
Из моей программы SaveFolders.
Код:
$Tr7 = 0
$obj = "[CLASS:Edit; INSTANCE:1]"

Switch @OSVersion
    Case 'WIN_8',  'WIN_10'
        $obj = "[CLASS:ToolbarWindow32; INSTANCE:3]"
        $Tr7 = 1
    Case 'WIN_VISTA', 'WIN_7'
        $obj = "[CLASS:ToolbarWindow32; INSTANCE:2]"
        $Tr7 = 1
    Case Else
EndSwitch

$AllWindows = WinList()
For $i = 1 To $AllWindows[0][0]
    If _IsVisible($AllWindows[$i][1]) And $AllWindows[$i][0] <> "" And $AllWindows[$i][0] <> "Program Manager" And StringRight(_ProcessGetPath(WinGetProcess($AllWindows[$i][0])), 13) = '\explorer.exe' Then
        $tmp = ControlGetText($AllWindows[$i][0], '', $obj)
        If $Tr7 = 1 Then
            If $tmp = '' Then $tmp = $AllWindows[$i][0]
            $tmp = StringRegExpReplace($tmp, '(.*)(.:\\.*)', '\2')
            ; $tmp = StringRegExpReplace($tmp, '(?s)\A(?:.+?: )(.:\\.+?)\z', '\1')
            If Not FileExists($tmp) Then ContinueLoop
        EndIf
        MsgBox(0, 'Сообщение', $tmp)
    EndIf
Next

; Возвращает путь к EXE-файлу запущенного процесса зная его PID
Func _ProcessGetPath($PID)
    Local $hKernel32_dll, $hProcess, $Path, $ret
    If IsString($PID) Then $PID = ProcessExists($PID)
    $Path = DllStructCreate('char[1000]')
    $hKernel32_dll = DllOpen('Kernel32.dll')
    ; $PROCESS_QUERY_INFORMATION + $PROCESS_VM_READ
    $hProcess = DllCall($hKernel32_dll, 'int', 'OpenProcess', 'dword', 0x400 + 0x10, 'int', 0, 'dword', $PID)
    $ret = DllCall('Psapi.dll', 'long', 'GetModuleFileNameEx', 'long', $hProcess[0], 'int', 0, 'ptr', DllStructGetPtr($Path), 'long', DllStructGetSize($Path))
    $ret = DllCall($hKernel32_dll, 'int', 'CloseHandle', 'hwnd', $hProcess[0])
    DllClose($hKernel32_dll)
    Return DllStructGetData($Path, 1)
EndFunc   ;==>_ProcessGetPath

; Проверка, что окно является видимым. Возвращает True или False
Func _IsVisible($handle)
    Return BitAND(WinGetState($handle), 4) And BitAND(WinGetState($handle), 2)
EndFunc   ;==>_IsVisible
 
Последнее редактирование:
Верх