Помогите, несколько простых вопросов

andreytupa

Новичок
Автор темы
3
0
Привет, только сел за ахк, создал диалог и не знаю как сделать несколько строчек, 2,3 или более. Потом как сделать так, чтобы при нажатии на строку, в чат отсылалось сообщение? И последние как сделать, допустим, я во фракции армии, мне показывают паспорт, там написано армия лва и звание, мне нужно, если там написано где он состоит и его звание писалось в чат: /r В часть прибыл майор жмышенко. Пожалуйста, помогите
 

HURACAN

Известный
42
3
udf:
Код:
LineResult() {
    if (!isDialogOpen() || getDialogStyle() = 0 || getDialogStyle() = 1 || getDialogStyle() = 3)
        return false
    while (isDialogOpen())
        continue
    if(GetKeyState("Esc", "P"))
        return false
    return getDialogLineNumber()
}

code
Код:
!1::
ShowDialog(2,"Помощь", "Строка 1`nСтрока 2`n", "Закрыть")
        Result := LineResult()
        if (!Result)
            return
                if (Result == "1") {
                Sleep, 50
                sendchat("Твой код")
                } else if (Result == "2") {
                                Sleep, 50
                          sendchat("Твой код")
                            }
return

Для паспорта, нужен текст из диалога.

Откроешь паспорт и нажми ALT + 2, после текст из паспорта копируется в буфер.

Код:
getDialogText()
{
if(!checkHandles())
return ""
dwAddress := readDWORD(hGTA, dwSAMP + 0x21A0FC)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
dwAddress := readDWORD(hGTA, dwAddress + 0x1C)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
text := readString(hGTA, dwAddress, 1024)
if(ErrorLevel) {
ErrorLevel := ERROR_READ_MEMORY
return ""
}
ErrorLevel := ERROR_OK
return text
}
; # By Phoenixxx_Czar      
Copy(Text, LocaleID=0x419)
{
    CF_TEXT:=1, CF_LOCALE:=16, GMEM_MOVEABLE:=2
    TextLen :=StrLen(Text)
    HmemText :=DllCall("GlobalAlloc", "UInt", GMEM_MOVEABLE, "UInt", TextLen+1) ; Запрос перемещаемой
    HmemLocale:=DllCall("GlobalAlloc", "UInt", GMEM_MOVEABLE, "UInt", 4) ; памяти, возвращаются хэндлы.
    If(!HmemText || !HmemLocale)
        Return
    PtrText :=DllCall("GlobalLock", "UInt", HmemText) ; Фиксация памяти, хэндлы конвертируются
    PtrLocale :=DllCall("GlobalLock", "UInt", HmemLocale) ; в указатели (адреса).
    DllCall("msvcrt\memcpy", "UInt", PtrText, "Str", Text, "UInt", TextLen+1, "Cdecl") ; Копирование текста.
    NumPut(LocaleID, PtrLocale+0) ; Запись идентификатора локали.
    DllCall("GlobalUnlock", "UInt", HmemText) ; Расфиксация памяти.
    DllCall("GlobalUnlock", "UInt", HmemLocale)
    If not DllCall("OpenClipboard", "UInt", 0) ; Открытие буфера обмена.
    {
        DllCall("GlobalFree", "UInt", HmemText) ; Освобождение памяти,
        DllCall("GlobalFree", "UInt", HmemLocale) ; если открыть не удалось.
        Return
    }
    DllCall("EmptyClipboard") ; Очистка.
    DllCall("SetClipboardData", "UInt", CF_TEXT, "UInt", HmemText) ; Помещение данных.
    DllCall("SetClipboardData", "UInt", CF_LOCALE, "UInt", HmemLocale)
    DllCall("CloseClipboard") ; Закрытие.
}

!2::
copy(getdialogtext()) ; текст копируется в буфер, после скинешь текст.
return
 
Последнее редактирование: