Ru-Board.club
← Вернуться в раздел «Программы»

» AutoIT

Автор: Tipulatoid
Дата сообщения: 04.11.2008 00:05
Maza Faka
Спасибо за ссылки. Все вроде по ним понятно. Однако чего-то окончательный вариант написать не могу. вот что есть пока:

Код: #Include <WindowsConstants.au3>
#include <GuiConstantsEx.au3>
#include <GuiRichEdit.au3>
#include <MouseSetOnEvent_UDF.au3>
#include <Array.au3>

$MainColor = 0x00FF00 ; зеленый
$FailureColor = 0x0000FF ; красный
$SuccessColor = 0xFFBA00 ; голубой
$BackgroundColor = 0x000000 ; черный
$BeginColor = 0xFF4DFF ; фиолетовый
$TimerColor = 0x00FEFE ; желтый

$TABS = @TAB & @TAB

$GUI = GUICreate("Лог",700,600)
$hRichText = RichText_Create($GUI, 0, 0, 700, 500)
RichText_BkColor ($hRichText, $BackgroundColor)
$Button = GUICtrlCreateButton ("Скопировать лог в буфер обмена", 250, 520, 200, 51)
ControlFocus ($GUI, '',$Button)
GUICtrlSetState (-1, $GUI_DISABLE)


GUISetState()

_Archive_Process()

$Count = 0
While 1
        Switch GUIGetMsg()
            Case $GUI_EVENT_CLOSE
                ExitLoop
             Case $Button
                MsgBox(0, "", "Нажата кнопка")
             Case $GUI_EVENT_PRIMARYDOWN
                $Count +=1
                ConsoleWrite ("нажата левая кнопка " & $Count & @CRLF)
                If ControlGetFocus($GUI, $hRichText) <> "" Then
                    ConsoleWrite ("Edit Is Focused" & @CRLF)
                    ControlFocus ($GUI, '',$Button)
                Else
                    ConsoleWrite ("Edit IsNOT Focused" & @CRLF)
                EndIf

             Case $GUI_EVENT_SECONDARYDOWN
                $Count +=1
                ConsoleWrite ("нажата правая кнопка " & $Count & @CRLF)
                If ControlGetFocus($GUI, $hRichText) <> "" Then
                    ConsoleWrite ("Edit Is Focused" & @CRLF)
                    ControlFocus ($GUI, '',$Button)
                Else
                    ConsoleWrite ("Edit IsNOT Focused" & @CRLF)
                EndIf
        EndSwitch
WEnd



Func _Archive_Process ()
     For $q = 1 to 200

        _IsHoveredControl ($GUI, '', $hRichText)

        RichText_SetFont($hRichText, "Tahoma")
        RichText_SetFontSize ($hRichText, 10)
        $begin = TimerInit ()
        RichText_SetColor($hRichText, $BeginColor)
        RichText_AppendText($hRichText, $q & " " & @MDAY & "." & @MON & "." & @YEAR & " " & " " & @HOUR & ":" & @MIN& ":" & @SEC & $TABS)
        ControlFocus ($GUI, '',$Button)
        RichText_SetColor($hRichText, $MainColor)
        RichText_AppendText($hRichText, " Архивирую Dreamers.avi" & $TABS)
        ControlFocus ($GUI, '',$Button)
        Sleep (1)
        RichText_SetBold($hRichText, True)
        If Mod ($q, 2) = 0 Then
            RichText_SetColor($hRichText, $SuccessColor)
            $dif = TimerDiff($begin)
            RichText_AppendText($hRichText, "Успешно!" & $TABS)
            ControlFocus ($GUI, '',$Button)
        Else
            RichText_SetColor($hRichText, $FailureColor)
            $dif = TimerDiff($begin)
            RichText_AppendText($hRichText, "Ошибка!" & $TABS)
            ControlFocus ($GUI, '',$Button)
        EndIf
        RichText_SetColor($hRichText, $TimerColor)
        RichText_SetBold($hRichText, False)
        RichText_AppendText($hRichText, "(" & Round ($dif/1000, 2) & " сек.)" & @CRLF)
        ControlFocus ($GUI, '',$Button)
    Next
    GUICtrlSetState ($Button, $GUI_ENABLE)
    ControlFocus ($GUI, '',$Button)
