PDA

Показать полную графическую версию : [Архив - Часть 3] 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 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78

HORRIBLE
08-02-2008, 00:10
Creat0R,

Спасибо.

только вот ReDim $aData_Inputs[$aData_Inputs[0]+1]
[0]+1 что это делает?

а с другим моим вопросом, по поводу екселя, нет никаких соображений?

Creat0R
08-02-2008, 03:27
HORRIBLE, [0]+1 что это делает?
При (пере)обьявлении массива, добавляет ещё один элемент (ячейку), а когда заполняем данные, то используем текущую ячейку (из [0]).

а с другим моим вопросом, по поводу екселя, нет никаких соображений?
Нет, я с Excel не очень знаком. У меня даже в Office его кажется нету.

amel27
08-02-2008, 04:22
а с другим моим вопросом, по поводу екселя, нет никаких соображений? »
ходи сюда: ExcelCOM UDF (http://www.autoitscript.com/forum/index.php?showtopic=34302&hl=_Excel*) - качай UDF и смотри примеры :)

thief_89
08-02-2008, 08:18
Creat0R

вот в принцыпе такой простенький скрипт

Dim $date = @MDAY&@MON&@YEAR
Dim $path = 'D:\my documents\victor_docs\backup\'& @MDAY&@MON&@YEAR

DirCreate($path)
DirCopy(@ScriptDir & '\to_work', $path, 1)
MsgBox(0, "BuckUP", "Копирование завершено")

Maza Faka
08-02-2008, 08:29
thief_89
; Windows - copy with progress
; Author - JdeB

;~ 4 Do not display a progress dialog box.
;~ 8 Give the file being operated on a new name in a move, copy, or rename operation if a file with the target name already exists.
;~ 16 Respond with "Yes to All" for any dialog box that is displayed.
;~ 64 Preserve undo information, if possible.
;~ 128 Perform the operation on files only if a wildcard file name (*.*) is specified.
;~ 256 Display a progress dialog box but do not show the file names.
;~ 512 Do not confirm the creation of a new directory if the operation requires one to be created.
;~ 1024 Do not display a user interface if an error occurs.
;~ 2048 Version 4.71. Do not copy the security attributes of the file.
;~ 4096 Only operate in the local directory. Don't operate recursively into subdirectories.
;~ 9182 Version 5.0. Do not copy connected files as a group. Only copy the specified files.

_FileCopy("C:\Installed Apps\Patches\WindowsXP-KB835935-SP2-ENU.exe","C:\temp")

Func _FileCopy($fromFile,$tofile)
Local $FOF_RESPOND_YES = 16
Local $FOF_SIMPLEPROGRESS = 256
$winShell = ObjCreate("shell.application")
$winShell.namespace($tofile).CopyHere($fromFile,$FOF_RESPOND_YES)
EndFunc

Creat0R
08-02-2008, 08:34
thief_89,
Я (и не только) пару раз приводил примеры тут в теме (возможно осталось в форумных архивах (http://forum.oszone.net/forumdisplay.php?f=61&filter_string=%C0%F0%F5%E8%E2+-+%F7&filter_by=title)), были более продвинутые, а были просто с использованием системного диалога. Нужно просто поискать по темам (возможные поисковые запросы: progress, CopyWithProgress, MoveTo и т.п).

thief_89
08-02-2008, 08:43
Creat0R

ок, спасибо щас буду искать.

Maza Faka

спасибо

Creat0R
09-02-2008, 15:57
amel27,
По поводу функции FileSaveDialog...
Diamond её немного переделал (см. далее), чтобы в качестве фильтра можно было указывать обычные круглые скобки, почти как в функции VB(s).

Всё отлично работает, но хотелось бы иметь ещё две возможности:

1) Чтобы можно было указать умолчальное расширение, т.е к примеру у меня в фильтре есть *.au3 и *.gif, и в качестве расширения по умолчанию я указываю *.gif, вот нужно чтобы автоматом в списке функция выбрала это расширение. Сейчас если указать расширение, то оно просто подставляется в случае когда юзер не указал расширение вовсе, но это не подходит (отчасти по причине в хотелке #2 :) ).

2) Чтобы функция возвращала выбранное расширение, если я (как юзер) не указал расширение, но при этом выбрал его в списке, то именно то самое умолчальное расширение будет использовано, хотя не логично брать "старое" расширение когдя юзер выбрал другое из списка. Если функция ещё и выбранное расширение будет возвращать, то можно будет "знать" чего конкретно хочет юзер, и соответственно делать выводы (действия).

;~ В этом варианте можно использовать круглые скобки для "отображаемой части фильтра"...
;~ В самом же фильтре круглые скобки больше не нужны!
;~ Синтаксис:
;~ "Видимый_текст_1|Файловый_фильтр_1|текст_2|фильтр_2|текст_N|фильтр_N"
Func _FileSaveDialog($sTitle, $sInitDir, $sFilter = 'All (*.*)', $iOpt = 0, $sDefaultFile = "", $sDefaultExt = "", $hWnd = 0)
Local $iFileLen = 65536 ; Max chars in returned string
; API flags prepare
Local $iFlag = BitOR(BitShift(BitAND($iOpt, 2), -10), BitShift(BitAND($iOpt, 16), 3))
; Filter string to array convertion
Local $asFLines = StringSplit($sFilter, '|')
Local $i, $suFilter = ''
For $i = 1 To $asFLines[0] Step 2
If $i < UBound($asFLines) Then _
$suFilter &= 'byte[' & StringLen($asFLines[$i]) + 1 & '];char[' & StringLen($asFLines[$i+1]) + 1 & '];'
Next
; Create API structures
Local $uOFN = DllStructCreate('dword;int;int;ptr;ptr;dword;dword;ptr;dword' & _
';ptr;int;ptr;ptr;dword;short;short;ptr;ptr;ptr;ptr;ptr;dword;dword')
Local $usTitle = DllStructCreate('char[' & StringLen($sTitle) + 1 & ']')
Local $usInitDir = DllStructCreate('char[' & StringLen($sInitDir) + 1 & ']')
Local $usFilter = DllStructCreate($suFilter & 'byte')
Local $usFile = DllStructCreate('char[' & $iFileLen & ']')
Local $usExtn = DllStructCreate('char[' & StringLen($sDefaultExt) + 1 & ']')
For $i = 1 To $asFLines[0]
DllStructSetData($usFilter, $i, $asFLines[$i])
Next
; Set Data of API structures
DllStructSetData($usTitle, 1, $sTitle)
DllStructSetData($usInitDir, 1, $sInitDir)
DllStructSetData($usFile, 1, $sDefaultFile)
DllStructSetData($usExtn, 1, $sDefaultExt)
DllStructSetData($uOFN, 1, DllStructGetSize($uOFN))
DllStructSetData($uOFN, 2, $hWnd)
DllStructSetData($uOFN, 4, DllStructGetPtr($usFilter))
DllStructSetData($uOFN, 7, 1)
DllStructSetData($uOFN, 8, DllStructGetPtr($usFile))
DllStructSetData($uOFN, 9, $iFileLen)
DllStructSetData($uOFN, 12, DllStructGetPtr($usInitDir))
DllStructSetData($uOFN, 13, DllStructGetPtr($usTitle))
DllStructSetData($uOFN, 14, $iFlag)
DllStructSetData($uOFN, 17, DllStructGetPtr($usExtn))
DllStructSetData($uOFN, 23, BitShift(BitAND($iOpt, 32), 5))
; Call API function
Local $sRet = DllCall('comdlg32.dll', 'int', 'GetSaveFileName', 'ptr', DllStructGetPtr($uOFN))

If $sRet[0] Then Return StringStripWS(DllStructGetData($usFile, 1), 3)
Return SetError(1, 0, "")
EndFunc ;==>_FileSaveDialog
тег [ht] имеет характерный javascript'у баг - одиночная кавычка в названии текста (сылки) делает тег не рабочим :()

P.S
Я пробовал разного рода манипулляции с DllStructGetData(), почти все структуры перепотрошил, но немогу найти нужные мне данные (хотябы чтобы вернуть выбранное расширение).

amel27
11-02-2008, 05:25
Сейчас если указать расширение, то оно просто подставляется в случае когда юзер не указал расширение вовсе »Такое поведение прописано в MSDN для "умолчального" расширения, собственно в этой фиче нет большого смысла если научить функцию возвращать выбранный фильтр - можно тем же RegExp проверить наличие расширения и добавить при необходимости.

Если функция ещё и выбранное расширение будет возвращать, то можно будет "знать" чего конкретно хочет юзер, и соответственно делать выводы (действия). »Все возможные фильтры нумеруются по порядку следования/отображения начиная с 1, индекс выбранного пользователем фильтра сохраняется в структуре под индексом 7 (nFilterIndex), в принципе его тоже можно вывести... только нужно определиться куда и в каком виде. :)

тут есть еще одна тонкость - пользователь может задать свой фильтр (nFilterIndex=0), судя по доке ф-ция поддерживает фиксирование такого фильтра... но для этого нужно инициализировать дополнительные структуры (lpstrCustomFilter, nMaxCustFilter).

Creat0R
11-02-2008, 06:05
amel27, Такое поведение прописано в MSDN для "умолчального" расширения
Я так и понял.

собственно в этой фиче нет большого смысла если научить функцию возвращать выбранный фильтр - можно тем же RegExp проверить наличие расширения и добавить при необходимости.
Однозначно!
Но всё же хотелось бы чтобы эта (подобная) фича устанавливала выбранный фильтр.

Все возможные фильтры нумеруются по порядку следования/отображения начиная с 1, индекс выбранного пользователем фильтра сохраняется в структуре под индексом 7 (nFilterIndex), в принципе его тоже можно вывести... только нужно определиться куда и в каком виде.
Нука попробуем... а в каком виде, это не проблема, в массиве можно, или лучше наверное в @extended (как индекс).

тут есть еще одна тонкость - пользователь может задать свой фильтр (nFilterIndex=0)
Имеется в виду ручной ввод фильтра в поле для вода имени файла? Я почему то думал что это баг (при чём забавный) виндоуса. Ну это вобщем не моя проблема, а уже пользователя ;) - Пока такое поведение приемлемо во всех других программах, я спокоен :)

