1

Тема: AHK: Чтение .txt и выполнение команды

Есть .txt файл в нем определенное слово, как сделать чтобы это слово читало и начало выполнять команду.

2

Re: AHK: Чтение .txt и выполнение команды

FileRead.

3 (изменено: KenzoHK, 2017-01-16 19:25:26)

Re: AHK: Чтение .txt и выполнение команды

ypppu, это понятно.
Вот мой код, но он не в какую не хочет выполнять команды.

login:= "чек" 
FileRead, sms, %A_MyDocuments%\GTA San Andreas User Files\SAMP\chatlog.txt    
If string contains %login%
(Дальше идут сами действия)

4

Re: AHK: Чтение .txt и выполнение команды

string - это не часть выражения, а имя переменной. Вам следует на место этого слова подставить sms.

5 (изменено: belyankin12, 2017-01-17 11:17:29)

Re: AHK: Чтение .txt и выполнение команды

Кстати, если так подумать, вы прочитаете все содержимое чатлога. Ваш способ мне кажется не самый безопасный. Так, можно активировать команду любому игроку, что напишет кодовое слово, не так ли?

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

6 (изменено: Indomito, 2017-01-18 01:52:27)

Re: AHK: Чтение .txt и выполнение команды

KenzoHK
Попробуй разбирать каждую строку,  да и "чек" может быть частью слова, желательно использовать ключ, например "%чек".
Хотя, если это единственно слово в строке, то не нужно огород городить, а проще использовать:
— простое чтение строк Loop, Read, InputFile [, OutputFile];
— разбор строки Loop, Parse, InputVar [, Delimiters, OmitChars].


Пример самого простого разбора.

Haystack  := "C:\AHK Compiler\AHK Compiler.exe"
Needle  := "\"
a := InStr(Haystack, Needle , , 0)
vDir := SubStr(Haystack, 1 , a-1)
vFile := SubStr(Haystack, a+1)
MsgBox %vDir% --- %vFile%

Удачи с чеками.

"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download

7

Re: AHK: Чтение .txt и выполнение команды

belyankin12 пишет:

Кстати, если так подумать, вы прочитаете все содержимое чатлога. Ваш способ мне кажется не самый безопасный...

Можно зашифровать содержимое чат-лога, это не сложно.

Например используя  функцию расчёта HASH, ключом будет например EXE-file.

Функция поддерживает HASH типы(MD2/MD5/SHA - поддержка всеми Windows, SHA256/SHA384/SHA512 - не поддерживается Windows XP/2000).

+ Функция fnHASH
;-----------------------------------------------------------------------------------------------------------------
;                                  Функция расчёта контрольной суммы файла
; HASH типы: MD2/MD5/SHA - поддержка всеми Windows, SHA256/SHA384/SHA512 - не поддерживается Windows XP/2000
;-----------------------------------------------------------------------------------------------------------------

;НА ВХОД:
; 1-й параметр(STRING): Полный путь к файлу
; 2-й параметр(STRING): HASH-типы из списка MD2/MD5/SHA/SHA256/SHA384/SHA512

;НА ВЫХОД:
; Или контольная сумма файла(STRING)
; Или слово "ERROR"(STRING)

fnHASH(FilePath, str)
{
  CaseSensitive := False ; Не чувствительность к регистру, те Б = б
  if (str = "MD2")
        vHASH := 1
  Else if (str = "MD5")
        vHASH := 2
  Else if (str = "SHA")
        vHASH := 3
  Else if (str = "SHA256")
        vHASH := 4
  Else if (str = "SHA384")
        vHASH := 5
  Else if (str = "SHA512")
        vHASH := 6
          Else
              Return "ERROR"
  CaseSensitive := True ; Чувствительность к регистру, те Б != б
  ret := HashFile(FilePath,vHASH)
Return ret
}

