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

» AutoIT

Автор: ViSiToR
Дата сообщения: 07.02.2008 15:53
XpycTMD

Цитата:
молжно ли сделать скриншот не всего экрана а только определенных координат???

[more=Можно]

Код: #include <GuiConstants.au3>
#include <ScreenCapture.au3>

HotKeySet("{ESC}", "QuitApp")

Global $IsSelectingBegin = False
Global
$aMouse_Cooords[2]

$GUI = GUICreate("Capture Selected Area - Demo", @DesktopWidth, @DesktopHeight, 0, 0, $WS_POPUP, $WS_EX_TOPMOST)
WinSetTrans($GUI, "", 100)

$ListView = GUICtrlCreateListView("", 0, 0, @DesktopWidth, @DesktopHeight, 0)

GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
GUISetState()

While 1
$nMsg = GUIGetMsg()
Select
Case
$nMsg = $GUI_EVENT_CLOSE Or IsArray($aMouse_Cooords[1])
GUIDelete($GUI)
WinWaitClose($GUI)

$aStart_Coords = $aMouse_Cooords[0]
$aEnd_Coords = $aMouse_Cooords[1]

$Left_Pos = $aStart_Coords[0]
$Right_Pos = $aEnd_Coords[0]

If $Left_Pos > $Right_Pos Then
$Left_Pos = $aEnd_Coords[0]
$Right_Pos = $aStart_Coords[0]
EndIf

$Top_Pos = $aStart_Coords[1]
$Bottom_Pos = $aEnd_Coords[1]

If $Top_Pos > $Bottom_Pos Then
$Top_Pos = $aEnd_Coords[1]
$Bottom_Pos = $aStart_Coords[1]
EndIf

$sFileName = FileSaveDialog("Save Capture As...", "", "PNG Image (*.png)", 18, "Captured Image")
If @error Then Exit

If
StringRight($sFileName, 4) <> ".png" Then $sFileName &= ".png"
_ScreenCapture_Capture($sFileName, $Left_Pos-6, $Top_Pos-5, $Right_Pos+2, $Bottom_Pos+2, False)

Exit
EndSelect
WEnd

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

$tNMHDR = DllStructCreate($tagNMHDR, $ilParam)
$hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
$iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
$iCode = DllStructGetData($tNMHDR, "Code")

Switch $hWndFrom
Case $hWndListView
Switch $iCode
Case $LVN_MARQUEEBEGIN
$IsSelectingBegin
= True
$aMouse_Cooords[0] = MouseGetPos()
Case $NM_RELEASEDCAPTURE
If $IsSelectingBegin Then $aMouse_Cooords[1] = MouseGetPos()
EndSwitch
EndSwitch

Return $GUI_RUNDEFMSG
EndFunc

Func QuitApp()
Exit
EndFunc
Автор: U235
Дата сообщения: 07.02.2008 17:17

Цитата:
Внимание: для того чтобы работал OCR (Optical Character Recognation), Требуется *корректно* установлены Office 2003.

ИМХО, возможно проще FineReader использовать, точнее "консольную" программу FineOCR.exe с нужными параметрами.
Автор: NIKZZZZ
Дата сообщения: 07.02.2008 20:40

Цитата:
В SciTE? я не удивлюсь.

Я не про SciTE, а про StringInStr(),StringReplace() и т.п. AutoIT'а.

Цитата:
Выдает ошибку:
Этот код нужно заменить в примере который я приводил

Имеется ввиду пауза? Она ничего не меняет.

Автор: ViSiToR
Дата сообщения: 08.02.2008 02:22

Цитата:
очнее "консольную" программу FineOCR.exe с нужными параметрами.

У меня в своё время не удалось распознать обычное изображение .

NIKZZZZ

Цитата:
Пришлось открывать файлы в режиме +16 ( бинарное представление) и работать уже с ним, что несколько неудобно.

Ну так правильно, Chr(0) вроде не встречается в обычном текстовом формате, чтение в режиме 16 для того и предназначено. А почему это неудобно?



Цитата:
Она ничего не меняет.

Ошибка «The requested action with this object has failed.:» не должна выводится, т.к в начале скрипта задан обработчик COM-ошибок ($oOCR_Error = ObjEvent("AutoIt.Error", "OCRErrFunc")).
Или выводится таже ошибка что и у XpycTMD?
Автор: U235
Дата сообщения: 08.02.2008 08:44
ViSiToR

