Имя пользователя:
Пароль:
 

Показать сообщение отдельно

Googler


Сообщения: 3665
Благодарности: 1563

Профиль | Отправить PM | Цитировать


Цитата Creat0R:
Прикрепляю реальный пример, вывод в гуи, нормально »
как я себе представляю вывод в юникоде:
Код: Выделить весь код
#include <A3LConstants.au3>

; ...
; Это кусок скрипта между "Case $Get_Button" и "EndSwitch"
            GUICtrlSetData($StatusLabel, "Please wait...")
            $VNameUTF8 = GetName("fQyYG-1nhMA") ;Это видео ролик с YouTube (имя ролика на иврите)
            $VNameUTF16= _Utf8ToUnicode($VNameUTF8) ; Возвращает тип BINARY
            $struUTF16 = DllStructCreate("byte["&BinaryLen($VNameUTF16)&"];byte[2]") ; Структура для UTF-16
            DllStructSetData($struUTF16, 1, $VNameUTF16) ; Заполняем структуру
            GUICtrlSendMsg($Data_Input, $WM_SETTEXT, 0, DllStructGetPtr($struUTF16)) ; Устанавливаем текст контрола
            WriteToLog("Video Name: [" & $VNameUTF8 & "] and data")
            GUICtrlSetData($StatusLabel, "")
; ...

; Функция возвращает тип BINARY
Func _Utf8ToUnicode($UTF8String)
    Local $ret = DllCall("Kernel32.dll", "int", "MultiByteToWideChar", _
        "int", 65001, _
        "int", 0, _
        "str", $UTF8String, _
        "int", -1, _
        "ptr", 0, _
        "int", 0)
    Local $buf = DllStructCreate("byte[" & $ret[0]*2 & "]")
    $ret = DllCall("Kernel32.dll", "int", "MultiByteToWideChar", _
        "int", 65001, _
        "int", 0, _
        "str", $UTF8String, _
        "int", -1, _
        "ptr", DllStructGetPtr($buf), _
        "int", $ret[0])
    Return DllStructGetData($buf, 1)
EndFunc
Цитата Creat0R:
запись в файл - не нормально »
хм, сигнатура должна быть всего одна в начале файла, а у тебя добавляется перед каждой строкой... поэтому лучше не доверять AutoIT и сделать все самому, типа:
Код: Выделить весь код
Func WriteToLog($Line)
    Local $hLogFile, $Log_File = StringTrimRight(@ScriptFullPath, 3) & "log"
    Local $GetDateTime = @HOUR & ":" & @MIN & ":" & @SEC & ", " & @MDAY & "/" & @MON & "/" & @YEAR

        If Not FileExists($Log_File) Then
        $hLogFile = FileOpen($Log_File, 17)
        FileWrite($Log_File, chr(0xEF) & chr(0xBB) & chr(0xBF) & _
        "========================================================================" & @CRLF & _
        "Log File for <" & @ScriptName & "> started at: " & $GetDateTime & @CRLF & _
        "========================================================================" & @CRLF & @CRLF)
    Else
        $hLogFile = FileOpen($Log_File, 17)
    EndIf

    FileWrite($hLogFile, StringToBinary("[" & $GetDateTime & "]" & @CRLF,4))
    FileWrite($hLogFile, StringToBinary(">> ",4) & Binary($Line) & StringToBinary(@CRLF & @CRLF,4))
    FileClose($hLogFile)
EndFunc

Последний раз редактировалось amel27, 23-11-2007 в 07:07. Причина: исправил WriteToLog()

Это сообщение посчитали полезным следующие участники:

Отправлено: 06:24, 23-11-2007 | #747