EndFunc ;==> _Archive_Process

Func _IsHoveredControl ($hWnd, $text, $CtrlID)
    Local $iRet = False
    Local $aWin_Pos = WinGetPos($hWnd)
;     _ArrayDisplay ($aWin_Pos, "координаты окна")
    Local $clientSize = WinGetClientSize($hWnd)
    Local $winBorder = ($aWin_Pos[2] - $clientSize[0]) / 2
    Local $titleBarHeight = $aWin_Pos[3] - $clientSize[1] - $winBorder
    Local $aControl_Pos = ControlGetPos ($hWnd, '', $CtrlID)
    _ArrayDisplay ($aControl_Pos, "координаты контрола")
    Local $aMouse_Pos = MouseGetPos()
;     $controlPosAbsX = $aWin_Pos[0] + $winBorder + $aControl_Pos[0]
;     $controlPosAbsY = $aWin_Pos[1] + $titleBarHeight + $aControl_Pos[1]
;     $controlPosAbsX = $aWin_Pos[0] + $winBorder + 0
;     $controlPosAbsY = $aWin_Pos[1] + $titleBarHeight + 0

;          Local $aMouse_Pos = MouseGetPos()


;     If $aMouse_Pos[0] >= $aWin_Pos[0] And $aMouse_Pos[0] <= ($aWin_Pos[0] + $aWin_Pos[2]) And _
;         $aMouse_Pos[1] >= $aWin_Pos[1] And $aMouse_Pos[1] <= ($aWin_Pos[1] + $aWin_Pos[3]) Then $iRet = True
    
;     Local $aRet = DllCall("user32.dll", "int", "WindowFromPoint", _
;         "long", $aMouse_Pos[0], _
;         "long", $aMouse_Pos[1])
    
;     If Not WinActive($hWnd) Or ($aRet[0] <> $hWnd And Not $iRet) Then $iRet = False
    
;     Return $iRet


EndFunc ;==> _IsHoveredControl
Автор: Maza Faka
Дата сообщения: 04.11.2008 05:48
frb noname

Цитата:

реализовать переход по элементам управления (в частности по полям "input") по нажатию клавиши Энтер.

Что за изврат? Кому это нужно? Чем не устраивает переход по нажатию клавиши "Tab"?


Цитата:

Можно ли эту последовательность изменить произвольно?

Опять же... для чего? Есть ведь функции для установки фокуса.

timsky

Цитата:
Есть такая программа.

Хм... попробуй так:

Код: $login = IniRead(@ScriptDir & '\config.ini', 'Main', 'Login', 'login')
$pass = IniRead(@ScriptDir & '\config.ini', 'Main', 'Pass', 'password')

$type = @ScriptName

Select
Case
$type = 'Login.exe'
While 1
$run = RunAs($login, @ComputerName, $pass, 0, @ScriptDir & '\log.exe ' & $CmdLineRaw, @ScriptDir)
If Not @error Then ExitLoop
MsgBox(16, 'Error #' & @error, 'Error starting log.exe. Trying again...', 1)
WEnd

Case
$type = 'Confirm.exe'
While 1
$run = RunAs($login, @ComputerName, $pass, 0, @ScriptDir & '\conf.exe ' & $CmdLineRaw, @ScriptDir)
If Not @error Then ExitLoop
MsgBox(16, 'Error #' & @error, 'Error starting conf.exe. Trying again...', 1)
WEnd

Case
$type = 'err.exe'
While 1
$run = RunAs($login, @ComputerName, $pass, 0, @ScriptDir & '\Error.exe ' & $CmdLineRaw, @ScriptDir)
If Not @error Then ExitLoop
MsgBox(16, 'Error #' & @error, 'Error starting Error.exe. Trying again...', 1)
WEnd

Case Else

MsgBox(16, 'Error', 'Incorrect EXE name')
EndSelect
Автор: frb noname
Дата сообщения: 04.11.2008 09:24
Maza Faka