Цитата:
У меня в своё время не удалось распознать обычное изображение

Странно, у меня в одном из скриптов, фрагмент

Код:
RunWait($FR8_path&"FineOCR.exe pic.tif /lang Russian English /send Clipboard","",@SW_HIDE )
$txt = ClipGet()
Автор: NIKZZZZ
Дата сообщения: 08.02.2008 09:58
ViSiToR

Цитата:
Ну так правильно, Chr(0) вроде не встречается в обычном текстовом формате, чтение в режиме 16 для того и предназначено. А почему это неудобно?

Типичная задача - в нетекстовом файле выполнить замену текста.
В нетекстовом файле найти текст.

Цитата:
Ошибка «The requested action with this object has failed.:» не должна выводится, т.к в начале скрипта задан обработчик COM-ошибок ($oOCR_Error = ObjEvent("AutoIt.Error", "OCRErrFunc")).
Или выводится таже ошибка что и у XpycTMD?

Я его просто выключил. С ним что и у XpycTMD.





Добавлено:

Цитата:
RunWait($FR8_path&"FineOCR.exe pic.tif /lang Russian English /send Clipboard","",@SW_HIDE )
$txt = ClipGet()
очень даже неплохо работает.

Могу подтвердить.

Автор: ViSiToR
Дата сообщения: 08.02.2008 22:46
Есть ещё Gocr (бесплатный, и с открытым кодом), правда передавать ему нужно специальный формат изображения.


NIKZZZZ

Цитата:
Я его просто выключил. С ним что и у XpycTMD.

Ясно, значит видимо в 2007 поменяли методы использования обьекта. Нужно в документации посмотреть...

Добавлено:
XpycTMD
NIKZZZZ

С каким изображением вы пробуете? оказывается есть проблемы с размером изображения...
Автор: NIKZZZZ
Дата сообщения: 09.02.2008 08:48
ViSiToR

Цитата:
С каким изображением вы пробуете?

Вообще-то с маленьким (брал более-менее нормальные картинки с файлообменников). Попробую с другими.

Еще проблемка - не встречалось ли где готовых примеров работы с WinApi ? Интересует в частности чтение-запись файлов с прямым доступом. В пользовательских функциях работы с Api примеры отсутствуют.


Автор: XpycTMD
Дата сообщения: 10.02.2008 07:48
ViSiToR


Цитата:
Можно

Спасибо большое щас попробую


Цитата:
С каким изображением вы пробуете?

Я пробовал только со скриншотом который делает скрипт. Кратинка получается 463х623


Добавлено:
ViSiToR
Попробовал твой скрип. Прикольный Именно то что мне и надо было. Спасибо большое.
Автор: zero1632
Дата сообщения: 11.02.2008 10:29
подскажите, как отслеживать консольные программы, написанные на c++ (предположительно). Выводятся параметры, надо следить за тем, повесилась программа или нет, если параметры в окне меняются - отлично. Нет - закрывам процесс. Проблема в том, что ничего, по мнению autoit (прога для окон - не помню как называется) не выводит. Можно как-то победить?
Автор: ViSiToR
Дата сообщения: 11.02.2008 14:35
AutoIt Path Switcher




Цитата:
Этот небольшой скрипт предназначен для переключения между разными версиями (инстанциями/путями) AutoIt'а.

Очень полезно для иследования новых фич в последней версии AutoIt'a, и в то же время вы имеете возможность дорабатывать ваши скрипты на той версии, для которой они изначально писались.
Или просто хотите паралельно вести два проэкта, один на старой версии, другой на новой .






Цитата:
Выводятся параметры, надо следить за тем, повесилась программа или нет

Это что за такая суицидная программа?


Цитата:
по мнению autoit (прога для окон - не помню как называется)

AutoIt Info Tool.


Цитата:
Можно как-то победить?

Можно пробовать через StdOutRead, но при этом процесс должен быть запущен самим скриптом, иначе нужно искать функции для получения доступа к внешнему процессу.
Автор: zero1632
Дата сообщения: 11.02.2008 22:48

Цитата:
Можно пробовать через StdOutRead, но при этом процесс должен быть запущен самим скриптом, иначе нужно искать функции для получения доступа к внешнему процессу.


