1 (изменено: belyankin12, 2017-01-15 18:00:11)

Тема: AHK: Отключить #Warn для части скрипта

Здравствуйте, имеется следующий код, что определяет собственный MD5:

HashFile(filename, hashType = "MD5")
{
   HASH_ALG := { MD2: CALG_MD2 := 32769
               , MD5: CALG_MD5 := 32771
               , SHA: CALG_SHA := 32772
               , SHA256: CALG_SHA_256 := 32780
               , SHA384: CALG_SHA_384 := 32781
               , SHA512: CALG_SHA_512 := 32782 }[hashType]
   if !f := FileOpen(filename, "r")
      return
   f.pos := 0
   f.rawRead(data, f.length)
   return CalcAddrHash(&data, f.length, HASH_ALG)
}

CalcAddrHash(addr, length, algid, byref hash = 0, byref hashlength = 0)
{
   static PROV_RSA_AES := 24, CRYPT_VERIFYCONTEXT := 0xF0000000, HP_HASHVAL := 0x0002
      
   if (DllCall("advapi32\CryptAcquireContext", PtrP, hProv, Ptr, 0, Ptr, 0, UInt, PROV_RSA_AES, UInt, CRYPT_VERIFYCONTEXT))
   {
      if (DllCall("advapi32\CryptCreateHash", Ptr, hProv, UInt, algid, UInt, 0, UInt, 0, "Ptr*", hHash))
      {
         if (DllCall("advapi32\CryptHashData", Ptr, hHash, Ptr, addr, UInt, length, UInt, 0))
         {
            if (DllCall("advapi32\CryptGetHashParam", Ptr, hHash, UInt, HP_HASHVAL, Ptr, 0, UIntP, hashlength, UInt, 0))
            {
               VarSetCapacity(hash, hashlength, 0)
               if (DllCall("advapi32\CryptGetHashParam", Ptr, hHash, UInt, HP_HASHVAL, Ptr, &hash, UIntP, hashlength, UInt, 0))
                  Loop % hashlength
                     hashstr .= Format( "{:02X}", *(&hash + A_Index - 1) )
            }
         }
         DllCall("advapi32\CryptDestroyHash", Ptr, hHash)
      }
      DllCall("advapi32\CryptReleaseContext", Ptr, hProv, UInt, 0)
   }
   return hashstr
}

Global MyMD5 := HashFile(A_ScriptFullPath)

msgbox, %MyMD5%
ExitApp
return

Если прописать в любом месте скрипта #Warn, при запуске будет 3 ошибки переменных, но при этом скрипт полностью работает. Этот код я хочу включить в другой скрипт, в котором использование директивы #Warn обязательно. Вопрос: как отключить показ диалоговых окон с ошибкой только для этой части скрипта? Либо как исправить код, чтобы скрипт не ругался?

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

2

Re: AHK: Отключить #Warn для части скрипта

У меня к вам встречный вопрос: если вы не понимаете о чем вас предупреждает интерпретатор, зачем вы используете #Warn?
Если понимаете, то он черным по белому пишет, что ему не нравится и как это исправить.

Ну ладно, пусть вы дуб дубом в английском, но какая-то пчела вас укусила использовать #Warn. Про google translate не слыхали?

3 (изменено: belyankin12, 2017-01-15 15:04:01)

Re: AHK: Отключить #Warn для части скрипта

stealzy, этот код написал не я. Я прекрасно понимаю что от меня требует #warn в данном случае, он ругается на переменные, которые нигде не были заданы. Все бы хорошо, если бы я сам написал код, что проверяет MD5 и понимал его, а так извините, может что-то сломаю. Исправлять ошибку в коде необязательно: скрипт итак работает отлично, мне просто не нужны эти диалоговые окна в этой части скрипта.

А warn я использую, чтобы исправлять ошибки в других функциях этого скрипта, которые я писал лично и в которых я понимаю принцип.

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

4 (изменено: stealzy, 2017-01-15 17:58:36)

Re: AHK: Отключить #Warn для части скрипта

Ну вот и присвойте им явно пустое значение (которое имеют все неинициализированные переменные).
С тем же успехом можно просто убрать переменные из вызова функций, оставив запятую.
Что может это сломать?

5

Re: AHK: Отключить #Warn для части скрипта

Во! Сработало! Спасибо большое, очень помогли!

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