Цитата:
Что за изврат? Кому это нужно? Чем не устраивает переход по нажатию клавиши "Tab"?

Ну, почему изврат ? Я привык, например при вводе цифр, пользоваться Энтером - мне так быстрее.
С функцией установки фокуса понятно, спасибо.
Но все же, как отследить нажатие энтера при нахождении в поле, чтобы после этого сменить фокус ?
Спасибо.
Автор: Tipulatoid
Дата сообщения: 04.11.2008 10:12
frb noname

Цитата:
как отследить нажатие энтера


Код: #include <Misc.au3>
$count = 0
While 1
    Sleep (70)
    If _ISpressed ("0D") Then
        $count +=1
        ConsoleWrite ("Enter нажат " & $count & @CRLF)
    EndIf
Wend
Автор: ViSiToR
Дата сообщения: 04.11.2008 12:19
Tipulatoid 01:05 04-11-2008
Цитата:
пытаюсь писать функцию _IsHoveredControl по аналогии с _IsHoveredWnd


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


Код:
$IsHovered = _ControlIsHovered("[CLASS:SciTEWindow]", 350) ;Scintilla1 control

ConsoleWrite($IsHovered)

Func _ControlIsHovered($hWnd, $iCtrlID)
Local $iOld_Opt_MCM, $ahWinFromPoint, $ahGetDlgCtrlID, $ahGetParent, $ahTmp_GetParent

If Not IsHWnd($hWnd) Then $hWnd = WinGetHandle($hWnd)

$iOld_Opt_MCM = Opt("MouseCoordMode", 1)

$ahWinFromPoint = DllCall("user32.dll", "int", "WindowFromPoint", _
"long", MouseGetPos(0), _
"long", MouseGetPos(1))

$ahGetDlgCtrlID = DllCall("user32.dll", "int", "GetDlgCtrlID", "hwnd", $ahWinFromPoint[0])

$ahGetParent = DllCall("user32.dll", "hwnd", "GetParent", "hwnd", $ahWinFromPoint[0])

While 1
$ahTmp_GetParent = DllCall("user32.dll", "hwnd", "GetParent", "hwnd", $ahGetParent[0])
If @error Or Not $ahTmp_GetParent[0] Then ExitLoop

$ahGetParent = $ahTmp_GetParent
WEnd

Opt("MouseCoordMode", $iOld_Opt_MCM)

If $ahGetParent[0] = $hWnd And $ahGetDlgCtrlID[0] = $iCtrlID Then Return True
Return False
EndFunc
Автор: Tipulatoid
Дата сообщения: 04.11.2008 13:02
ViSiToR
Спасибо! Вчера полдня убил, и такого результата не добился.
И поправь, плиз, в примере $hRichText = RichEdit_Create($GUI, 0, 0, 700, 500) на $hRichText = RichText_Create($GUI, 0, 0, 700, 500) А то работать не будет
Автор: ViSiToR
Дата сообщения: 04.11.2008 13:38
Tipulatoid 14:02 04-11-2008
Цитата:
Вчера полдня убил, и такого результата не добился

У разработчиков ушло пару лет на то чтобы добавить поддержку CallBack'ов - А я всего лишь изменил пример с оф. форума.


Цитата:
поправь, плиз, в примере $hRichText

Вообще то у меня даже и с твоим примером не работало, библиотека GuiRichEdit что у меня содержит функции типа _GUICtrlRichEdit_*, у тебя видимо библиотека с этого топика .
Автор: Tipulatoid
Дата сообщения: 04.11.2008 14:06
ViSiToR

Цитата:
у тебя видимо библиотека с этого топика

да, точно

Цитата:
Вообще то у меня даже и с твоим примером не работало

Ты хочешь сказать, что даже не тестишь скрипты прежде чем выложить? Ну ты маг.
Автор: ViSiToR
Дата сообщения: 04.11.2008 14:20
Tipulatoid 15:06 04-11-2008
Цитата:
Ты хочешь сказать, что даже не тестишь скрипты прежде чем выложить?

Ну почему, я всегда стараюсь тестить, если не тестил (значит видимо не с дома пишу, ну или времени нет, ну или код слишком прост ), так и напишу, не тестировалось