блин запустить внешнюю скриптом _КРАЙНЕ_ проблематично, потому -что значит функции для получения доступа к вн.процессу? нельзя это както через api сделать?
Автор: ViSiToR
Дата сообщения: 11.02.2008 23:50
zero1632

Цитата:
что значит функции для получения доступа к вн.процессу? нельзя это както через api сделать?

Это именно через API и делается, но я лично с этим никогда не сталкивался, слышал только на оф. форуме что кто то это делал.
Автор: usr721
Дата сообщения: 12.02.2008 20:49
Ищу замену nncron, есть несколько вопросов:
1. Как сделать сворачивание окон в трей при нажатии шариком по кнопке свернуть?
2. Можно ли использовать как напоминалку? (быстро вбить сообщение и время показа, с возможностью показывать просроченные сообщения)
3. Можно ли использовать какменеджер горячих клавишь?
4. портабельность
Автор: ViSiToR
Дата сообщения: 12.02.2008 23:25
usr721

Цитата:
Как сделать сворачивание окон в трей при нажатии шариком по кнопке свернуть?

Шариком в смысле средней кнопкой мышки? В принципе можно, через API вызовы (отслеживать нажатие). Для внешнего приложения, сворачивание в трей не простая задача, хотя решение точно есть, я сам пример тестировал


Цитата:
Можно ли использовать как напоминалку?


Цитата:
Можно ли использовать какменеджер горячих клавишь?

Можно.


Цитата:
портабельность

Не проблема, AutoIt умеет прекрасно работать с относительными путями. А также определять что скрипт в данное время запущен с флешки .

P.S
В принципе, почти любую задачу которую делает nncron (судя по списку и описанию), AutoIt так или иначе может выполнить.
Автор: XpycTMD
Дата сообщения: 13.02.2008 15:39
Всем привет

Я для своей компании делаю на AutoIt что то типо базы данных.
В "программе" у казывается имя сотрудника и от 4 до 6 дат. Пока даты хранятся в ini'ках для каждого сотрудника свой ini'к.
Я сделал так [more=Код программы]
Код: #NoTrayIcon
#include <GUIConstants.au3>
#include <File.au3>

$Filter = "*.ini"
$Flag = "1"

$dbPatch = "D:\Database\"

$Version = "0.7"
$ProgramTitle = "Crew Manager " & $Version

$GUIWidth
= 800
$GUIHeight = 600
$GUILeft = (@DesktopWidth - $GUIWidth) / 2
$GUITop = (@DesktopHeight - $GUIHeight) / 2
$CrewListTop = 120

$CrewManager = GUICreate($ProgramTitle, $GUIWidth, $GUIHeight, $GUILeft, $GUITop, $WS_VISIBLE + $WS_CLIPSIBLINGS + $WS_OVERLAPPEDWINDOW)
GUISetFont(10, 400, 0, "Tahoma")
GUICtrlCreateLabel("Crew Manager", 210, 0, 555, 65, $SS_CENTER + $SS_CENTERIMAGE)
GUICtrlSetFont(-1, 38, 800, 0, "Tahoma")
GUICtrlSetColor(-1, 0x0000FF)

GUICtrlCreateLabel("PPC", 125, 70, 255, 20, $SS_CENTER + $SS_CENTERIMAGE)
GUICtrlSetFont(-1, 10, 800, 0, "Tahoma")
GUICtrlCreateLabel("PPC Passed Date", 125, 95, 125, 20, $SS_CENTER + $SS_CENTERIMAGE)
GUICtrlSetFont(-1, 10, 800, 0, "Tahoma")
GUICtrlCreateLabel("PPC Next Date", 260, 95, 125, 20, $SS_CENTER + $SS_CENTERIMAGE)
GUICtrlSetFont(-1, 10, 800, 0, "Tahoma")

