Ir para conteúdo


Luigi

Cadastrado: 20 Ago 2011
Offline Última atividade: Jun 02 2017 05:04
-----

#13029 REQUISIÇÕES / SOLICITAÇÕES

Postado por Luigi em 15 maio 2017 - 07:59

Eu tenho ideia de mover esse tópico mais tarde para um espaço único, como se fosse um outro sub fórum.

A ideia é simples: se você quer ver um artigo, um post, sobre um determinado tema relacionado ao AutoIt, deixe a sua solicitação abaixo:

 

 

Por exemplo:

 

Gostaria de uma explicação de GDI+.

Talvez alguém com vontade de fazer um post (ou vídeo) legal sobre o tema, aproveite a dúvida de alguém e crie o post.

 

Gostaria de pedir uma aula de PA e PG no AutoIt.

E por que não? As vezes o aluno não entende a matemática da forma tradicional, porque não dar um empurrãozinho com o AutoIt?

 

Logicamente, vou cuidar pessoalmente dessa categoria, vou editá-la para ficar da melhor forma possível, mantendo os créditos dos colaboradores/autores, mas principalmente com a ideia principal de organizar e facilitar o acesso ao conhecimento.

 

Outra coisa, eu não vou fazer tudo sozinho. Fulano pede, Beltrano cria, eu organizo (ou os outros Admins/Mods organizam também), não é um trabalho do exercito de um homem só, a proposta é trabalho comunitário.

 

A ideia num futuro próximo, seria fazer um compilado em um arquivo HELP, um trabalho colaborativo, com um pedaço do conhecimento de cada um.

 

Então, se você tem um pedido, uma requisição ou solicitação de conhecimento, manifeste-se!




#13022 Espanta cachorro

Postado por Luigi em 11 maio 2017 - 06:13

estou esperando as peças chegarem do ebay...
correios é um tristeza...

De qualquer lugar do mundo para o Brasil em uma semana.
Dos correios até a sua casa em três meses!

E vai ficar pior!

 

http://www.atribuna....cfa80b13c8c5c6e

 

http://agenciabrasil...aixa-da-empresa




#12993 Projeto 2017 [ ROUTER ]

Postado por Luigi em 08 maio 2017 - 09:27

Mais uma compartilhamento!

 

http://professormarl...trua-sua-p.html




#12963 Jogo de mancala

Postado por Luigi em 07 maio 2017 - 11:09

Senhores,

 

Segue jogo de Mancala em AutoIt.

Falta desenvolver o código para verificar o ganhador.

Em desenvolvimento.




#12962 Problema com mensagem usando GDIPlus

Postado por Luigi em 07 maio 2017 - 09:59

@Manimal,

 

É uma grande pena que o AutoIt não seja uma linguagem de grande desempenho na parte do GDI...

Essa do Hobbit eu não sabia, legal!

Por isso a Tauriel estava tão linda! 




#12959 Problema com mensagem usando GDIPlus

Postado por Luigi em 07 maio 2017 - 09:08

Caros senhores,

 

Faço apenas uma sugestão, quando se trabalhar com GDI, não é uma boa prática trabalhar com:

  1.  
  2. While True
  3. _GDIFunctions...
  4. Wend
  5.  

Isso consome uma memória danada! Vejam com consumo de CPU do script...

 

Utilizem

  1.  
  2. While Sleep(13) ; no mínimo 13 milisegundos
  3. _GDIFunctions
  4. Wend
  5.  

O AutoIt não resolve (Sleep) menor do que 10 milisegundos.

  1.  
  2. Sleep(1) = Sleep(10)
  3. Sleep(2) = Sleep(10)
  4. ...
  5. Sleep(11) = Sleep(11)
  6. Sleep(80) = Sleep(80)
  7.  

Considere:

  1.  
  2. |delay| FPS |
  3. | 13|76,92|
  4. | 14|71,43|
  5. | 15|66,67|
  6. | 16|62,50|
  7. | 17|58,82|
  8. | 18|55,56|
  9. | 19|52,63|
  10. | 20|50,00|
  11. | 21|47,62|
  12. | 22|45,45|
  13. | 23|43,48|
  14. | 24|41,67|
  15. | 25|40,00|
  16. | 26|38,46|
  17. | 27|37,04|
  18. | 28|35,71|
  19. | 29|34,48|
  20. | 30|33,33|
  21. | 31|32,26|
  22. | 32|31,25|
  23. | 33|30,30|
  24. | 34|29,41|

Na tabela acima, um delay de 34 milisegundos, representa mais de 29 renderizações no GDI, quero dizer, apagar tudo, e desenhar de novo 29 vezes em um único segundo, e o olho humano precisa, se eu não estiver enganado de no mínimo 29 FPS para ter a sensação de movimento contínuo.

 

Abaixo de 29 FPS, você já consegue perceber o movimento quadro a quadro.

 

Mas deixar  While True...