Я просто заменил имена функции, _RichText_ на _GUICtrlRichEdit. Поэтому и очепятка в имени функции была .
Автор: elchupakabra
Дата сообщения: 04.11.2008 21:05
Не осилил вопрос сам... подсобите, люди добрые, в решении задачи:
Надо открыть (ассоциированным приложением) в папке несколько pdf файлов, причём имена которых начинаются с определённых символов, т.е., например, по шаблону KME_*.pdf ну и неплохо бы (но это уже совсем не так важно) сигнализировать как-то по окончанию открытия последнего.
Зарание большое спасибо.
Автор: ViSiToR
Дата сообщения: 04.11.2008 22:12
elchupakabra 22:05 04-11-2008
Цитата:
Надо открыть (ассоциированным приложением) в папке несколько pdf файлов, причём имена которых начинаются с определённых символов, т.е., например, по шаблону KME_*.pdf


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


Код:
$sPath = @MyDocumentsDir
$sMask = "KME_*.pdf"

$sLast_File = ""
$hSearch = FileFindFirstFile($sPath & "\" & $sMask)

If $hSearch = -1 Then
MsgBox(16, "Error", "No files/directories matched the search pattern." & @CRLF & @CRLF & "OK ==> EXIT")
Exit
EndIf

While
1
$sPdf_File = FileFindNextFile($hSearch)

If @error Then
MsgBox(262144+64, "Attention", "Last file was open: " & $sLast_File)
ExitLoop
EndIf


$sLast_File = $sPdf_File

ShellExecute($sPdf_File, "", $sPath)
WEnd

FileClose($hSearch)
Автор: timsky
Дата сообщения: 05.11.2008 01:03
Maza Faka
Спасибо, но проблема не в том, что появляется окно с ошибкой, а в том, что после определенного момента скрипт не может запустить приложение под другой учеткой.
Немного почитал хелп и нашел следующее:

Цитата:
If a script using RunAs() happens to be running as the SYSTEM account (for example, if the script is running as a service) and the user's profile is loaded, then you must take care that the script remains running until the child process closes

Это как раз мой случай. Использование RunAsWait не помогло... может чуть позже, но ошибка снова проявляется.
Сейчас попробую Interactive logon with profile флаг...
Автор: timka85
Дата сообщения: 05.11.2008 07:09
Привет! Очень простой вопрос. Нужен скрипт (.exe), включающий всебя два файла: *.reg и главный .exe для конечного запуска программы. Другими словами, должно получиться так, что сначала регистрируется ключ в реестре, а по окончании этого запускается уже зарегистрированная прога.
Кто знает, помогите, пожалуйста.
Автор: Maza Faka
Дата сообщения: 05.11.2008 10:07
timka85
Смотри в справке:

Код:
FileInstall()
RegRead()
RegWrite()
Автор: Tipulatoid
Дата сообщения: 05.11.2008 11:39
Пишу функцию, которая будет рисовать GUI. В зависимости от переданных в нее параметров, некоторые элементы на GUI могут рисоваться, а могут и нет. Как правильно написать цикл While для этого GUI, чтобы в случае если элементы не нарисованы, он не обрабатывал команды Case по этим элементам?
Пробовал If - не получилось. Вариант рисовать необязательные элементы, а потом прятать не подходит.


Код:
While 1
    Switch GUIGetMsg()
    ; обязательные элементы
        Case $GUI_EVENT_CLOSE
            ExitLoop
        Case $WLButton1
            $To = GUICtrlRead ($WLInput1)
            $Subject = GUICtrlRead ($WLInput2)
            $WLetterBody = GUICtrlRead ($WLEdit1)
            _SendWarningLetter ($From, $SMTPServer, $Login, $Passwd, $SMTPPort, $To, $Subject, $WLetterBody)
            ExitLoop
    ; конец обязательных элементов
    
    ; необязательные элементы
        Case $WLIcon4 ; иконка аттача
            ShellExecute($AddedAttachName)
        
        Case $WLLabel3 ; label с именем аттача
            ShellExecute($AddedAttachName)
        
        Case $WLButton2 ; кнопка удалить аттач
            $AddedAttachName = ""
            GUICtrlSetData ($WLLabel3, "")
            GUICtrlSetState ($WLIcon4, $GUI_HIDE)
            GUICtrlSetState ($WLLabel3, $GUI_HIDE)
            GUICtrlSetState ($WLButton2, $GUI_DISABLE)
            GUICtrlSetState ($WLButton3, $GUI_ENABLE)
            GUICtrlSetState ($WLIcon4_1, $GUI_SHOW)
            GUICtrlSetState ($WLIcon4_2, $GUI_HIDE)
            GUICtrlSetState ($WLButton1, $GUI_DISABLE)
        
        Case $WLButton3 ; кнопка вставить аттач
            $AddedAttachName = FileOpenDialog ("Выберите прикладываемый файл", @ScriptDir, "Архивы (*.zip; *.rar)", 1+2, $AddedAttachName, $WarningLetterGUI)
            If $AddedAttachName <> "" Then
                GUICtrlSetData ($WLLabel3, StringRegExpReplace($AddedAttachName, ".*\\", ""))
                GUICtrlSetState ($WLIcon4, $GUI_SHOW)
                GUICtrlSetState ($WLLabel3, $GUI_SHOW)
                GUICtrlSetState ($WLButton2, $GUI_ENABLE)
                GUICtrlSetState ($WLButton3, $GUI_DISABLE)
                GUICtrlSetState ($WLIcon4_1, $GUI_HIDE)
                GUICtrlSetState ($WLIcon4_2, $GUI_SHOW)
                If BitAND(GUICtrlGetState($WLIcon1_2), $GUI_SHOW) And BitAND(GUICtrlGetState($WLIcon2_2), $GUI_SHOW) And BitAND(GUICtrlGetState($WLIcon3_2), $GUI_SHOW) And BitAND(GUICtrlGetState($WLIcon4_2), $GUI_SHOW) Then GUICtrlSetState ($WLButton1, $GUI_ENABLE)
            EndIf
        ; конец необязательных элементов
            
    EndSwitch
WEnd
Автор: timka85
Дата сообщения: 05.11.2008 12:22
Maza Faka

Цитата:
timka85
Смотри в справке:

Код:

FileInstall()
RegRead()
RegWrite()

а где сам справочник?!
Автор: Tipulatoid
Дата сообщения: 05.11.2008 12:47
timka85
Ты, надеюсь, пишешь в Scite, что идет вместе с Auto'it - ом? Набери в нем эти 3 команды, поставь курсор клавиатуры на одну из них и нажми F1
Автор: frb noname
Дата сообщения: 05.11.2008 17:09
не могу в цикле, когда имена инпутов забиты в массив, выполнить по ним
guictrlsetdata($array[$i],""), а вот так работает без проблем :
guictrlsetdata(name1,"")
guictrlsetdata(name2,"")

как сделать через цикл ?
Автор: ViSiToR
Дата сообщения: 05.11.2008 17:32
Tipulatoid 12:39 05-11-2008
Цитата:
Решил, не стоит беспокоиться

Ты бы решение расказал/показал, чтобы при поиске подобного вопроса, могли найти ответ.

timka85 13:22 05-11-2008
Цитата:
а где сам справочник?!

В шапке.

frb noname 18:09 05-11-2008
Цитата:
не могу в цикле, когда имена инпутов забиты в массив, выполнить по ним

Мда, я лично долго над этим думал, не мог понять как это понимать
Вроде понял... Покажи пример того, как помещаются "имена" (хотя там не имена должны быть, а идентификаторы элементов/инпутов) в массив.
Автор: timka85
Дата сообщения: 05.11.2008 19:28
Tipulatoid
Maza Faka
Вы меня простите, но я дуб дубом в скриптах. Может найдет кто из вас пару минут нарисовать один для меня? Я слово волшебное знаю - Бевакаша (иврит)
Автор: timsky
Дата сообщения: 05.11.2008 19:29
Вобщем, так и не получается у меня решить эту траблю
Зато вычислил "условия" появления ошибки.

Первый скрипт (EXE) запускается службой, соответственно, работает под учеткой SYSTEM. Я его выложил на предыдущей странице, его единственная функция - запуск другого скрипта (ЕХЕ) под учетной записью Administrator (он всегда локально залогинен).
Так вот первый скрипт прекрасно запускает 2-й не более 32 раз! Ровно на 33 попытке он обламывается. И с этого момента уже невозможно запустить 2-й скрипт. Помогает только logoff/logon, но это не выход
Уже перерыл все настройки безопасности и учетных записей.
Автор: Tipulatoid
Дата сообщения: 05.11.2008 22:17
frb noname

Цитата:
не могу в цикле, когда имена инпутов забиты в массив, выполнить по ним


Код: For $p = 0 To UBound ($array) - 1
guictrlsetdata($array[$p],"")
Next
Автор: ViSiToR
Дата сообщения: 05.11.2008 23:13
Tipulatoid 23:17 05-11-2008
Цитата:
Решение обыкновенное - я не подумавши написал, что прятать необязательные элементы мне нельзя. Оказалось - можно.

На всякий случай опишу решение и для случая когда элементы не создаются (но проверяются в Case)...

Для этого можно предварительно объявить переменные которые должны содержать идентификаторы элементов, и присвоить им значение -1, тогда при обработке GUIGetMsg() не будет срабатывать условие, т.к нету события которыое идентифицируется как -1. Примерно так:


Код: #include <GuiConstants.au3>

$hGUI = GUICreate("Test Script", 300, 200)

$Child_Button = GUICtrlCreateButton("Button", 20, 40, 60, 20)

GUISetState(@SW_SHOW, $hGUI)

While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
Case
$Child_Button
MyGUI($hGUI, "Child", 1) ;2)
EndSwitch
WEnd