судя по доке ф-ция поддерживает фиксирование такого фильтра
Т.е предотвращение ручного ввода фильтра? Было бы неплохо, хоть и не критично.

Creat0R
11-02-2008, 06:48
amel27,
Спасибо огромное!

Получилось и то и другое:


$hWnd = WinGetHandle("")
$sFilter = "Text File (*.txt)|*.txt|AutoIt v3 Script (*.au3)|*.au3|All (*.*)|*.*"

$Ret = _FileSaveDialog("Save as", "C:\", $sFilter, 18, "New Script", 2, $hWnd)

If Not @error Then MsgBox(64, "Results", StringFormat("Saved as: %s\n\nSelected Filter Index: %d", $Ret, @extended))

Func _FileSaveDialog($sTitle, $sInitDir, $sFilter='All (*.*)', $iOpt=0, $sDefFile='', $iDefFilter=1, $hWnd=0)
Local $iFileLen = 65536 ; Max chars in returned string

; API flags prepare
Local $iFlag = BitOR(BitShift(BitAND($iOpt, 2), -10), BitShift(BitAND($iOpt, 16), 3))

; Filter string to array convertion
Local $asFLines = StringSplit($sFilter, '|')
Local $i, $suFilter = ''

For $i = 1 To $asFLines[0] Step 2
If $i < UBound($asFLines) Then _
$suFilter &= 'byte[' & StringLen($asFLines[$i]) + 1 & '];char[' & StringLen($asFLines[$i+1]) + 1 & '];'
Next

; Create API structures
Local $uOFN = DllStructCreate('dword;int;int;ptr;ptr;dword;dword;ptr;dword' & _
';ptr;int;ptr;ptr;dword;short;short;ptr;ptr;ptr;ptr;ptr;dword;dword')
Local $usTitle = DllStructCreate('char[' & StringLen($sTitle) + 1 & ']')
Local $usInitDir = DllStructCreate('char[' & StringLen($sInitDir) + 1 & ']')
Local $usFilter = DllStructCreate($suFilter & 'byte')
Local $usFile = DllStructCreate('char[' & $iFileLen & ']')
Local $usExtn = DllStructCreate('char[1]')

For $i = 1 To $asFLines[0]
DllStructSetData($usFilter, $i, $asFLines[$i])
Next

; Set Data of API structures
DllStructSetData($usTitle, 1, $sTitle)
DllStructSetData($usInitDir, 1, $sInitDir)
DllStructSetData($usFile, 1, $sDefFile)
DllStructSetData($usExtn, 1, "")
DllStructSetData($uOFN, 1, DllStructGetSize($uOFN))
DllStructSetData($uOFN, 2, $hWnd)
DllStructSetData($uOFN, 4, DllStructGetPtr($usFilter))
DllStructSetData($uOFN, 7, $iDefFilter)
DllStructSetData($uOFN, 8, DllStructGetPtr($usFile))
DllStructSetData($uOFN, 9, $iFileLen)
DllStructSetData($uOFN, 12, DllStructGetPtr($usInitDir))
DllStructSetData($uOFN, 13, DllStructGetPtr($usTitle))
DllStructSetData($uOFN, 14, $iFlag)
DllStructSetData($uOFN, 17, DllStructGetPtr($usExtn))
DllStructSetData($uOFN, 23, BitShift(BitAND($iOpt, 32), 5))

; Call API function
Local $aRet = DllCall('comdlg32.dll', 'int', 'GetSaveFileName', 'ptr', DllStructGetPtr($uOFN))
If Not IsArray($aRet) Or Not $aRet[0] Then Return SetError(1, 0, "")

;Return Results
Local $sRet = StringStripWS(DllStructGetData($usFile, 1), 3)
Return SetExtended(DllStructGetData($uOFN, 7), $sRet) ;@extended is the 1-based index of selected filer
EndFunc

Я убрал параметр $sDefaultExt, в функции он установлен как пустое значение, чтобы если не присвоено расширение, подставлялось именно то, которое указано в выбранном фильтре.
Вместо этого параметра добавлен параметр $iDefFilter, указывает умолчальный фильтр (по индексу).

amel27
11-02-2008, 08:00
предотвращение ручного ввода фильтра? »нет, просто при желании можно посмотреть что вбил пользователь :) ...опять же надо куда-то это выводить