Significa que a todo o loop do script, o GDI vai renderizar tudo de novo! Uau! Vai comer recurso!

Pense nisso...

 

@Belini,

 

Está correto supor que você possui uma preocupação em executar o script e não deixar os arquivos de imagens livres para que o usuário possa abrir, correto?

Por isso a preocupação em deletar os arquivos no exemplo do UEZ?

 

Tenho a impressão de que você quer criar uma espécie de animação, tipo um PowerPoint?
Ou como se fosse aqueles finais de filme rolando, em cima da imagem de algo?




#12662 Movendo texto na label

Postado por Luigi em 12 março 2017 - 07:41

@Pedro Pinheiro, dê um olhadinha aqui.
 

Acredito que o texto se mover, de forma legal, é só com GDI.

 

Achei esse exemplo beeem antigo... tenta mexer no eixo 'x', acredito que conseguirá o efeito desejado.

  1.  
  2. ;#AutoIt3Wrapper_Au3Check_Parameters=-d -w 1 -w 2 -w 3 -w 4 -w 5 -w 6
  3. #include <GUIConstantsEX.au3>
  4. #include <WindowsConstants.au3>
  5. #include <FontConstants.au3>
  6. #include <WinAPI.au3>
  7.  
  8. Opt("MustDeclareVars", 1)
  9.  
  10. Local $hFont2, $hBmp1, $hBmp2, $hDC1, $hDC2, $hMemDC1, $hMemDC2, $tRECT1, $tRECT2, $pRECT1, $pRECT2
  11. Local $iTextFlags = BitOR($DT_CENTER, $DT_VCENTER, $DT_SINGLELINE)
  12.  
  13. _DrawShadowTextDemo()
  14.  
  15. Func _DrawShadowTextDemo()
  16. Local Const $CLEARTYPE_QUALITY = 0x05
  17. Local $hGUI, $Msg, $sTime, $hFont1
  18. Local $cLabel1, $cLabel2, $cLabel3, $cLabel4, $cLabel5
  19. Local $hLabel4, $hLabel5, $hBitmap1, $hBitmap2, $hBitmap3
  20.  
  21. $hGUI = GUICreate("DrawShadowText API Demo", 400, 420)
  22. _GuiSetDropShadow($hGUI, False)
  23. If @OSVersion == "WIN_VISTA" Then
  24. GUICtrlCreatePic(@WindowsDir & "\Web\Wallpaper\img25.jpg", -1, -1, 401, 300)
  25. Else
  26. GUICtrlCreatePic(@WindowsDir & "\Web\Wallpaper\Windows XP.jpg", -1, -1, 401, 300)
  27. EndIf
  28. GUICtrlSetState(-1, $GUI_DISABLE)
  29. GUISetBkColor(0xFFFFFF)
  30.  
  31.  
  32. ;$hFont1 = _WinAPI_CreateFont(60, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, _
  33. ;$OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $CLEARTYPE_QUALITY, BitOR($DEFAULT_PITCH, $FF_DONTCARE), "Arial Bold")
  34.  
  35. $hFont1 = _WinAPI_CreateFont(60, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, _
  36. $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $ANTIALIASED_QUALITY, BitOR($DEFAULT_PITCH, $FF_DONTCARE), "Arial Bold")
  37.  
  38. $hFont2 = _WinAPI_CreateFont(70, 0, 0, 0, 400, False, False, False, $DEFAULT_CHARSET, _
  39. $OUT_DEFAULT_PRECIS, $CLIP_DEFAULT_PRECIS, $ANTIALIASED_QUALITY, BitOR($DEFAULT_PITCH, $FF_DONTCARE), "Comic Sans MS Bold")
  40.  
  41. $cLabel1 = GUICtrlCreatePic("", 10, 20, 380, 50)
  42. $cLabel2 = GUICtrlCreatePic("", 10, 80, 380, 50)
  43. $cLabel3 = GUICtrlCreatePic("", 90, 140, 220, 50)
  44.  
  45. $cLabel4 = GUICtrlCreateLabel("", 80, 305, 240, 50)
  46. $hLabel4 = GUICtrlGetHandle(-1)
  47. $cLabel5 = GUICtrlCreateLabel("", 80, 365, 240, 50)
  48. $hLabel5 = GUICtrlGetHandle(-1)
  49.  
  50. $tRECT1 = _WinAPI_GetClientRect($hLabel4)
  51. $tRECT2 = _WinAPI_GetClientRect($hLabel5)
  52. $pRECT1 = DllStructGetPtr($tRECT1)
  53. $pRECT2 = DllStructGetPtr($tRECT2)
  54. $hDC1 = _WinAPI_GetWindowDC($hLabel4)
  55. $hDC2 = _WinAPI_GetWindowDC($hLabel5)
  56. $hMemDC1 = _WinAPI_CreateCompatibleDC($hDC1)
  57. $hMemDC2 = _WinAPI_CreateCompatibleDC($hDC2)
  58. $hBmp1 = _WinAPI_CreateCompatibleBitmap($hDC1, 240, 50)
  59. $hBmp2 = _WinAPI_CreateCompatibleBitmap($hDC2, 240, 50)
  60. ;AdlibEnable("_Time", 100)
  61. AdlibRegister("_Time", 100)
  62. GUISetState()
  63.  
  64. $sTime = StringFormat("%02d:%02d:%02d", @HOUR, @MIN, @SEC)
  65. $hBitmap1 = _CreateShadowTextBitmap($cLabel1, $hFont1, 380, 50, "Shadow Text", $iTextFlags, 0x00FFFFFF, 0x00000000, 6, 6) ;White text/Black shadow
  66. _SetBitmapToCtrl($cLabel1, $hBitmap1)
  67.  
  68. Local $sText = "The quick brown fox jumps over the lazy dog"
  69. $hBitmap2 = _CreateShadowTextBitmap($cLabel2, 0, 380, 50, $sText, $iTextFlags, 0x00FFFFFF, 0x00000000, 3, 3) ;White text/Black shadow
  70. _SetBitmapToCtrl($cLabel2, $hBitmap2)
  71.  
  72. $hBitmap3 = _CreateShadowTextBitmap($cLabel3, $hFont1, 220, 50, $sTime, $iTextFlags, 0x0000D7FF, 0x00000000, -3, -3) ;Gold text/Black shadow
  73. _SetBitmapToCtrl($cLabel3, $hBitmap3)
  74. Sleep(2000)
  75. $hBitmap3 = _CreateShadowTextBitmap($cLabel3, $hFont1, 220, 50, $sTime, $iTextFlags, 0x00000001, 0x0000D7FF, 3, 3) ;Black text/Gold shadow
  76. _SetBitmapToCtrl($cLabel3, $hBitmap3)
  77. Sleep(2000)
  78. $hBitmap3 = _CreateShadowTextBitmap($cLabel3, $hFont1, 220, 50, $sTime, $iTextFlags, 0x0000001, 0x0000CC00, 3, 3) ;Black text/Green shadow
  79. _SetBitmapToCtrl($cLabel3, $hBitmap3)
  80. Sleep(2000)
  81. $hBitmap3 = _CreateShadowTextBitmap($cLabel3, $hFont1, 220, 50, $sTime, $iTextFlags, 0x0000001, 0x00FF0000, 3, 3) ;Black text/Blue shadow
  82. _SetBitmapToCtrl($cLabel3, $hBitmap3)
  83. Sleep(2000)
  84. $hBitmap3 = _CreateShadowTextBitmap($cLabel3, $hFont1, 220, 50, $sTime, $iTextFlags, 0x00000001, 0x00C0C0C0, 3, 3) ;Black text/Grey shadow
  85. _SetBitmapToCtrl($cLabel3, $hBitmap3)
  86.  
  87. While 1
  88. $Msg = GUIGetMsg()
  89. Switch $Msg
  90. Case -3
  91. ExitLoop
  92. Case $cLabel1
  93. Case $cLabel2
  94. Case $cLabel3
  95. Case $cLabel4
  96. Case $cLabel5
  97. EndSwitch
  98. WEnd
  99.  
  100. GUIDelete()
  101. _WinAPI_ReleaseDC($hLabel4, $hDC1)
  102. _WinAPI_ReleaseDC($hLabel5, $hDC2)
  103. _WinAPI_DeleteDC($hMemDC1)
  104. _WinAPI_DeleteDC($hMemDC2)
  105. _WinAPI_DeleteObject($hFont1)
  106. _WinAPI_DeleteObject($hFont2)
  107. _WinAPI_DeleteObject($hBmp1)
  108. _WinAPI_DeleteObject($hBmp2)
  109. _WinAPI_DeleteObject($hBitmap1)
  110. _WinAPI_DeleteObject($hBitmap2)
  111. _WinAPI_DeleteObject($hBitmap3)
  112. EndFunc ;==>_DrawShadowTextDemo
  113.  
  114.  
  115. ;#FUNCTION#========================================================================================
  116. ; Name...........: _WinAPI_DrawShadowText
  117. ; Description ...: Draws formatted text in the specified rectangle with a drop shadow
  118. ; Syntax.........: _WinAPI_DrawShadowText($hDC, $szText, ByRef $tRect, $iFlags, $crText, $crShadow, $ixOffset, $iyOffset)
  119. ; Parameters ....: $hDC - Identifies the device context
  120. ; $sText - The string to be drawn
  121. ; $tRect - $tagRECT structure that contains the rectangle for the text
  122. ; $iFlags - Specifies the method of formatting the text: *** See Remarks ***
  123. ; |$DT_BOTTOM - Justifies the text to the bottom of the rectangle
  124. ; |$DT_CALCRECT - Determines the width and height of the rectangle
  125. ; |$DT_CENTER - Centers text horizontally in the rectangle
  126. ; |$DT_EDITCONTROL - Duplicates the text-displaying characteristics of a multiline edit control
  127. ; |$DT_END_ELLIPSIS - Replaces part of the given string with ellipses if necessary
  128. ; |$DT_EXPANDTABS - Expands tab characters
  129. ; |$DT_EXTERNALLEADING - Includes the font external leading in line height
  130. ; |$DT_HIDEPREFIX - Ignores the ampersand (&) prefix character in the text.
  131. ; | The letter that follows will not be underlined, but other mnemonic-prefix characters are still processed.
  132. ; |$DT_INTERNAL - Uses the system font to calculate text metrics
  133. ; |$DT_LEFT - Aligns text to the left
  134. ; |$DT_MODIFYSTRING - Modifies the given string to match the displayed text
  135. ; |$DT_NOCLIP - Draws without clipping
  136. ; |$DT_NOFULLWIDTHCHARBREAK - Prevents a line break at a DBCS (double-wide character string),
  137. ; so that the line breaking rule is equivalent to SBCS strings.
  138. ; | For example, this can be used in Korean windows, for more readability of icon labels.
  139. ; | This value has no effect unless $DT_WORDBREAK is specified
  140. ; |$DT_NOPREFIX - Turns off processing of prefix characters
  141. ; |$DT_PATH_ELLIPSIS - For displayed text, replaces characters in the middle of the string with ellipses
  142. ; | so that the result fits in the specified rectangle.
  143. ; | If the string contains backslash (\) characters,
  144. ; | $DT_PATH_ELLIPSIS preserves as much as possible of the text after the last backslash.
  145. ; | The string is not modified unless the $DT_MODIFYSTRING flag is specified
  146. ; |$DT_PREFIXONLY - Draws only an underline at the position of the character following the ampersand (&) prefix character.
  147. ; | Does not draw any other characters in the string
  148. ; |$DT_RIGHT - Aligns text to the right
  149. ; |$DT_RTLREADING - Layout in right to left reading order for bi-directional text
  150. ; |$DT_SINGLELINE - Displays text on a single line only
  151. ; |$DT_TABSTOP - Sets tab stops. Bits 15-8 of $iFlags specify the number of characters for each tab
  152. ; |$DT_TOP - Top-justifies text (single line only)
  153. ; |$DT_VCENTER - Centers text vertically (single line only)
  154. ; |$DT_WORDBREAK - Breaks words
  155. ; |$DT_WORD_ELLIPSIS - Truncates any word that does not fit in the rectangle and adds ellipses
  156. ; $crText - Color of the text in hexadecimal COLORREF format: (ABGR) 0x00FFFFFF
  157. ; $crShadow - Color of the text shadow in hexadecimal COLORREF format: (ABGR) 0x00FFFFFF
  158. ; $ixOffset - Drop shadow X offset integer - positive and negative values
  159. ; $iyOffset - Drop shadow Y offset integer - positive and negative values
  160. ; "The low-order byte contains a value for the relative intensity of red
  161. ; the second byte contains a value for green; and the third byte contains a value for blue.
  162. ; The high-order byte must be zero. The maximum value for a single byte is 0xFF".
  163. ; Return values .: Success - The height of the text*
  164. ; Failure - 0 and error set
  165. ; Author ........: rover
  166. ; Modified.......:
  167. ; Remarks .......: *** Detailed remarks are absent on the MSDN web page, so it is an assumption that the following applies to DrawShadowText as well.
  168. ; * "If the function succeeds, the return value is the height of the text in logical units.
  169. ; If DT_VCENTER or DT_BOTTOM is specified, the return value is the offset from lpRect->top to the bottom of the drawn text".
  170. ; "The DrawText function uses the device context&#39;s selected font, text color, and background color to draw the
  171. ; text. Unless the $DT_NOCLIP format is used, DrawText clips the text so that it does not appear outside the
  172. ; specified rectangle. All formatting is assumed to have multiple lines unless the $DT_SINGLELINE format is
  173. ; specified. If the selected font is too large, DrawText does not attempt to substitute a smaller font".
  174. ;+
  175. ; Needs WindowsConstants.au3 for pre-defined constants
  176. ; Related .......: DrawText, $tagRECT
  177. ; Link ..........; @@MsdnLink@@ DrawShadowText
  178. ; Example .......; Yes
  179. ; ===================================================================================================
  180. Func _WinAPI_DrawShadowText($hDC, $szText, ByRef $tRect, $iFlags = 0, $crText = 0, $crShadow = 0, $ixOffset = 0, $iyOffset = 0)
  181. If IsDllStruct($tRect) = 0 Or DllStructGetSize($tRect) <> 16 Then Return SetError(1, 1, 0)
  182. Local $aResult, $iError
  183.  
  184. $aResult = DllCall("ComCtl32.dll", "int", "DrawShadowText", "hwnd", $hDC, "wstr", $szText, "int", -1, "ptr", _ ;StringLen($szText)
  185. DllStructGetPtr($tRect), "dword", $iFlags, "dword", $crText, "dword", $crShadow, "int", $ixOffset, "int", $iyOffset)
  186. $iError = @error
  187. If @error Or UBound($aResult) <> 10 Then Return SetError($iError, 2, 0)
  188. Return SetError($iError, 0, $aResult[0])
  189. EndFunc ;==>_WinAPI_DrawShadowText
  190.  
  191. Func _CreateShadowTextBitmap($CtrlId, $hFont, $iWidth, $iHeight, $sText, $iFlags, $iColText, $iColShadow, $ixOffset, $iyOffset)
  192. Local $hDC, $hMemDC, $hBMP, $hOldhBMP, $hOldFont, $tRect, $hWnd, $hBMP
  193. Local Const $STM_GETIMAGE = 0x173
  194. $hWnd = GUICtrlGetHandle($CtrlId)
  195. $hBMP = GUICtrlSendMsg($CtrlId, $STM_GETIMAGE, 0, 0)
  196. If $hBMP <> 0 Then
  197. _WinAPI_DeleteObject($hBMP)
  198. GUICtrlSetState($CtrlId, $GUI_SHOW)
  199. EndIf
  200. $tRect = _WinAPI_GetClientRect($hWnd)
  201. $hDC = _WinAPI_GetWindowDC($hWnd)
  202. $hMemDC = _WinAPI_CreateCompatibleDC($hDC)
  203. $hBMP = _WinAPI_CreateCompatibleBitmap($hDC, $iWidth, $iHeight)
  204. $hOldhBMP = _WinAPI_SelectObject($hMemDC, $hBMP)
  205. $hOldFont = _WinAPI_SelectObject($hDC, $hFont)
  206. _WinAPI_DrawShadowText($hDC, $sText, $tRect, $iFlags, $iColText, $iColShadow, $ixOffset, $iyOffset)
  207. _WinAPI_BitBlt($hMemDC, 0, 0, $iWidth, $iHeight, $hDC, 0, 0, $MERGECOPY)
  208. _WinAPI_SelectObject($hMemDC, $hOldFont)
  209. _WinAPI_SelectObject($hMemDC, $hOldhBMP)
  210. _WinAPI_ReleaseDC($hWnd, $hDC)
  211. _WinAPI_DeleteDC($hMemDC)
  212. Return $hBMP
  213. EndFunc ;==>_CreateShadowTextBitmap
  214.  
  215. ; from Zedna&#39;s Resources.au3
  216. Func _SetBitmapToCtrl($CtrlId, $hBitmap)
  217. Local Const $STM_SETIMAGE = 0x0172
  218. Local Const $IMAGE_BITMAP = 0
  219. Local Const $SS_BITMAP = 0xE
  220. Local Const $GWL_STYLE = -16
  221.  
  222. Local $hWnd = GUICtrlGetHandle($CtrlId)
  223. If $hWnd = 0 Then Return SetError(1, 0, 0)
  224. ; set SS_BITMAP style to control
  225. ;Local $oldStyle = DllCall("user32.dll", "long", "GetWindowLong", _
  226. ;"hwnd", $hWnd, "int", $GWL_STYLE)
  227. ;If @error Then Return SetError(2, 0, 0)
  228. ;DllCall("user32.dll", "long", "SetWindowLong", "hwnd", $hWnd, _
  229. ;"int", $GWL_STYLE, "long", BitOR($oldStyle[0], $SS_BITMAP))
  230. ;If @error Then Return SetError(3, 0, 0)
  231. Local $oldBmp = DllCall("user32.dll", "hwnd", "SendMessage", _
  232. "hwnd", $hWnd, "int", $STM_SETIMAGE, "int", $IMAGE_BITMAP, "int", $hBitmap)
  233. If @error Then Return SetError(4, 0, 0)
  234. If $oldBmp[0] <> 0 Then _WinAPI_DeleteObject($oldBmp[0])
  235. Return 1
  236. EndFunc ;==>_SetBitmapToCtrl
  237.  
  238. Func _Time()
  239. Local $obj_orig1 = _WinAPI_SelectObject($hMemDC1, $hBmp1)
  240. Local $obj_orig2 = _WinAPI_SelectObject($hMemDC2, $hBmp2)
  241. Local $hOldFont1 = _WinAPI_SelectObject($hMemDC1, $hFont2)
  242. Local $hOldFont2 = _WinAPI_SelectObject($hMemDC2, $hFont2)
  243. _WinAPI_FillRect($hMemDC1, $pRECT1, 0)
  244. _WinAPI_FillRect($hMemDC2, $pRECT2, 0)
  245. Local $sTime = StringFormat("%02d:%02d:%02d", @HOUR, @MIN, @SEC)
  246. _WinAPI_DrawShadowText($hMemDC1, $sTime, $tRECT1, $iTextFlags, 0x00000001, 0x00C0C0C0, -3, -3)
  247. _WinAPI_DrawShadowText($hMemDC2, $sTime, $tRECT2, $iTextFlags, 0x00FFFFFF, 0x00C0C0C0, 3, 3)
  248. _WinAPI_BitBlt($hDC1, 0, 0, 240, 50, $hMemDC1, 0, 0, $SRCCOPY)
  249. _WinAPI_BitBlt($hDC2, 0, 0, 240, 50, $hMemDC2, 0, 0, $SRCCOPY)
  250. _WinAPI_SelectObject($hMemDC1, $obj_orig1)
  251. _WinAPI_SelectObject($hMemDC2, $obj_orig2)
  252. _WinAPI_SelectObject($hMemDC1, $hOldFont1)
  253. _WinAPI_SelectObject($hMemDC2, $hOldFont2)
  254. EndFunc ;==>_Time
  255.  
  256.  
  257. ;#FUNCTION#========================================================================================
  258. ; Name...........: _GuiSetDropShadow
  259. ; Description ...: Sets the drop shadow effect on forms and dialogs for current process
  260. ; Syntax.........: _GuiSetDropShadow($hwnd, $fDisrespectUser = True)
  261. ; Parameters ....: $hWnd - Handle to parent form or child dialog (GuiCreate(), MsgBox(), FileOpenDialog(), etc.)
  262. ; $fDisrespectUser - True: (Default) - set system option for drop shadow if disabled by user
  263. ; - False: - do not set system option for drop shadow if disabled by user
  264. ; Return values .: Success - 1
  265. ; Failure - 0 @error set and @extended set to point of failure
  266. ; Author(s) ........: rover, (lod3n, Rasim for Get/SetClassLong, Kip - RegisterclassEx() for drop shadow idea, ProgAndy - xMsgBox hook)
  267. ; Remarks .......: Note: drop shadow is lost if parent form clicked on (If MsgBox created with parent handle)
  268. ; hiding, then restoring MsgBox to foreground or moving MsgBox off of form restores drop shadow.
  269. ; use 262144 or 4096 flags with MsgBox if using with hParent handle to prevent loss of drop shadow if parent clicked on.
  270. ; this behaviour is apparently by design.
  271. ;+
  272. ; Minimum Operating Systems: Windows XP
  273. ; Related .......:
  274. ; Link ..........; @@MsdnLink@@ SetClassLong Function
  275. ; Example .......; Yes
  276. ; ===================================================================================================
  277. Func _GuiSetDropShadow($hWnd, $fDisrespectUser = True)
  278. If Not IsHWnd($hWnd) Then Return SetError(1, 1, 0)
  279.  
  280. ;check if hWnd is from current process
  281. Local $aResult = DllCall("User32.dll", "int", "GetWindowThreadProcessId", "hwnd", $hWnd, "int*", 0)
  282. If @error Or $aResult[2] <> @AutoItPID Then Return SetError(@error, 2, 0)
  283.  
  284. If Not IsDeclared("SPI_GETDROPSHADOW") Then Local Const $SPI_GETDROPSHADOW = 0x1024
  285. If Not IsDeclared("SPI_SETDROPSHADOW") Then Local Const $SPI_SETDROPSHADOW = 0x1025
  286. If Not IsDeclared("CS_DROPSHADOW") Then Local Const $CS_DROPSHADOW = 0x00020000
  287. If Not IsDeclared("GCL_STYLE") Then Local Const $GCL_STYLE = -26
  288.  
  289. $aResult = DllCall("user32.dll", "int", "SystemParametersInfo", "int", $SPI_GETDROPSHADOW, "int", 0, "int*", 0, "int", 0)
  290. Local $iErr = @error
  291. If $iErr Or Not IsArray($aResult) Then Return SetError($iErr, 3, 0)
  292.  
  293. ;if &#39;Show shadows under menus&#39; option not set, try activating it.
  294. If Not $aResult[3] And $fDisrespectUser Then
  295. ;turn on drop shadows
  296. $aResult = DllCall("user32.dll", "int", "SystemParametersInfo", "int", $SPI_SETDROPSHADOW, "int", 0, "int", True, "int", 0)
  297. $iErr = @error
  298. If $iErr Or Not IsArray($aResult) Or $aResult[0] <> 1 Then Return SetError($iErr, 4, 0)
  299. EndIf
  300.  
  301. ;get styles from WndClassEx struct
  302. $aResult = DllCall("user32.dll", "dword", "GetClassLong", "hwnd", $hWnd, "int", $GCL_STYLE)
  303. $iErr = @error
  304. If $iErr Or Not IsArray($aResult) Or Not $aResult[0] Then Return SetError($iErr, 5, 0)
  305. Local $OldStyle = $aResult[0]
  306.  
  307. ;add drop shadow style to styles
  308. Local $Style = BitOR($OldStyle, $CS_DROPSHADOW)
  309.  
  310. If StringRight(@OSArch, 2) == "64" Then
  311. ;if 64 bit windows (NOT TESTED)
  312. ;see MSDN SetClassLong remarks
  313. ;$aResult = DllCall("user32.dll", "ulong_ptr", "SetClassLongPtr", "hwnd", $hWnd, "int", $GCL_STYLE, "long_ptr", $Style)
  314. ;$iErr = @error
  315. ;If $iErr Or Not IsArray($aResult) Or Not $aResult[0] Then Return SetError($iErr, 6, 0)
  316. Else
  317. $aResult = DllCall("user32.dll", "dword", "SetClassLong", "hwnd", $hWnd, "int", $GCL_STYLE, "long", $Style)
  318. $iErr = @error
  319. If $iErr Or Not IsArray($aResult) Or Not $aResult[0] Then Return SetError($iErr, 7, 0)
  320. If $aResult[0] = $OldStyle Then Return SetError($iErr, 0, 1)
  321. Return SetError($iErr, 8, 0)
  322. EndIf
  323. EndFunc ;==>_GuiSetDropShadow
  324.  
  325.  