$Crew = _FileListToArray($dbPatch, $Filter, $Flag)
$PPCPassedDate = $Crew
$PPCPassedDateChecker
= $Crew
$PPCNextDate
= $Crew
$PPCNextDateChecker
= $Crew
For $i = 1 To $Crew[0]
GUICtrlCreateLabel(StringReplace($Crew[$i], ".ini", ""), 10, $CrewListTop, 110, 25, $SS_CENTERIMAGE)
GUICtrlSetFont(-1, 10, 800, 0, "Tahoma")
$PPCPassedDate[$i] = IniRead($dbPatch & $Crew[$i], "PPC", "PPCPassedDate", "0000/00/00")
GUICtrlCreateDate($PPCPassedDate[$i], 125, $CrewListTop, 105, 25, 0)
$PPCPassedDateChecker[$i] = GUICtrlCreateLabel("", 230, $CrewListTop, 25, 25, $WS_BORDER)

$PPCNextDate[$i] = IniRead($dbPatch & $Crew[$i], "PPC", "PPCNextDate", "0000/00/00")
GUICtrlCreateDate($PPCNextDate[$i], 260, $CrewListTop, 105, 25, 0)
$PPCNextDateChecker[$i] = GUICtrlCreateLabel("", 365, $CrewListTop, 25, 25, $WS_BORDER)

$CrewListTop = $CrewListTop + 30
Next

GUISetState(@SW_SHOW)

While 1
Switch GUIGetMsg()
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Автор: Maza Faka
Дата сообщения: 14.02.2008 07:03
XpycTMD
Приведи пример *.ini файла.
Автор: XpycTMD
Дата сообщения: 14.02.2008 07:45
Maza Faka

Crew Memeber 1.ini

Код: [PPC]
PPCPassedDate=Дата
PPCNextDate=Дата
Автор: Fem1
Дата сообщения: 14.02.2008 13:53
Как можно сделать так, что бы при вводе в одну программку, все нажатые клавиши, записывались в файл. Вернее не программа, а игра, хочу сделать, лог всех команд, которые я ввёл.
Неужели надо делать проверку каждой клавиши, через HotKeySet()? Да ещё проверять капслок и зажатый шифт.

При компиляции программка получается 200кб, а есть программы (написаные не в автоит), которые такие же по функциональности, но весят гораздо меньше. Возможно и в автоит компилировать так же?
Автор: XpycTMD
Дата сообщения: 14.02.2008 14:43
Fem1

Есть такая комманда _IsPressed

Пример из справки
Код: #include <Misc.au3>

$dll = DllOpen("user32.dll")

While 1
Sleep ( 250 )
If _IsPressed("23", $dll) Then
MsgBox(0,"_IsPressed", "End Key Pressed")
ExitLoop
EndIf
WEnd

DllClose($dll)
Автор: baic
Дата сообщения: 14.02.2008 18:55
Как запустить ярлык с рабочего стола...скрипт ниже не работает...


Код:
Dim $ShortcutName
Dim $ShortcutPath

$ShortcutName = "Inet1.lnk"
$ShortcutPath=@DesktopCommonDir

ShellExecute($ShortcutPath &"\"& $ShortcutName,"","","Open")
Автор: NIKZZZZ
Дата сообщения: 14.02.2008 18:55
XpycTMD

Цитата:
Как при помощи AutoIt читать вот такие тэги в XML
Код:
<LOG>
<RECORD>
<COLUMN NAME="Time">
<DATE>12.02.2008</DATE>
<TIME>17:38:31</TIME>
</COLUMN>
</RECORD>
</LOG>



Код: $f=FileOpen("log.hml", 0)
$Log = FileRead($f)
FileClose($f)

$a = StringRegExp($Log, '(?i)<date>(.*)</date>', 2)
If Not @error Then
MsgBox(0,"" ,"Date : " & $a[1])
EndIf
$a = StringRegExp($Log, '(?i)<time>(.*)</time>', 2)
If Not @error Then
MsgBox(0,"" ,"Time : " & $a[1])
EndIf
Автор: Fem1
Дата сообщения: 14.02.2008 18:58
_IsPressed() немного не то, придёться так проверять каждую клавишу как я понял, и ещё регистр. Но вообщем то я себе так изначально и представлял.

Ещё вопросик, не могу сделать GUICtrlCreateEdit() не редактируемым. Если только через $GUI_DISABLE, но всё же немого не то.
Автор: ViSiToR
Дата сообщения: 14.02.2008 22:49
Fem1

Цитата:
что бы при вводе в одну программку, все нажатые клавиши, записывались в файл

Это уже похоже на KeyLoger - можно поискать на оф. форуме по запросу «+hook +keyboard».

baic

Цитата:
скрипт ниже не работает...

Для доступа к ярлыку нужно использовать FilGetShortcut()...


Код:
$ShortcutName = "Inet1.lnk"
$ShortcutPath = @DesktopDir

$aShortCut_Data = FileGetShortcut($ShortcutPath & "\" & $ShortcutName)

If IsArray($aShortCut_Data) Then
$sShortcutPath = $aShortCut_Data[0]
$sShortcutWorkDir = $aShortCut_Data[1]
$sShortcutArguments = $aShortCut_Data[2]
$sShortcutDescription = $aShortCut_Data[3]
$sShortcutState = $aShortCut_Data[6]

ShellExecute($sShortcutPath, $sShortcutArguments, $sShortcutWorkDir, "Open", $sShortcutState)
EndIf
Автор: Fem1
Дата сообщения: 15.02.2008 01:19

Цитата:
Это уже похоже на KeyLoger - можно поискать на оф. форуме по запосу «+hook +keyboard».

что то нашёл подобное, макросы делать, буду разбираться)


Цитата:
Задать стиль $ES_READONLY для этого лемента [Image]

вот спасибо, помогло =)

