Войти

Показать полную графическую версию : [архив - Часть 2] AutoIt скрипты


Страниц : 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 [30] 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50

Creat0R
10-10-2007, 14:43
DenchikK, как можно настроить скрипт на выход из цикла по нажатию на определённую клавишу?
Если только из цикла, то цикл нужно запускать с дополнительным условием...

HotKeySet("{F2}", "StopLoop")

WinActivate ("µTorrent","")
WinWaitActive("µTorrent", "", 5)

Global $i = 0, $IsLoop = True

While $i <= 10 And $IsLoop
Sleep (1000)
Send ("{APPSKEY}")
Sleep (1000)
Send ("{UP}{UP}")
Sleep (1000)
Send ("{Enter}")
$i += 1
Sleep (1000)
WEnd

Func StopLoop()
$IsLoop = False
EndFunc


amel27
его можно взять из параметра Personal ключа "HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders"
Спасибо, вот так по кускам может и соберу нужные элементы :) - но всё же мне кажется это не очень надёжно...

Lodoss,
понадобилось конвертировать большое количество файлов из одного формата в другой
А с какого в какой?
Возможно есть более удобное решение чем использование сторонних программ (тем более Notepad), я на оф. форуме видел пару решении по конвертированию файлов, вопрос в том, с какого и в какой формат.

Кстати, я как то давно написал функцию для парсирования возвращённой строки от FileOpenDialog()/FileSaveDialog()...

#include <Array.au3>