#12642 Segurança (ant decompiler)

Postado por Luigi em 09 março 2017 - 07:47

@Pedro Pinheiro, quem programa em PHP e JavaScript passa pela mesmíssima coisa...
Não há como compilar o código, a "obfuscuração", sei lá se funciona, e as que dizem que funciona são tão, tão, tão caras...

E olha quantos sites e jogos on-line tem por aí em PHP e JavaScript.

Realmente entendo a sua frustração.

Mas sugiro: C# ou Java.

 

Logicamente... O que o AutoIt faz... só o AutoIt faz...
Todas as facilidades de automação que ele tem, eu posso estar errado, mas não sei se você vai encontrar em outras linguagens.
Mas as outras linguagens também tem coisas que o AutoIt deixa a desejar.

Tem que saber equilibrar...




#12641 Jenkins, testes com o Autoit

Postado por Luigi em 09 março 2017 - 07:43

Estou pretendendo usar o Autoit como ferramenta de testes funcionais, e gostaria de saber se consigo vincula-lo ao Jenkins, alguém já fez algo do tipo?

 

Olá @João V, se você consegue automatizar com CURL, você consegue automatizar com AutoIt.

Pesquise por: ObjCreate("WinHttp.WinHttpRequest.5.1")

 

É um nome longo, esquisito, mas é a mesma coisa.
Logicamente, procure primeiro no fórum americano, talvez já tenham escrito algo mais direcionado para Jenkins.