Func
MyGUI($hWnd, $sTitle="Title", $iButtonsNum=2)
Local $nButton1 = -1, $nButton2 = -1
Local $i_Left = (200/2) - 35 ;Center

GUISetState(@SW_DISABLE, $hWnd)
Local $hChild_GUI = GUICreate($sTitle, 200, 130, -1, -1, -1, -1, $hWnd)

If $iButtonsNum = 2 Then
$nButton2 = GUICtrlCreateButton("Cancel", $i_Left + (35 + 10), 100, 70, 20)
$i_Left -= (35 + 10) ;10 to the left, so the both buttons will be at the center
EndIf

$nButton1 = GUICtrlCreateButton("OK", $i_Left, 100, 70, 20)

GUISetState(@SW_SHOW, $hChild_GUI)

While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
ExitLoop
Case
$nButton1
MsgBox(64, "", "Button1 pressed")
ExitLoop
Case
$nButton2
MsgBox(64, "", "Button2 pressed")
EndSwitch
WEnd


GUISetState(@SW_ENABLE, $hWnd)
GUIDelete($hChild_GUI)
EndFunc
Автор: timsky
Дата сообщения: 05.11.2008 23:28
Пробовал запустить ручками

Код: runas /noprofile /user:server\administrator "c:\test\Log.exe 123"
Автор: Tipulatoid
Дата сообщения: 06.11.2008 04:06
timsky

