Ir para conteúdo


Pedro Pinheiro

Cadastrado: 26 Jan 2016
Offline Última atividade: Hoje, 12:57
-----

Tópicos que criei

Manipulação de registro 32/64 bits em SO diferentes

24 julho 2017 - 07:07

Olá pessoal. Estou com uma duvida sobre manipulação do registro usando funções de escrita e leitura. O meu sistema operacional é 64 bits e eu uso a seguinte função com o caminha do exemplo:

  1.  
  2. RegWrite("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion"...
  3.  

Já que eu só tenho contato com windows 10-64 e windows XP-32 eu não consegui reparar, mas nos dois sistemas a sequencia funcionou normalmente "HKEY_LOCAL_MACHINE". O que eu gostaria de fazer...Eu queria saber a diferença entre os Sistemas operacionais e a forma que eles trabalham com isso, já que eu não encontrei problema do Win10 para o WinXP, mas creio que isso dê problema futuramente caso eu use em outro SO. Dicas?

 

No help está escrito "Com 64 bits se usa 'HKLM64'", ai que está a confusão, eu usei o "HKEY_LOCAL_MACHINE" e funcionou normalmente, o que passou pela minha cabeça é, "ué, porque funcionou? será que o windows 10 está adaptado para aceitar assim e repassar para o HKLM64'? Será que se eu deixar o programa assim e alguem executar o mesmo em outro SO 64 pode dar defeito já que não estou seguindo essa lógica? Será que o Windows Vista/7/8/8.1-64 e 32 trabalham diferente do windows 10-32/64 nesse caso?"


Diminuir FPS em GDI+ (Dúvida)

28 junho 2017 - 06:11

Como o @Luigi falou, estou abrindo um tópico com um exemplo de programa que eu fiz em autoit usando GDI+. Esse exemplo é simples e não consome muito processamento. Usei uma lógica que redesenha as imagens apenas quando é executado alguma função no programa que chama a função de desenho "Redraw()"

  1.  
  2. #include <GDIPlus.au3>
  3. #include <WindowsConstants.au3>
  4. #include <Misc.au3>
  5. #include <File.au3>
  6.  
  7.  
  8. ;~ -ATENÃÃO-
  9. ;~ Coloquei uma lista de ROMS simples que mostra só a ROMS selecionada nas 10 colunas. (Motivo- manter o código pequeno para não complicar muito o exemplo)
  10.  
  11.  
  12. _GDIPlus_Startup()
  13.  
  14. Const $TAMANHO[2] = [800,600]
  15. Const $BARRA = "select.png" ;IMAGEM DA BARRA DE SELEÃÃO
  16. Const $BACKGROUND = "skin.png" ;IMAGEM DE FUNDO DO PROGRAMA
  17. Const $PATHROMS = "roms" ;ARQUIVOS ROMS - ZIP
  18. Const $ROMS = _FileListToArrayRec($PATHROMS, "*.zip", 1, $FLTAR_NORECUR, $FLTAR_SORT, $FLTAR_NOPATH)
  19. if @error then
  20. MsgBox("","ERRO!", 'Indique uma pasta com arquivos ".zip"')
  21. EndIf
  22.  
  23. ;BARRA DE SELEÃÃO
  24. Local $TOP_BAR = 115
  25. Const $LEFT_BAR = 28
  26. Const $W_BAR = 321
  27. Const $H_BAR = 49
  28.  
  29. Const $ESPACO_BAR = 41
  30. Const $CONST_BAR = $TOP_BAR
  31. Const $FINAL_BAR = 484
  32.  
  33. Local $POS_ITEM = 1
  34. Const $POS_ITEM_MAX = $ROMS[0]
  35. Const $MAX_ITENS = 10
  36.  
  37. ;LISTA DE JOGOS
  38. Local $TOP_LIST = 123
  39. Const $LEFT_LIST = 28
  40. Const $W_LIST = 321
  41. Const $H_LIST = 49
  42.  
  43. Const $ESPACO_LIST = 41
  44. Const $CONST_LIST = $TOP_LIST
  45. Const $FINAL_LIST = 484
  46. ;============>
  47. Global $GUI = GUICreate("Example", $TAMANHO[0], $TAMANHO[1],-1,-1,$WS_POPUP)
  48. ;============>
  49. Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($GUI)
  50. Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($TAMANHO[0],$TAMANHO[1] , $hGraphic)
  51. Global $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
  52. Global $hImageBg = _GDIPlus_ImageLoadFromFile($BACKGROUND)
  53. Global $hImageTop = _GDIPlus_ImageLoadFromFile($BARRA)
  54.  
  55. ;TEXTO
  56. Global $hFormat = _GDIPlus_StringFormatCreate()
  57. Global $hBrush_Branco = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
  58. Global $hFamily = _GDIPlus_FontFamilyCreate("impact")
  59. Global $hFont = _GDIPlus_FontCreate($hFamily, 18, 0)
  60. ;LAYOUT -0/100
  61. Global $tLayout = _GDIPlus_RectFCreate(740,25)
  62.  
  63.  
  64. GUISetState(@SW_SHOW, $GUI)
  65. Redraw()
  66. While(True)
  67. Select
  68. Case GUIGetMsg() = -3
  69. _exit()
  70. Case _IsPressed(26)
  71. If ($TOP_BAR > $CONST_BAR and $TOP_BAR <= $FINAL_BAR) Then $TOP_BAR-=$ESPACO_BAR ;CIMA
  72. if $POS_ITEM > 1 then $POS_ITEM-=1
  73. Redraw()
  74. Case _IsPressed(28)
  75. if ($TOP_BAR >=$CONST_BAR and $TOP_BAR < $FINAL_BAR) Then $TOP_BAR+=$ESPACO_BAR ;BAIXO
  76. if $POS_ITEM < $POS_ITEM_MAX Then $POS_ITEM+=1
  77. Redraw()
  78. EndSelect
  79.  
  80. WEnd
  81.  
  82. Func Redraw()
  83. ;Limpa tudo
  84. _GDIPlus_GraphicsClear($hBuffer)
  85. ;Background
  86. _GDIPlus_GraphicsDrawImageRect($hBuffer, $hImageBg, 0, 0,$TAMANHO[0], $TAMANHO[1])
  87. ;Barra
  88. _GDIPlus_GraphicsDrawImageRect($hBuffer, $hImageTop, $LEFT_BAR, $TOP_BAR,$W_BAR,$H_BAR)
  89. ;Texto
  90. _GDIPlus_StringFormatSetAlign($hFormat, 2)
  91. _GDIPlus_GraphicsDrawStringEx($hBuffer,$POS_ITEM & "/" & $POS_ITEM_MAX , $hFont , $tLayout , $hFormat, $hBrush_Branco)
  92.  
  93.  
  94. ;LAYOUT LISTA
  95. _GDIPlus_StringFormatSetAlign($hFormat, 1)
  96. For $i=1 to $MAX_ITENS
  97. $tLayout_Lista = _GDIPlus_RectFCreate($LEFT_LIST,$TOP_LIST,$W_LIST,$H_LIST)
  98. _GDIPlus_GraphicsDrawStringEx($hBuffer,$ROMS[$POS_ITEM], $hFont , $tLayout_Lista , $hFormat, $hBrush_Branco)
  99. $TOP_LIST+=$ESPACO_LIST
  100. $TOP_LIST=$CONST_LIST
  101. ;Desenha o grafico
  102. _GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 0, 0)
  103. EndFunc
  104.  
  105. Func _exit()
  106. GUIDelete($GUI)
  107. _GDIPlus_ImageDispose($hImageBg)
  108. _GDIPlus_ImageDispose($hImageTop)
  109. _GDIPlus_Shutdown()
  110. EndFunc
  111.  