#12513 Monitorar pressionamento de teclado.

Postado por Luigi em 14 fevereiro 2017 - 01:15

Minha contribuição

Registrar a inatividade do teclado (e ganhe grátis o mouse), veja a função: _WinAPI_GetIdleTime()

 

A lógica não é adicionar +10 segundos quando algo acontece.

É zerar a contagem regressiva quando algo acontece.

 

Sempre depois da ausência de evento (movimento de mouse ou teclado) a contagem no $idle (_WinAPI_GetIdleTime) começa.

Se $idle > 10 segundos, sai.

Qualquer evento, zera $idle.

 

Funciona com as teclas multimídia do meu teclado.

  1.  
  2.  
  3. #cs ----------------------------------------------------------------------------
  4.  
  5. AutoIt Version: 3.3.14.1
  6. Author: Fábio iGames
  7. Modificado: Luigi
  8. 15/11/2015
  9.  
  10. Script Function:
  11. Manter a Janela Por Mais 10 Segundos se Pressionar Qualquer Tecla.
  12.  
  13. ==> Gerência Todas as Teclas do Teclado , inclusive os 3 Botôes do Mouse.
  14.  
  15. FUNCIONA 100% COM TODAS AS TECLAS (E MOUSE TAMBÈM)
  16. #ce ----------------------------------------------------------------------------
  17.  
  18. #include <WinAPISys.au3>
  19. #include <Timers.au3>
  20.  
  21. GUICreate(" Monitorar Teclas - By: Fábio iGames", 330, 50, -1, -1, -1, 0x00000008) ; Cria a Janela no Centro da Área de Trabalho.
  22.  
  23. GUISetBkColor(0x000000) ; Cor de Fundo da Gui.
  24.  
  25. Local $Label = GUICtrlCreateLabel("FECHANDO EM 10 SEGUNDOS.", 5, 15, 320, 20, 1) ; Label
  26. GUICtrlSetColor(-1, 0xFFFFFF) ; Cor do texto.
  27. GUICtrlSetBkColor(-1, -2) ; Fundo da Label Transparente.
  28. GUICtrlSetFont(-1, 11, 200, 1, "Arial") ; Parâmetros da Fonte.
  29.  
  30. GUISetState(@SW_SHOW) ; Mostra a Janela.
  31.  
  32.  
  33. Global $iTimeMax = 10000, $iTime
  34. Global $num
  35. Global $idle
  36.  
  37. While Sleep(25)
  38. $idle = _WinAPI_GetIdleTime()
  39. If $idle > $iTimeMax Then
  40. Else
  41. If _Timer_Diff($iTime) > 100 Then ; atualiza o $Label a cada 100 mili segundos
  42. $iTime = _Timer_Init()
  43. $num = StringFormat("%0.1f", ($iTimeMax - Int($idle)) / 1000)
  44. GUICtrlSetData($Label, "FECHANDO EM " & $num & " SEGUNDOS.") ; Seta na Label as Modificações.
  45. EndIf
  46. EndIf
  47. WEnd
  48.  
  49. Exit (0)
  50.  
  51.  
  52.  