/*
HASH types:
1 - MD2
2 - MD5
3 - SHA
4 - SHA256 - not supported on XP,2000
5 - SHA384 - not supported on XP,2000
6 - SHA512 - not supported on XP,2000
*/

HashFile(filePath,hashType=2)
{
	PROV_RSA_AES := 24
	CRYPT_VERIFYCONTEXT := 0xF0000000
	BUFF_SIZE := 1024 * 1024 ; 1 MB
	HP_HASHVAL := 0x0002
	HP_HASHSIZE := 0x0004
	
	HASH_ALG := hashType = 1 ? (CALG_MD2 := 32769) : HASH_ALG
	HASH_ALG := hashType = 2 ? (CALG_MD5 := 32771) : HASH_ALG
	HASH_ALG := hashType = 3 ? (CALG_SHA := 32772) : HASH_ALG
	HASH_ALG := hashType = 4 ? (CALG_SHA_256 := 32780) : HASH_ALG	;Vista+ only
	HASH_ALG := hashType = 5 ? (CALG_SHA_384 := 32781) : HASH_ALG	;Vista+ only
	HASH_ALG := hashType = 6 ? (CALG_SHA_512 := 32782) : HASH_ALG	;Vista+ only
	
	f := FileOpen(filePath,"r","CP0")
	if !IsObject(f)
		return 0
	if !hModule := DllCall( "GetModuleHandleW", "str", "Advapi32.dll", "Ptr" )
		hModule := DllCall( "LoadLibraryW", "str", "Advapi32.dll", "Ptr" )
	if !dllCall("Advapi32\CryptAcquireContextW"
				,"Ptr*",hCryptProv
				,"Uint",0
				,"Uint",0
				,"Uint",PROV_RSA_AES
				,"UInt",CRYPT_VERIFYCONTEXT )
		Goto,FreeHandles
	
	if !dllCall("Advapi32\CryptCreateHash"
				,"Ptr",hCryptProv
				,"Uint",HASH_ALG
				,"Uint",0
				,"Uint",0
				,"Ptr*",hHash )
		Goto,FreeHandles
	
	VarSetCapacity(read_buf,BUFF_SIZE,0)
	
    hCryptHashData := DllCall("GetProcAddress", "Ptr", hModule, "AStr", "CryptHashData", "Ptr")
	While (cbCount := f.RawRead(read_buf, BUFF_SIZE))
	{
		if (cbCount = 0)
			break
		
		if !dllCall(hCryptHashData
					,"Ptr",hHash
					,"Ptr",&read_buf
					,"Uint",cbCount
					,"Uint",0 )
			Goto,FreeHandles
	}
	
	if !dllCall("Advapi32\CryptGetHashParam"
				,"Ptr",hHash
				,"Uint",HP_HASHSIZE
				,"Uint*",HashLen
				,"Uint*",HashLenSize := 4
				,"UInt",0 ) 
		Goto,FreeHandles
		
	VarSetCapacity(pbHash,HashLen,0)
	if !dllCall("Advapi32\CryptGetHashParam"
				,"Ptr",hHash
				,"Uint",HP_HASHVAL
				,"Ptr",&pbHash
				,"Uint*",HashLen
				,"UInt",0 )
		Goto,FreeHandles	
	
	SetFormat,integer,Hex
	loop,%HashLen%
	{
		num := numget(pbHash,A_index-1,"UChar")
		hashval .= substr((num >> 4),0) . substr((num & 0xf),0)
	}
	SetFormat,integer,D
		
FreeHandles:
	f.Close()
	DllCall("FreeLibrary", "Ptr", hModule)
	dllCall("Advapi32\CryptDestroyHash","Ptr",hHash)
	dllCall("Advapi32\CryptReleaseContext","Ptr",hCryptProv,"UInt",0)
	return hashval
}
"На каждое действие есть равная ему противодействующая критика." Постулат Харриссона
OS Windows 7 x64
AutoHotkey v1.1.32.00 - November 24, 2019
Click to Download