Imagens usada no programa.

 

select.png

OTmEZMc.png

 

skin.png

 

6dqQJFl.png


Salvar arquivo binario em uma Array

28 junho 2017 - 02:46

Eu usei o FileOpen para pegar o binario do arquivo, mas quando eu salvo em array alguns binarios ficam bugados. Olha na foto.

 

GyLXmOD.png


Trabalhando com GDI+ exemplo

13 junho 2017 - 03:57

Eu fiz esse exemplo simples para mostrar um modo de trabalhar com GDI+. Eu colquei para o programa só redesenhar quando executar uma determinada função, assim evitando o consumo excessivo de memoria.

Eu upei a barra, mas não consegui upar o background (skin.png), mas vc pode colocar qualer imagem para ver o funcionamento.


  1. #include <GDIPlus.au3>
  2. #include <WindowsConstants.au3>
  3. #include <Misc.au3>
  4. #include <File.au3>
  5.  
  6.  
  7. ;~ -ATENÃÃO-
  8. ;~ Coloquei uma lista de ROMS simples que mostra só a ROMS selecionada nas 10 colunas. (Motivo- manter o código pequeno para não complicar muito o exemplo)
  9.  
  10.  
  11. _GDIPlus_Startup()
  12.  
  13. Const $TAMANHO[2] = [800,600]
  14. Const $BARRA = "select.png" ;IMAGEM DA BARRA DE SELEÃÃO
  15. Const $BACKGROUND = "skin.png" ;IMAGEM DE FUNDO DO PROGRAMA
  16. Const $PATHROMS = "roms" ;ARQUIVOS ROMS - ZIP
  17. Const $ROMS = _FileListToArrayRec($PATHROMS, "*.zip", 1, $FLTAR_NORECUR, $FLTAR_SORT, $FLTAR_NOPATH)
  18. MsgBox("","ERRO!", 'Indique uma pasta com arquivos ".zip"')
  19.  
  20. ;BARRA DE SELEÃÃO
  21. Local $TOP_BAR = 115
  22. Const $LEFT_BAR = 28
  23. Const $W_BAR = 321
  24. Const $H_BAR = 49
  25.  
  26. Const $ESPACO_BAR = 41
  27. Const $CONST_BAR = $TOP_BAR
  28. Const $FINAL_BAR = 484
  29.  
  30. Local $POS_ITEM = 1
  31. Const $POS_ITEM_MAX = $ROMS[0]
  32. Const $MAX_ITENS = 10
  33.  
  34. ;LISTA DE JOGOS
  35. Local $TOP_LIST = 123
  36. Const $LEFT_LIST = 28
  37. Const $W_LIST = 321
  38. Const $H_LIST = 49
  39.  
  40. Const $ESPACO_LIST = 41
  41. Const $CONST_LIST = $TOP_LIST
  42. Const $FINAL_LIST = 484
  43. ;============>
  44. Global $GUI = GUICreate("Example", $TAMANHO[0], $TAMANHO[1],-1,-1,$WS_POPUP)
  45. ;============>
  46. Global $hGraphic = _GDIPlus_GraphicsCreateFromHWND($GUI)
  47. Global $hBitmap = _GDIPlus_BitmapCreateFromGraphics($TAMANHO[0],$TAMANHO[1] , $hGraphic)
  48. Global $hBuffer = _GDIPlus_ImageGetGraphicsContext($hBitmap)
  49. Global $hImageBg = _GDIPlus_ImageLoadFromFile($BACKGROUND)
  50. Global $hImageTop = _GDIPlus_ImageLoadFromFile($BARRA)
  51.  
  52. ;TEXTO
  53. Global $hFormat = _GDIPlus_StringFormatCreate()
  54. Global $hBrush_Branco = _GDIPlus_BrushCreateSolid(0xFFFFFFFF)
  55. Global $hFamily = _GDIPlus_FontFamilyCreate("impact")
  56. Global $hFont = _GDIPlus_FontCreate($hFamily, 18, 0)
  57. ;LAYOUT -0/100
  58. Global $tLayout = _GDIPlus_RectFCreate(740,25)
  59.  
  60.  
  61. Redraw()
  62. Case GUIGetMsg() = -3
  63. _exit()
  64. Case _IsPressed(26)
  65. If ($TOP_BAR > $CONST_BAR and $TOP_BAR <= $FINAL_BAR) Then $TOP_BAR-=$ESPACO_BAR ;CIMA
  66. if $POS_ITEM > 1 then $POS_ITEM-=1
  67. Redraw()
  68. Case _IsPressed(28)
  69. if ($TOP_BAR >=$CONST_BAR and $TOP_BAR < $FINAL_BAR) Then $TOP_BAR+=$ESPACO_BAR ;BAIXO
  70. if $POS_ITEM < $POS_ITEM_MAX Then $POS_ITEM+=1
  71. Redraw()
  72.  
  73.  
  74. Func Redraw()
  75. ;Limpa tudo
  76. _GDIPlus_GraphicsClear($hBuffer)
  77. ;Background
  78. _GDIPlus_GraphicsDrawImageRect($hBuffer, $hImageBg, 0, 0,$TAMANHO[0], $TAMANHO[1])
  79. ;Barra
  80. _GDIPlus_GraphicsDrawImageRect($hBuffer, $hImageTop, $LEFT_BAR, $TOP_BAR,$W_BAR,$H_BAR)
  81. ;Texto
  82. _GDIPlus_StringFormatSetAlign($hFormat, 2)
  83. _GDIPlus_GraphicsDrawStringEx($hBuffer,$POS_ITEM & "/" & $POS_ITEM_MAX , $hFont , $tLayout , $hFormat, $hBrush_Branco)
  84.  
  85.  
  86. ;LAYOUT LISTA
  87. _GDIPlus_StringFormatSetAlign($hFormat, 1)
  88. For $i=1 to $MAX_ITENS
  89. $tLayout_Lista = _GDIPlus_RectFCreate($LEFT_LIST,$TOP_LIST,$W_LIST,$H_LIST)
  90. _GDIPlus_GraphicsDrawStringEx($hBuffer,$ROMS[$POS_ITEM], $hFont , $tLayout_Lista , $hFormat, $hBrush_Branco)
  91. $TOP_LIST+=$ESPACO_LIST
  92. $TOP_LIST=$CONST_LIST
  93. ;Desenha o grafico
  94. _GDIPlus_GraphicsDrawImage($hGraphic, $hBitmap, 0, 0)
  95.  
  96. Func _exit()
  97. GUIDelete($GUI)
  98. _GDIPlus_ImageDispose($hImageBg)
  99. _GDIPlus_ImageDispose($hImageTop)
  100. _GDIPlus_Shutdown()

Resolução e SDL.dll

09 maio 2017 - 06:18

Por muito tempo eu sempre tive a curiosidade de colocar uma GUI em fullscreen, ai um tempo atrás eu achei o Qres (programa que altera a resolução do pc). Ai de boa. A resoluçao mudava de acordo com a GUI do programa, mas e quando o programa é fechado inesperadamente? Como fica? Ai o usuário vai ter de voltar a resolução antiga manualmente. Ai eu pensei...porque não usar uma DLL para isso?..dei uma olhada nas dlls de alguns programas e acabei encontrando a SDL.DLL. Olhando suas funcoes eu encontrei SDL_wm_toggleFullscreentoggleFullscreen. Alguem ja estudou sobre essa DLL? Queria escrever mais, mas o celular não deixa por causa da limitacao de caracteres