#12479 Espanta cachorro

Postado por Luigi em 07 fevereiro 2017 - 11:34

A intenção deste tópico é reproduzir o "espanta cachorro" do Newton C. Braga com uma pequena adaptação para o Arduino.

 

Problema:
Tenho uma vizinha, que possui duas cadelas: a LadyGaga e a TeteEspindola.
A LadyGaga é quieta... Não tem iniciativa alguma para latir.
A maldita da TeteEspindola, late toda a vez que a língua toca o céu da boca.
O latido dela é alto, chato, irritante...

E cansei pedir educadamente que a dona tivesse uma atitude mais efetiva.
Não posso mentir, melhorou. Mas quando ela sai de casa, ela deixa a Lady e a Tete soltas... Então começa o inferno sonoro!
A TeteEspindola começa a latir freneticamente por qualquer coisa, e então alguns minutos depois, a LadyGaga vai na onda!
 

Passei algumas noites vendo depoimentos de internautas no YouTube sobre o problema, alguns são engraçados, outros dão medo...

 

Então depois de ver como os internautas lidam com o problema, achei uma solução que vale a pena ser testada.
Nos estados unidos, existe um equipamento similar para esta função, que é vendido nas lojas, logicamente, o valor é super acessível.
No Brasil, é um verdadeiro assalto o valor do equipamento.