Цитата:
Пробовал запустить ручками


Цитата:
но все равно получаю ошибку:

Т.е. и в обычной cmd не работает? Если да, попробуй спросить в теме Задачи на bat - файлах Там есть спецы.
Автор: frb noname
Дата сообщения: 06.11.2008 08:32
ViSiToR

Цитата:
Мда, я лично долго над этим думал, не мог понять как это понимать
Вроде понял... Покажи пример того, как помещаются "имена" (хотя там не имена должны быть, а идентификаторы элементов/инпутов) в массив.

Насчет имен и идентификаторов точно. Спасибо. Сделал :

Код:
$gob[1]=10
$gob[2]=12
$gob[3]=14
$gob[4]=16
$gob[5]=18
$gob[6]=20
$gob[7]=22
$gob[8]=24
$gob[9]=26
$gob[10]=28
$gob[11]=30
$gob[12]=32
$gob[13]=34
$gob[14]=36
$gob[15]=38

Func clear_all()
For $tmp=1 to 15
guictrlsetdata($gob[$tmp],"")
Next
EndFunc

Автор: timsky
Дата сообщения: 06.11.2008 12:48
Tipulatoid
Спасибо, пойду туда.
Автор: ViSiToR
Дата сообщения: 06.11.2008 15:39
frb noname 09:32 06-11-2008
Цитата:
Как сделать так, чтобы функция срабатывала каждый раз, когда я тыкаю мышкой по списку list1 или хожу курсором