Creat0R
11-02-2008, 09:22
amel27,
опять же надо куда-то это выводить »
В массив уже тогда :) - если оно не сложно, покажи приминение.

У меня тут появилась другая хотелка, возможо она окажется не такой уж простой для реализации :tomato2: ...

Чтобы к имени файла (если оно введено), добавлялось расширение при переключении фильтра (и если расширения ещё нет :)). Полагаю тут придётся CallBack подключать, чтобы проверять действия, т.к вызов функции останавливается на момент показа дилога сохранения. Или даже с CallBack это трудно реализовать? я такое в некоторых программах видел, например в любимой Opera (http://opera.com) :yes: .

amel27
11-02-2008, 12:39
если оно не сложно, покажи приминение »
только для демонстрации - пример изменений в UDF для получения строки фильтра:; Объявление в начале UDF
Local $sUserFiler = ""
Local $usUsrFilter = DllStructCreate('byte[254]') ; структура для сохранения фильтра
Local $usUsrFilter1 = DllStructCreate('char[253]', DllStructGetPtr($usUsrFilter)+1) ; пропускаем CHR(0)
; ...
DllStructSetData($uOFN, 5, DllStructGetPtr($usUsrFilter))
DllStructSetData($uOFN, 6, 254)
; ...
Local $sRet = DllCall('comdlg32.dll', 'int', 'GetSaveFileName', 'ptr', DllStructGetPtr($uOFN))
; ...
If DllStructGetData($uOFN, 7) =0 Then
$sUserFiler = DllStructGetData($usUsrFilter1, 1) ; строка фильтра
EndIf
Полагаю тут придётся CallBack подключать, чтобы проверять действия »честно говоря не вижу доступных сообщений (http://msdn2.microsoft.com/en-us/library/ms674697(VS.85).aspx), которые могли бы быть полезными в решении этой хотелки

Creat0R
11-02-2008, 14:58
amel27, пример изменений в UDF для получения строки фильтра
Странно, ввожу свой фильтр, но DllStructGetData($uOFN, 7) возвращает тот, который указан в списке :idontnow:

честно говоря не вижу доступных сообщений, которые могли бы быть полезными в решении этой хотелки
Жалко... но я вот думал больше в сторону постоянной проверки как бы из вне (по таймеру), вот так примерно:


$hWnd = WinGetHandle("")
$sFilter = "Text File (*.txt)|*.txt|AutoIt v3 Script (*.au3)|*.au3|All (*.*)|*.*"

$Ret = _FileSaveDialog("Save as", "C:\", $sFilter, 18, "New Script", 2, $hWnd)

If Not @error Then MsgBox(64, "Results", StringFormat("Saved as: %s\n\nSelected Filter Index: %d", $Ret, @extended))

Func _FileSaveDialog($sTitle, $sInitDir, $sFilter = 'All (*.*)', $iOpt = 0, $sDefFile = '', $iDefFilter = 1, $hWnd = 0)
Local $iFileLen = 65536 ; Max chars in returned string

; API flags prepare
Local $iFlag = BitOR(BitShift(BitAND($iOpt, 2), -10), BitShift(BitAND($iOpt, 16), 3))

; Filter string to array convertion
Local $asFLines = StringSplit($sFilter, '|')
Local $i, $suFilter = ''

For $i = 1 To $asFLines[0] Step 2
If $i < UBound($asFLines) Then _
$suFilter &= 'byte[' & StringLen($asFLines[$i]) + 1 & '];char[' & StringLen($asFLines[$i + 1]) + 1 & '];'
Next

; Create API structures
Local $uOFN = DllStructCreate('dword;int;int;ptr;ptr;dword;dword;ptr;dword' & _
';ptr;int;ptr;ptr;dword;short;short;ptr;ptr;ptr;ptr;ptr;dword;dword')
Local $usTitle = DllStructCreate('char[' & StringLen($sTitle) + 1 & ']')
Local $usInitDir = DllStructCreate('char[' & StringLen($sInitDir) + 1 & ']')
Local $usFilter = DllStructCreate($suFilter & 'byte')
Local $usFile = DllStructCreate('char[' & $iFileLen & ']')
Local $usExtn = DllStructCreate('char[1]')

For $i = 1 To $asFLines[0]
DllStructSetData($usFilter, $i, $asFLines[$i])
Next

; Set Data of API structures
DllStructSetData($usTitle, 1, $sTitle)
DllStructSetData($usInitDir, 1, $sInitDir)
DllStructSetData($usFile, 1, $sDefFile)
DllStructSetData($usExtn, 1, "")
DllStructSetData($uOFN, 1, DllStructGetSize($uOFN))
DllStructSetData($uOFN, 2, $hWnd)
DllStructSetData($uOFN, 4, DllStructGetPtr($usFilter))
DllStructSetData($uOFN, 7, $iDefFilter)
DllStructSetData($uOFN, 8, DllStructGetPtr($usFile))
DllStructSetData($uOFN, 9, $iFileLen)
DllStructSetData($uOFN, 12, DllStructGetPtr($usInitDir))
DllStructSetData($uOFN, 13, DllStructGetPtr($usTitle))
DllStructSetData($uOFN, 14, $iFlag)
DllStructSetData($uOFN, 17, DllStructGetPtr($usExtn))
DllStructSetData($uOFN, 23, BitShift(BitAND($iOpt, 32), 5))

;Set Timer to check FileName Input for file extention
Local $hCallBack = DllCallbackRegister ("_Check_FSD_Input", "none", "hwnd;int;int;dword")
Local $ahTimer = DllCall("user32.dll", "int", "SetTimer", "hwnd", 0, _
"int", TimerInit(), "int", 200, "ptr", DllCallbackGetPtr ($hCallBack))

; Call API function
Local $aRet = DllCall('comdlg32.dll', 'int', 'GetSaveFileName', 'ptr', DllStructGetPtr($uOFN))
If Not IsArray($aRet) Or Not $aRet[0] Then Return SetError(1, 0, "")

;Fre CallBack and kill the timer
DllCallBackFree ($hCallBack)
DllCall("user32.dll", "int", "KillTimer", "hwnd", 0, "int", $ahTimer)

;Return Results
Local $sRet = StringStripWS(DllStructGetData($usFile, 1), 3)
Return SetExtended(DllStructGetData($uOFN, 7), $sRet) ;@extended is the 1-based index of selected filer
EndFunc ;==>_FileSaveDialog

Func _Check_FSD_Input($hWndGUI, $MsgID, $WParam, $LParam)
Local $sSaveAs_Title = "[CLASS:#32770;TITLE:Save as]"

If ControlGetFocus($sSaveAs_Title, "FolderView") = "Edit1" Then Return

Local $sEdit_Data = ControlGetText($sSaveAs_Title, "FolderView", "Edit1")
Local $sFilter_Ext = ControlCommand($sSaveAs_Title, "FolderView", "ComboBox3", "GetCurrentSelection")
$sFilter_Ext = StringRegExpReplace($sFilter_Ext, ".*\(\*(.*?)\)$", "\1")

If $sFilter_Ext = ".*" Then $sFilter_Ext = ""

Local $sEdit_Ext = StringRegExpReplace($sEdit_Data, "^.*\.", ".")

If $sEdit_Ext <> $sFilter_Ext And ($sEdit_Ext <> $sEdit_Data Or $sFilter_Ext <> "") Then
$sEdit_Data = StringRegExpReplace($sEdit_Data, "\.[^.]*$", "")
ControlSetText("[CLASS:#32770;TITLE:Save as]", "FolderView", "Edit1", $sEdit_Data & $sFilter_Ext)
EndIf
EndFunc ;==>_Check_FSD_Input

Dmurr
11-02-2008, 22:45
Всем доброго времени суток! Не могли бы вы разъяснить, как выдрать из виндов букву cd-romа... т.к. буквы у на многих компах разные нужно точное выдирание буквы диска... ибо хочется сделать диск полностью самоустанавливающийся.... просмотрев справку и архив форума не нашел ни одной справки по решению данной проблемы... может кто поможет...

Creat0R
12-02-2008, 00:57
Dmurr,
как выдрать из виндов букву cd-romа
Использовать функцию DriveGetDrive...


$aDrives = DriveGetDrive("CDROM")
$sDrives = ""

For $i = 1 To UBound($aDrives)-1
$sDrives &= StringUpper($aDrives[$i]) & "\" & @CRLF
Next

If $sDrives <> "" Then MsgBox(64, "Найденные CD-ROM'ы", StringFormat("Найдено <%d> CD-ROM('а):\n\n%s", $aDrives[0], $sDrives))

Dmurr
12-02-2008, 01:04
Спасибо, большое... ^_^

Creat0R
12-02-2008, 02:40
amel27,
На оф. форуме выложили (http://www.autoitscript.com/forum/index.php?s=&showtopic=64057&view=findpost&p=477865) подобные функии, там можно указать имя CallBack функции, которая будет вызываться при поступлении сообщении.
Сами UDF'ы немного запутаны для разбора, но мне удалось выявить, что при смене фильтра, поступает сообщение 49263 (его константа мне не известна конечно). Я правда не уверен что оно касается фильтра, возможно это просто сообщение связанное с перерисовкой диалога.

Кстати, в одной из следующих версии, планируют (http://svn.autoitscript.com/trac/ticket/39) уже встроенные функции переделать, как я понял будут поддерживать дополнитеьный параметр hWnd. Видимо мои просьбы повлияли ;)

[hr]

У меня тут есть проблема (http://www.autoitscript.com/forum/index.php?s=&showtopic=63855&view=findpost&p=476451) немного поважнее, нужно проверять нажатие левой кнопки мышки, но при этом предотвратить клик мышки.
Т.е пока запущена определённая функция (в цикле), нажатие мышки (левую кнопку) нужно отключить, но чтобы можно было отследить, нажал ли юзер на эту кнопку (_IsPressed("01")).

Это вообще реально на AutoIt? я такое поведение видел в программах для захвата изображении, когда юзер выбирает определённую часть окна, и затем кликает там для захвата, в том месте где он кликнул, ничего не происходит, т.е клиентская часть окна по которой он кликнул, не берёт на себя фокус.
Я тоже делаю (точнее почти закончил) нечто похожее, утилитку для захвата изображении, как с этим вопросом решусь, выложу тут :)

amel27
12-02-2008, 06:19
Странно, ввожу свой фильтр, но DllStructGetData($uOFN, 7) возвращает тот, который указан в списке »хм... действительно, хотя сам текст фильтра обновляет нормально :dont-know
вот так примерно »впечатляет... :) Имхо идентификации окна по одному заголовку маловато, надо проверять на его принадлежность текущему процессу, вдруг другие приложения/скрипты тоже запустят запрос на открытие/сохранение?.. Типа такого:Func _WinIsMy($hwnd)
Local $uPID = DllStructCreate("dword")
Local $aRet = DllCall("user32.dll", 'int', 'GetWindowThreadProcessId', _
'hwnd', $hwnd, _
'ptr', DllStructGetPtr($uPID))
$aRet = DllCall("kernel32.dll", 'int', 'GetCurrentProcessId')
Return $aRet=DllStructGetData($uPID,1)
EndFunc
как я понял будут поддерживать дополнитеьный параметр hWnd »давно пора, хотя "хотелки" растут быстрее чем их релизы :)




© OSzone.net 2001-2012