Então resolvi levar adiante esta ideia, com o apoio moral do @Antoni-ag.

 

Mas porque usar o Arduino?

Para este microcontrolador ter a capacidade de emitir (ligar o circuito) somente quando há excesso de barulho, evitando assim que o "espanta cachorro" fique ligado permanentemente e que não seja necessário uma interação humana para acionar.

 

Interessante também, seria criar um log de quantas vezes houve o latido, e quantas vezes foi acionado o "espanta cachorro".

Isso seria útil para descobrir qual frequência é mais "útil" na tentativa de fazer o cachorro se assustar.

Acredito, que nem todas as frequências tenham o mesmo efeito em cachorros diferentes.

 

Pendências:

  • Encontrar um twitter no mercado nacional de custo acessível
  • Verificar se é possível o Arduino controlar o tipo de frequência que o circuito irá gerar.

 

A quem interessar possa:
Gosto de bicho, e me preocupo em realizar este experimento de forma que não maltrate o animal.
Mas tudo tem limite, e há pessoas que tem cachorro que são verdadeiros folgados e preguiçosos, que não se preocupam nem um pouco com o ouvido do vizinho (ou o nariz).




#12453 Ajuda - Performance de função

Postado por Luigi em 26 janeiro 2017 - 05:29

@adrianovlima, pelo que percebi, você _Excel_RangeRead uma célula, e GuiCtrlSetData... depois _Excel_RangeRead em outra célula vizinha, e GuiCtrlSetData...

 