Можно так:


Код: #include <GuiConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GuiListView.au3>

Global $IsListView_Event = False

$hGUI = GUICreate("ListView Get Item Text", 400, 300)

$hListView = GUICtrlCreateListView("Items", 2, 2, 394, 268)

_GUICtrlListView_AddItem($hListView, "Item 1")
_GUICtrlListView_AddItem($hListView, "Item 2")
_GUICtrlListView_AddItem($hListView, "Item 3")

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")

GUISetState()

While GUIGetMsg() <> $GUI_EVENT_CLOSE
If $IsListView_Event <> False Then
$sItemData = $IsListView_Event
$IsListView_Event
= False

Browse_Recno($sItemData)
EndIf
WEnd

Func
WM_NOTIFY($hWnd, $iMsg, $iwParam, $ilParam)
Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
$hWndListView
= $hListView
If Not IsHWnd($hListView) Then $hWndListView = GUICtrlGetHandle($hListView)

$tNMHDR = DllStructCreate($tagNMHDR & ";int Item", $ilParam)

$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")
$iItem = DllStructGetData($tNMHDR, "Item")

Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $NM_CLICK, $LVN_HOTTRACK
$IsListView_Event
= _GUICtrlListView_GetItemText($hWndListView, $iItem)
EndSwitch
EndSwitch

Return
$GUI_RUNDEFMSG
EndFunc

Func
Browse_Recno($sItemData)
Run_sqlite()

_SQlite_Query(-1, "SELECT fam, name, father FROM baza where kod=" & $sItemData & ";", $tmp_rez);=== выборка из базы по условию

While _SQLite_FetchData ($tmp_rez, $aRow) = $SQLITE_OK ;=== отображаем запись в полях формы
GUICtrlSetData($input_fam, $aRow[0])
GUICtrlSetData($input_name, $aRow[1])
GUICtrlSetData($input_father, $aRow[2])
WEnd

Stop_sqlite()
EndFunc
Автор: NIKZZZZ
Дата сообщения: 06.11.2008 18:58
Такой вопросик, нужно было модифицироать BIN фал довольно большого размера.
Читаешь его с помощью
$f = FileOpen("File", 16)
$bF1 = FileRead($f)

и потом модифицируешь его с помощью обычных функций работы со строками. Очень медленно.

Пример - сравнение двух BIN файлов:


Код: $sFile1 = 'file1.bin'
$sFile2 = 'file2.bin'
$sFile3 = 'Result.txt'
$f = FileOpen($sFile1, 16)
$bF1 = FileRead($f)
FileClose($f)
$f = FileOpen($sFile2, 16)
$bF2 = FileRead($f)
FileClose($f)

$iAd = -1
$iCount = 0
$sf3 = ''
For $iAddr = 0 To (StringLen($bF2) - 2) / 2
    If BinaryMid($bF1, $iAddr + 1, 1) <> BinaryMid($bF2, $iAddr + 1, 1) Then
        If $iAd <> $iAddr Then
            $sf3 &= @CRLF & Hex($iAddr, 8) & ':'
            $iCount = 0
            $iAd = $iAddr
        EndIf
        $sf3 &= Hex(BinaryMid($bF2, $iAddr + 1, 1))
        $iAd += 1
        $iCount += 1
        If $iCount = 64 Then
            $iAd = -1
        EndIf
    EndIf
Next

$f = FileOpen($sFile3, 2)
FileWrite($f,$sf3)
FileClose($f)

MsgBox(0, StringLen($bF1), $sf3)
Автор: kpuk
Дата сообщения: 06.11.2008 23:20
Намекните как написать сканер шар с доступом для записи

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

Предыдущая тема: Quintura Search


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.