Такая проблема сейчас.

Код:
$z1 = 500
$z = $z1

While 1
If $z = $z1 Then
MyFunc()
$z = 0
EndIf

$z = $z + 1
Wend
Автор: baic
Дата сообщения: 15.02.2008 05:49
ViSiToR

Этот код открывает папку из которой запускается скрипт...ярлык не запускается



Код:
$ShortcutName = "Inet1.lnk"
$ShortcutPath = @DesktopDir

$aShortCut_Data = FileGetShortcut($ShortcutPath & "\" & $ShortcutName)

If IsArray($aShortCut_Data) Then
$sShortcutPath = $aShortCut_Data[0]
$sShortcutWorkDir = $aShortCut_Data[1]
$sShortcutArguments = $aShortCut_Data[2]
$sShortcutDescription = $aShortCut_Data[3]
$sShortcutState = $aShortCut_Data[6]

ShellExecute($sShortcutPath, $sShortcutArguments, $sShortcutWorkDir, "Open", $sShortcutState)
EndIf
Автор: elchupakabra
Дата сообщения: 15.02.2008 06:28
Подскажите пожалуйста (не разобрался в справке):
Задача в определённом файле текстового типа (имеет ли значение тип *.txt, *.ini, *inf ?) заменить/удалить/добавить определённую строку текста.
Ситуации типа: добавить строку с данными в *.ini файл программы, удалить записи из *.inf (при перепаковке драйвера) о "ненужных" файлах/параметрах.
И если можно на примере относительно добавить в определённый участок текста.
Заранее спасибо.
Автор: Maza Faka
Дата сообщения: 15.02.2008 06:46
Fem1

Цитата:
при движении мыши, моя функция срабатывает чаще

У меня работает нормально, не реагируя на движения мыши.

Код: $z1 = 500
$z = $z1

While 1
If $z = $z1 Then
MyFunc()
$z = 0
EndIf
$z = $z + 1
Sleep(30)
Wend

Func
MyFunc()
ConsoleWrite("MyFunc" & @LF)
EndFunc
Автор: Fem1
Дата сообщения: 15.02.2008 07:00
хм, ну не может же это функция виновата, все переменные вроде проверил, $z я там вообще не трогал. Да и в 3.2.2 работает нормально, а в 3.2.10 нет.
Да и почему так не пойму, мышь вроде вообще не трогал в скрипте.
Автор: Maza Faka
Дата сообщения: 15.02.2008 07:07
elchupakabra
Для работы с *.ini файлами есть функции Ini*()
Удалять и добавлять записи в файл можно функциями _FileWriteToLine(), StringReplace()
Смотри в справке, там всё подробно описано и есть примеры.

Добавлено:
baic
У меня работает нормально, проверь путь к ярлыку

Код: $ShortcutName = "RegCleaner.lnk"
$ShortcutPath = @DesktopDir

$aShortCut_Data = FileGetShortcut($ShortcutPath & "\" & $ShortcutName)

If IsArray($aShortCut_Data) Then ShellExecute($aShortCut_Data[0], $aShortCut_Data[2], "", "Open", $aShortCut_Data[6])

Страницы: 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192

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


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