Essas células são vizinhas? Linha ou coluna? Tanto faz...

 

Porque não lê um range inteiro de células (você terá um array) referente à esta linha ou coluna, e depois usa um for..next para atualizar os valores o GuiCtrlSetData?




#12444 Debate: Telegram Bot UDF

Postado por Luigi em 25 janeiro 2017 - 11:59

O que você tem em mente?

Eu estou vendo essa UDF do Telegram, não como um bate papo, mas sim como uma "forma de comunicação" entre o aplicativo de monitoramento remoto e o meu sistema de alarme no Arduino.

 

Hoje qualquer evento monitorado pelo alarme eu recebo um e-mail, mas há um delay, e não consigo executar comandos à distância no alarme.

Com o uso do Telegram, isso se torna possível.

 

E como disse anteriormente, utilizando https, requisito que eu sempre quis.

 

E o AutoIt o que tem haver com isso?
Ué, uma outra interface de controle do alarme.




#12424 Salvar String em ANSI codepage DOS 850, DOS 860 e mesmo o codepage default da...

Postado por Luigi em 22 janeiro 2017 - 08:53

@Elias, essa me ajudou, muito obrigado!


#12418 Pequenos scripts úteis

Postado por Luigi em 19 janeiro 2017 - 09:45

Show de bola Luigi.

 

Melhor que o _ArrayDisplay()?

Eu não sei dizer se é melhor/pior, mas atendia uma necessidade que eu tinha, de ver um conteúdo do Array de forma dinâmica, sem toda hora ter que ficar clicando no OK para fechar a janela de exibição do array.