$Selected = FileOpenDialog("Title", "C:\", "All (*.*)", 4)

$SelectedArr = _ParseSelected($Selected)

_ArrayDisplay($SelectedArr)

Func _ParseSelected($String)
Local $RetArr[1], $Ubound
If StringInStr($String, "|") Then
Local $SplitArr = StringSplit($String, "|")
Local $InitPath = StringRegExpReplace($SplitArr[1], '([^\\])\\*$', '\1')
For $i = 2 To UBound($SplitArr)-1
$Ubound = UBound($RetArr)
ReDim $RetArr[$Ubound + 1]
$RetArr[$Ubound] = $InitPath & "\" & $SplitArr[$i]
Next
$RetArr[0] = $Ubound
Else
Local $RetArr[2] = [1, $String]
EndIf
Return $RetArr
EndFunc

TERMINAL
10-10-2007, 18:30
Можно ли с помощью скрипта открыть каретку CD-ROMa или DVD-ROMa?

Creat0R
11-10-2007, 00:37
TERMINAL,
Можно ли с помощью скрипта открыть каретку CD-ROMa или DVD-ROMa?
CDTray() ?

Вот пример (by amel27 (http://forum.oszone.net/thread-58418-10.html#post520629)):

; Читаем параметр командной строки и если обнаружен вызываем функцию,
; переменная окружения ERRORLEVEL устанавливается равной количеству ошибок
; (привод может быть заблокирован Nero или другой программой)

$LastParm = $CmdLine[$CmdLine[0]]
If $LastParm Then
_CDEject ($LastParm)
Exit (@error)
EndIf

; Функция выброса трея CD/DVD привода
; в качестве параметра принимается буква диска или порядковый номер (по алфавиту),
; для обработки всех найденных приводов достаточно передать -1,
; по умолчанию применяется к первому найденному приводу.
;
; Возвращает количество успешно обработанных приводов,
; значение @error устанавливается равным количеству неудач,
; суммарное значение равно количеству обнаруженных приводов.

Func _CDEject ($drive = 1)
Local $i = 1, $err = 0, $aDrives = DriveGetDrive ("CDROM")
If IsArray ($aDrives) Then
For $i = 1 To $aDrives [0]
If ($drive = -1) OR ($drive = $i) OR ($drive & ':' = $aDrives [$i]) Then
If CDTray ($aDrives [$i], "open") =0 Then $err = $err +1
EndIf
Next
EndIf
SetError ($err)
Return $i - $err -1
EndFunc

amel27
11-10-2007, 07:24
Creat0R
но всё же мне кажется это не очень надёжно »
в плане определения наличия/отсутствия иконок и пользовательских имен ИМХО вполне надежно, а вот насчет системных предустановленных имен (aka "Мой компьютер") тут действительно проблемы, т.к. они берутся не из реестра а из бинарников (DLL)... ты уже поднимал подобный вопрос насчет титлов окон FileOpen/FileSave, пока никаких идей... :(

Creat0R
11-10-2007, 07:33
Интересно, возможно ли получить процент закачиваемых байтов (общий процент скаченного), не имея заранее полного размера закачиваемого файла?

Просто InetGetSize() иногда возвращает 0, хотя с той же ссылкой InetGet() справляется (скачивает её).
А также хотелось узнать, как правильно получать примерно-оставшиеся время до окончания закачки?
Я ранее поднимал вопрос о закачке файлов, но всё как то не определено, не надёжно :( - иногда у меня счётчик скачит то на 5 минут, то на 10, а иногда вовсе 00:00:00 показывает (когда закачка только началась).

Lodoss
11-10-2007, 11:22
Creat0R: Возможно есть более удобное решение чем использование сторонних программ

Блокнот я привёл в качестве примера, моя задачка никак не связана с текстовыми редакторами :)


Конвертировать нужно файлы "*.prt" в "*.dwg".

И первый и второй - особенные графические форматы.
Файлы с расширением "prt" - это объёмные модели (программа Unigraphix NX), что то наподобие "3Dmaх" но ориентирована на конструкторские решения. Вот из этой программы и нужно формировать файлы "dwg" (экспортировать) для дальнейшего помещения на сервер...

Пакетного конвертера из prt в dwg я ненашёл. Поэтому выходом счёл автоматизировать работу с самой программой Unigraphix NX через её меню и горячие клавиши выполняя сначала загрузку файла prt, его обработку и дальнейший экспорт в dwg ....


Maza Faka: если нужен законченный скрипт, тогда выкладывай подробности

Maza Faka new1 то что нужно ! Лист бокс понравилось, потому как в оболочку хочу воткнуть и другие функции с аналогичными обработками.

вот сырой GUI который хотелось бы видеть в конечном варианте.


#include <GUIConstants.au3>
AutoItSetOption ( "TrayIconDebug", 1 )
DllCall("uxtheme.dll", "none", "SetThemeAppProperties", "int", 0) ; turn off XP themes

$AForm1_1 = GUICreate("prt >>> dwg", 485, 294, -1, -1)
GUISetBkColor(0xA6CAF0)

$1 = "D:\work" ; входящая папка
$2 = "D:\work\plotter\dwg" ; папка конечных файлов

$AInput1 = GUICtrlCreateInput($1, 16, 24, 121, 21)
if DirCreate($1)= False Then
GUICtrlSetData($AInput1, "Заполните поле !")
GUICtrlSetColor($AInput1, 0xff0000)
Else
GUICtrlSetColor($AInput1, 0x0000FF)
EndIf
$AInput2 = GUICtrlCreateInput($2, 16, 224, 121, 21)
if DirCreate($2)= False Then
GUICtrlSetData($AInput2, "Заполните поле !")
GUICtrlSetColor($AInput2, 0xff0000)
Else
GUICtrlSetColor($AInput2, 0x0000FF)
EndIf
$AButton1 = GUICtrlCreateButton("Выбор", 144, 26, 40, 17, 0)
$AButton2 = GUICtrlCreateButton("Выбор", 144, 226, 40, 17, 0)
$ALabel1 = GUICtrlCreateLabel("Входящая папка", 8, 7, 88, 17)
$ALabel2 = GUICtrlCreateLabel("Папка выхода", 8, 207, 76, 17)
$AProgress1 = GUICtrlCreateProgress(112, 256, 137, 9)
GUICtrlSetColor(-1, 0x007DFA)
$AProgress2 = GUICtrlCreateProgress(88, 272, 161, 9)
$Group1 = GUICtrlCreateGroup("Выбрать", 16, 48, 169, 65)
$Radio1 = GUICtrlCreateRadio("Папку", 24, 64, 57, 17)
$Radio2 = GUICtrlCreateRadio("Группу файлов", 80, 64, 97, 17)
$Checkbox1 = GUICtrlCreateCheckbox("Учитывать подкаталоги", 24, 88, 153, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group2 = GUICtrlCreateGroup("Фильтр файлов", 16, 120, 169, 81)
$Input1 = GUICtrlCreateInput("_drw", 82, 144, 97, 21)
$Input2 = GUICtrlCreateInput("*", 82, 168, 97, 21)
$Label1 = GUICtrlCreateLabel("Включить", 22, 144, 53, 17)
$Label2 = GUICtrlCreateLabel("Исключить", 22, 168, 60, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Button1 = GUICtrlCreateButton("Удалить", 408, 26, 65, 17, 0)
$Button2 = GUICtrlCreateButton("Очистить", 336, 26, 65, 17, 0)
$Button3 = GUICtrlCreateButton("Сохранить", 192, 26, 65, 17, 0)
$Label3 = GUICtrlCreateLabel("текущий прогресс", 8, 252, 95, 16)
$Label4 = GUICtrlCreateLabel("общий", 8, 268, 37, 17)
$Button4 = GUICtrlCreateButton("Загрузить", 264, 26, 65, 17, 0)
$Group3 = GUICtrlCreateGroup("Время", 328, 248, 57, 33)
$Label6 = GUICtrlCreateLabel("00:12:47", 336, 261, 46, 17)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group4 = GUICtrlCreateGroup("Осталось", 256, 248, 65, 33)
$Label5 = GUICtrlCreateLabel("3 файла", 264, 262, 52, 17)
GUICtrlSetFont(-1, 8, 800, 0, "MS Sans Serif")
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Group5 = GUICtrlCreateGroup("Список обрабатываемых файлов", 192, 48, 281, 193)
GUICtrlCreateGroup("", -99, -99, 1, 1)
$Ed = GUICtrlCreateEdit("", 200, 65, 265, 165)
GUICtrlSetData(-1, "Здесь должен формироваться список с" &@CRLF & "чекбоксами входящих файлов, то что будет" &@CRLF & "отмечено - обрабатываем")
$AButton5 = GUICtrlCreateIcon("C:\WINDOWS\system32\shell32.dll", -138, 392, 248, 32, 32, BitOR($SS_NOTIFY,$WS_GROUP))
GUICtrlSetTip(-1, "Старт")
$AButton6 = GUICtrlCreateIcon("C:\WINDOWS\system32\shell32.dll", -28, 432, 248, 32, 32, BitOR($SS_NOTIFY,$WS_GROUP))
GUICtrlSetTip(-1, "Стоп или Выход")
GUISetState(@SW_SHOW)

While 1
$msg = GuiGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop
Case $Msg = $AButton6 ; выход
MsgBox(64, "", "Справка")
ExitLoop
Case $Msg = $AButton1 ; выход
if $radio1 And BitAND(GUICtrlRead($radio1), $GUI_CHECKED) = $GUI_CHECKED = true Then
; кнопка выбора папок
GuiCtrlSetData($AInput1, "")
$data_in = FileSelectFolder("Заполните поле ! с файлами Prt", "d:\")
if $data_in = True Then
GuiCtrlSetData($AInput1, $data_in)
GUICtrlSetColor($AInput1, 0x0000FF)
Else
GuiCtrlSetData($AInput1, "Заполните поле !")
GUICtrlSetColor($AInput1, 0xff0000)
EndIf
Else
; кнопка выбора файлов
GUICtrlSetState($radio2, $GUI_CHECKED)
GuiCtrlSetData($AInput1, "")
$files = FileOpenDialog("Пакетное конвертирование файлов Prt в Dwg [beta версия]", "d:\work\", "файлы NX1, NX2, NX3, NX4 (*.prt)", 1 + 4 )
if $files = True Then
GuiCtrlSetData($AInput1, $files)
GUICtrlSetColor($AInput1, 0x0000FF)
Else
GuiCtrlSetData($AInput1, "Заполните поле !")
GUICtrlSetColor($AInput1, 0xff0000)
EndIf
EndIf
; изменить путь для выходящих файлов prt
Case $Msg = $AButton2
$data_out = FileSelectFolder("Заполните поле ! конечных файлов Dwg", "")
if Not DirCreate ($data_out & "dir546") Then
MsgBox(16, "Ошибка", "Нельзя создать файлы в директории "& $data_out,10)
GuiCtrlSetData($AInput2, "Заполните поле !")
GUICtrlSetColor($AInput2, 0xff0000)
Else
GuiCtrlSetData($AInput2, $data_out)
GUICtrlSetColor($AInput2, 0x0000FF)
DirRemove($data_out & "dir546", 1)
EndIf
Case $Msg = $AButton5 ; старт
WinMove("prt >>>", "", 800, 600)
TrayTip("Программа prt to dwg", "проверка путей для входящих и исходящих папок", 5, 1)
if GUICtrlRead($AInput1, 0xff0000) <> True Then
MsgBox(16, "", "Неправильные пути в папках")
GuiCtrlSetData($AInput1, "Заполните поле !")
GUICtrlSetColor($AInput1, 0xff0000)
Else
MsgBox(64, "", "Начало обработки программы .....",5)
EndIf
EndSelect
WEnd


PS Кстати, я как то давно написал функцию для парсирования возвращённой строки
я незнаю что такое парсирование :) функцию то узнал только 4 дня назад как работает. Автоит раньше использовал как автожамкание кнопок при установки программ. Сейчас решил копнуть глубже, читаю справку .... :)

Creat0R
11-10-2007, 12:23
Lodoss,
Конвертировать нужно файлы "*.prt" в "*.dwg".
Тогда да, если нет программ способных конвертировать подобные форматы через командную строку, то нужно использовать саму программу в графическом виде...

что такое парсирование
Это обработка не совсем “понятной” (стандартной) строки возвращённой от FileSaveDialog/FileOpenDialog :) (в данном случае, а в общем случае Синтаксический анализ (http://ru.wikipedia.org/wiki/Синтаксический_анализ) (Парсер (http://ru.wikipedia.org/wiki/Парсер))).
Т.е возвращается к примеру такая строка:

C:\My_Files|File1.txt|File2.txt|File3.txt

Вот через ту функцию, подобная строка парсируется в массив, где каждый элемент содержит полный путь к каждому файлу (даже если выбран один файл) - таким образом очень просто обрабатывать массив и делать то что нам нужно с путями к файлам).

mikola1983
11-10-2007, 12:42
есть ли возможность с помощью автоита сделать небольшую прогу для переименования удаленных ПК. конкретно интересует кусок кода либо команда переименования. подскажите пожалуйста.

VelDmi
11-10-2007, 13:20
есть ли возможность с помощью автоита сделать небольшую прогу »
Эта прога будет запущена на удаленном ПК?

amel27
12-10-2007, 06:26
mikola1983
конкретно интересует кусок кода либо команда переименования
уже обсуждалось: [решено] Переименование рабочих станций в домене (http://forum.oszone.net/showthread.php?t=60139)

ALL
Думаю не все знают, что у ключей реестра (не путать с параметрами) как и у файлов есть своя метка времени последней модификации, стандартные утилиты ее не показывают но иногда (http://forum.oszone.net/thread-91761.html) возникает необходимость узнать когда создали/изменили тот или иной ключ... для этого случая сваял UDF, дата возвращается в формате: YYYY/MM/DD HH:MM:SS:Global Const $HKCR = 0x80000000
Global Const $HKCU = 0x80000001
Global Const $HKLM = 0x80000002
Global Const $HKU = 0x80000003
Global Const $HKCC = 0x80000005

Func RegGetTimeStamp($iRegHive, $sRegKey)
Local $sRes='', $aRet, $hReg = DllStructCreate("int")
Local $FILETIME = DllStructCreate("dword;dword")
Local $SYSTEMTIME1 = DllStructCreate("ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort")
Local $SYSTEMTIME2 = DllStructCreate("ushort;ushort;ushort;ushort;ushort;ushort;ushort;ushort")
Local $hAdvAPI=DllOpen('advapi32.dll'), $hKernel=DllOpen('kernel32.dll')
If $hAdvAPI=-1 Or $hKernel=-1 Then Return SetError(1, $aRet[0], 'DLL Open Error!')
$aRet = DllCall("advapi32.dll", "int", "RegOpenKeyEx", _
"int", $iRegHive, "str", $sRegKey, _
"int", 0, "int", 0x20019, _
"ptr", DllStructGetPtr($hReg))
If $aRet[0] Then Return SetError(2, $aRet[0], 'Registry Key Open Error!')
$aRet = DllCall("advapi32.dll", "int", "RegQueryInfoKey", _
"int", DllStructGetData($hReg,1), _
"ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0, "ptr", 0, _
"ptr", DllStructGetPtr($FILETIME))
If $aRet[0] Then Return SetError(3, $aRet[0], 'Registry Key Query Error!')
$aRet = DllCall("advapi32.dll", "int", "RegCloseKey", _
"int", DllStructGetData($hReg,1))
If $aRet[0] Then Return SetError(4, $aRet[0], 'Registry Key Close Error!')
$aRet = DllCall("kernel32.dll", "int", "FileTimeToSystemTime", _
"ptr", DllStructGetPtr($FILETIME), _
"ptr", DllStructGetPtr($SYSTEMTIME1))
If $aRet[0]=0 Then Return SetError(5, 0, 'Time Convert Error!')
$aRet = DllCall("kernel32.dll", "int", "SystemTimeToTzSpecificLocalTime", _
"ptr", 0, _
"ptr", DllStructGetPtr($SYSTEMTIME1), _
"ptr", DllStructGetPtr($SYSTEMTIME2))
If $aRet[0]=0 Then Return SetError(5, 0, 'Time Convert Error!')
$sRes &= StringFormat("%.2d",DllStructGetData($SYSTEMTIME2,1)) &'/'
$sRes &= StringFormat("%.2d",DllStructGetData($SYSTEMTIME2,2)) &'/'
$sRes &= StringFormat("%.2d",DllStructGetData($SYSTEMTIME2,4)) &' '
$sRes &= StringFormat("%.2d",DllStructGetData($SYSTEMTIME2,5)) &':'
$sRes &= StringFormat("%.2d",DllStructGetData($SYSTEMTIME2,6)) &':'
$sRes &= StringFormat("%.2d",DllStructGetData($SYSTEMTIME2,7))
Return $sRes
EndFunc

mikola1983
12-10-2007, 09:39
VelDmi, нет прога будет работать и на компах которые нужно переименовать

VelDmi
12-10-2007, 10:15
mikola1983,

$ComputerName = IniRead(@ScriptDir & "\Config.ini", "Setup", "ComputerName", 0)

If @ComputerName <> $ComputerName Then
FileWriteLine(@ScriptDir & '\rename.vbs', 'strComputer = "' & @ComputerName & '"')
FileWriteLine(@ScriptDir & '\rename.vbs', 'Set objWMIService = GetObject("winmgmts:" _')
FileWriteLine(@ScriptDir & '\rename.vbs', ' & "{impersonationLevel=impersonate}!\\" _')
FileWriteLine(@ScriptDir & '\rename.vbs', ' & strComputer & "\root\cimv2")')
FileWriteLine(@ScriptDir & '\rename.vbs', 'Set colComputers = objWMIService.ExecQuery _')
FileWriteLine(@ScriptDir & '\rename.vbs', ' ("Select * from Win32_ComputerSystem")')
FileWriteLine(@ScriptDir & '\rename.vbs', 'For Each objComputer in colComputers')
FileWriteLine(@ScriptDir & '\rename.vbs', ' errReturn = ObjComputer.Rename("' & $ComputerName & '")')
FileWriteLine(@ScriptDir & '\rename.vbs', 'Next')

RunWait (@SystemDir & '\WScript.exe ' & @ScriptDir & '\rename.vbs')
FileDelete (@ScriptDir & '\rename.vbs')
FileWriteLine(@ScriptDir & "\error.log", StringFormat("%s:%s:%s %s-%s-%s Сменили имя компьютера с %s на %s", @HOUR, @MIN, @SEC, @MDAY, @MON, @YEAR, @ComputerName, $ComputerName))
Shutdown (6)
EndIf

Соответственно в Config.ini меняешь имя компьютера и запускаешь скрипт.

TERMINAL
12-10-2007, 11:05
Creat0R, Это я уже встречал, но оно у меня не работает даже с 1 сидюком. При условии если 2 сидюка (нужно что бы выезжал нужный, а не все) то можно сделать поиск по файлу-например в корне диска лежит файл SysDisc7.exe. Сможешь помочь? Очень нужно....

Creat0R
12-10-2007, 14:39
VelDmi,
Это можно кстати средствами одного лишь AutoIt сделать:

$ComputerName = IniRead(@ScriptDir & "\Config.ini", "Setup", "ComputerName", 0)

If @ComputerName <> $ComputerName Then
$strComputer = @ComputerName
$objWMIService = ObjGet("winmgmts:{impersonationLevel=impersonate}!\\" & $strComputer & "\root\cimv2")
$colComputers = $objWMIService.ExecQuery("Select * from Win32_ComputerSystem")
For $objComputer In $colComputers
$errReturn = $ObjComputer.Rename($ComputerName)
Next
FileWriteLine(@ScriptDir & "\error.log", StringFormat("%s:%s:%s %s-%s-%s Сменили имя компьютера с %s на %s", _
@HOUR, @MIN, @SEC, @MDAY, @MON, @YEAR, @ComputerName, $ComputerName))
Shutdown(6)
EndIf


TERMINAL,

можно сделать поиск по файлу

Примерно так:

$File_Indicator = "SysDisc7.exe"
$CDROM_Drives = DriveGetDrive("CDROM")

For $i = 1 To $CDROM_Drives[0]
If FileExists($CDROM_Drives[$i] & "\" & $File_Indicator) Then
CDTray($CDROM_Drives[$i], "Open")
ExitLoop
EndIf
Next

TERMINAL
13-10-2007, 12:00
Creat0R, спасибо, супер !

Creat0R
14-10-2007, 03:06
Как можно сделать чтобы во время растягивания/перетаскивания окна, его содержимое не отображалось? (в настройках системы установлено “Отображать содержимое окна при перетаскивании”).

Я видел многие программы такое умеют, мне нужно такое же сделать для моего GUI...
Я имею в виду что то типа этого, но чтобы отображалась граница растягиваемого окна (только граница, без содержимого окна):

#include <GUIConstants.au3>

Global Const $WM_ENTERSIZEMOVE = 0x231
Global Const $WM_EXITSIZEMOVE = 0x232

$Gui = GUICreate("GUI", 200, 400, -1, -1, $WS_SIZEBOX)

GUIRegisterMsg($WM_ENTERSIZEMOVE, "WM_ENTERSIZEMOVE")
GUIRegisterMsg($WM_EXITSIZEMOVE, "WM_EXITSIZEMOVE")

$Button = GUICtrlCreateButton("Содержимое окна ;)", 50, 100)

GUISetState()

While GUIGetMsg() <> $GUI_EVENT_CLOSE
WEnd

Func WM_ENTERSIZEMOVE()
GUISetState(@SW_LOCK)
EndFunc

Func WM_EXITSIZEMOVE()
GUISetState(@SW_UNLOCK)
EndFunc

Это возможно?
Я тут (http://www.experts-exchange.com/Programming/System/Windows__Programming/Q_10037195.html#a1410453) нашёл вроде решение, но не знаю как его приминить :( - Пробовал посылать сообщение WM_SETREDRAW с параметром False, но окно “зависает” при попытке изменить размер/перетащить окно.

Creat0R
14-10-2007, 07:25
amel27
Ты недавно приводил (http://forum.oszone.net/post-654524.html#post654524) функцию _ControlGetFocus(), а можно точно такую, но чтобы не сфокусированный элемент возвращала, а тот над которым проводим мышкой? :shuffle: (типа _ControlGetHovered()).

Oldschool
14-10-2007, 13:02
работа с Auto3Lib _ListView_

$hListVie = ControlGetHandle("WindowTitle", "", "SysListView323")
_ListView_Scroll($hListVie, 0, 0)
$Item = 11
_ListView_ClickItem($hListVie, $Item, "Left", False, 1, 0)

как считать эту линию?

$ItemText = _ListView_GetItemText($Item, "") ?

или если надо проверить текст линии

$sText = mytext
If _ListView_FindInText($Item, $sText) = 0 Then
Blah blah blah...

это правильный syntax? _ListView_FindInText() возвращает что то?

Maza Faka
14-10-2007, 16:36
Oldschool
как считать эту линию?
В смысле считать? Вернуть текст из элемента ListView? Попробуй так:

#include <GUIConstants.au3>
#include <GUIListView.au3>

GUICreate("Drop_Gui", 420, 310, -1, -1, $WS_OVERLAPPEDWINDOW, $WS_EX_ACCEPTFILES)

$input = GUICtrlCreateInput("", 50, 10, 200, 20, BitOR($ES_CENTER, $ES_AUTOHSCROLL), $WS_EX_CLIENTEDGE)
GUICtrlSetState(-1, $GUI_DROPACCEPTED)

$ListView = GUICtrlCreateListView("Selected files", 50, 50, 320, 200, $LVS_SORTASCENDING, $LVS_EX_FULLROWSELECT + $LVS_EX_GRIDLINES)
_GUICtrlListViewSetColumnWidth($ListView, 0, 320)

$add = GUICtrlCreateButton("Add", 260, 10, 50, 22)
$read = GUICtrlCreateButton("Read", 320, 10, 50, 22)

GUISetState()

While 1
$msg = GUIGetMsg()

Select
Case $msg = $GUI_EVENT_CLOSE
ExitLoop

Case $msg = $read
$LV_Item_text = _GUICtrlListViewGetItemText($ListView, _GUICtrlListViewGetCurSel($ListView))
MsgBox(0, "Item text", $LV_Item_text)

Case $msg = $add
$inputRead = GUICtrlRead($input)
If Not $inputRead = "" Then GUICtrlCreateListViewItem($inputRead, $ListView)

EndSelect
WEnd

Всё это есть в справке ;)

Oldschool
14-10-2007, 17:20
при чем ту GUI я не понял , ты вообще о чем?

я пытаюсь считать текст с ListView32 в чужой проге...здесь я беру окно:

$hListVie = ControlGetHandle("WindowTitle", "", "SysListView323")

здесь я ставлю мышку на одинадцатаю линию этого ListView:

$Item = 11
_ListView_ClickItem($hListVie, $Item, "Left", False, 1, 0)

теперь я хочу прочитать эту линию с помощью

_ListView_GetItemText()

например вот так:

$Title = _ListView_GetItemText($hListVie, $Item, $Item)

а потом сравнить ее с другим текстом вот так например

If StringInStr($Title, $sText) Then
и т.д и т.п

мой вопрос конкретно про _ListView_GetItemText т.к в данном виде неполучается чего то




© OSzone.net 2001-2012