elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Guía rápida para descarga de herramientas gratuitas de seguridad y desinfección


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Mensaje scroll
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Mensaje scroll  (Leído 1,961 veces)
85

Desconectado Desconectado

Mensajes: 206



Ver Perfil WWW
Mensaje scroll
« en: 31 Marzo 2013, 14:03 pm »

Hola, estaba probando un código para mensaje scroll, me pareció buena la idea de postearlo. Ya lo había usado mucho antes pero no para un programa de consola.

El programa va a mostrar todas las cadenas que hay en un array de cadenas o matríz de caracteres, son 13 cadenas en total, pero originalmente lo usaba con 4.
La modificación que le hice fue la necesidad de crear un hilo aparte para mostrar las cadenas en scroll, y suspender el hilo principal.

El hilo principal nunca se resume y para salir del programa se sale con ExitProcess desde el hilo secundario.

El intervalo de tiempo entre las cadenas se hace con 'Sleep'.

Como ustedes ya saben, cuando se crea un hilo con CreateThread se le debe pasar un argumento que es la rutina con la cual empieza a ejecutarse el hilo. Esta rutina lleva un parámetro, que lo recibe al crearse el hilo porque dicho parámetro se pasa a CreateThread como argumento.
http://msdn.microsoft.com/en-us/library/windows/desktop/ms682453(v=vs.85).aspx

El tamaño del vector de cadenas se puede sacar con sizeof, pero en este caso se hace restando las direcciones de memoria del último elemento menos el primero.

Para iniciar el 'scrolling' se presiona 1,  y para salir del programa se presiona 2.

Aclarado todo eso, muestro el código
Código
  1.  
  2. //
  3. // By 85
  4. // Credits: LTFX
  5. // elhacker.net
  6. // etalking.com.ar
  7. // boyscout_arg@hotmail.com
  8. // 2013
  9. //
  10.  
  11. ////////////////////////////////////////////////////////////////////////////////////////////////
  12.  
  13. #include<windows.h>
  14. #include<stdio.h>
  15. #include<stdlib.h>
  16.  
  17. ////////////////////////////////////////////////////////////////////////////////////////////////
  18.  
  19. #define MAX_MESSAGES 13
  20. #define STRINGSIZE 0x40
  21. #define INTERVAL 500
  22. bool activar=false;
  23. char* resetMessage = "setinfo \"xxxxx\" \"\"";
  24. char* blankMessage = "setinfo \"xxxxx\" \"%s\"";
  25. //allow up to 13 messages
  26. char gHudMessage5[MAX_MESSAGES][256] = { "","","","","","","","","","","","","" };
  27. // a "hack" way to scroll list without copying strings
  28. int indexRedirect[MAX_MESSAGES] = { 0,1,2,3,4,5,6,7,8,9,10,11,12 };
  29.  
  30. HANDLE hThread;
  31.  
  32. ////////////////////////////////////////////////////////////////////////////////////////////////
  33.  
  34. void gSetHudMessage5(const char* message)
  35. {
  36. int dest = indexRedirect[0];
  37. indexRedirect[0] = indexRedirect[1];
  38. indexRedirect[1] = indexRedirect[2];
  39. indexRedirect[2] = indexRedirect[3];
  40. indexRedirect[3] = indexRedirect[4];
  41. indexRedirect[4] = indexRedirect[5];
  42. indexRedirect[5] = indexRedirect[6];
  43. indexRedirect[6] = indexRedirect[7];
  44. indexRedirect[7] = indexRedirect[8];
  45. indexRedirect[8] = indexRedirect[9];
  46. indexRedirect[9] = indexRedirect[10];
  47. indexRedirect[10] = indexRedirect[11];
  48. indexRedirect[11] = indexRedirect[12];
  49. indexRedirect[12] = dest;
  50. strcpy(gHudMessage5[dest],message);
  51. }
  52.  
  53. ////////////////////////////////////////////////////////////////////////////////////////////////
  54.  
  55. void Thread(const char* value){
  56.  
  57. DWORD* ptrValue = (DWORD*)value;
  58. DWORD OFFS = 0x0;//0x00000000;
  59. DWORD BLOCK = ((ptrValue+(STRINGSIZE*(MAX_MESSAGES-1)))-ptrValue);
  60. //sizeof(messagelist);
  61.  
  62. while(1){
  63. system("cls");
  64. SYSTEMTIME SysTime;
  65. GetLocalTime(&SysTime);
  66. char* formatstring   =   (SysTime.wMinute<10) ?  "%d:0%d\n" :  "%d:%d\n";
  67. printf(formatstring, SysTime.wHour, SysTime.wMinute);
  68. printf("Presione 1 para activar/desactivar el scroll! (Salir=2)\n");
  69.  
  70. if(GetAsyncKeyState(0x31)>0) {
  71.  
  72. activar=!activar;
  73. }
  74.  
  75. if(activar)
  76. {
  77. char* val = (char*)(ptrValue+(OFFS/sizeof(DWORD)));
  78. if(val && val[0]!=0)
  79. {
  80. char message[STRINGSIZE];
  81. message[0] = 0;// Antes de usar strcat!
  82. strcat( message , "Elhacker.net" );
  83. strcat( message , ": " );
  84. strcat( message , val );
  85. strcat( message , "\n" );
  86. gSetHudMessage5(message);
  87.  
  88. printf("\nHooK MSN v 1.0\n");
  89. for(int i=0; i<MAX_MESSAGES; i++){
  90. printf(gHudMessage5[indexRedirect[i]]);
  91. }
  92.  
  93. if(OFFS==BLOCK)
  94. {
  95. OFFS=0x0;//0x00000000;
  96. }
  97. else
  98. {
  99. OFFS+=STRINGSIZE;//0x00000040;
  100. }
  101. }
  102. }
  103.  
  104. if(GetAsyncKeyState(0x32)>0){
  105.  
  106. ExitProcess(0);
  107. //ResumeThread(hThread);// Can't from this thread
  108. //break;
  109. }
  110.  
  111. Sleep(INTERVAL);
  112. }
  113. }
  114.  
  115. ////////////////////////////////////////////////////////////////////////////////////////////////
  116.  
  117. int main(){
  118.  
  119. char messagelist[MAX_MESSAGES][STRINGSIZE];
  120. strcpy(messagelist[0],"Hola");
  121. strcpy(messagelist[1],"Mi");
  122. strcpy(messagelist[2],"Nombre");
  123. strcpy(messagelist[3],"Es");
  124. strcpy(messagelist[4],"David");
  125. strcpy(messagelist[5],"Y");
  126. strcpy(messagelist[6],"Esto");
  127. strcpy(messagelist[7],"Es");
  128. strcpy(messagelist[8],"Un");
  129. strcpy(messagelist[9],"Mensaje");
  130. strcpy(messagelist[10],"Scroll");
  131. strcpy(messagelist[11],"XD");
  132. strcpy(messagelist[12],"XD");
  133. char* value = (char*)&messagelist;
  134.  
  135. // Determinar el tamaño del bloque restando final con inicio
  136. // DWORD add1 = (DWORD)&messagelist[0];
  137. // DWORD add2 = (DWORD)&messagelist[12];
  138. // DWORD diff = (DWORD)(add2-add1);
  139. // printf("%X\n",diff);
  140. // system("pause");
  141.  
  142. DWORD tID;
  143. //tID = GetCurrentThreadId();
  144. CreateThread(0,1<<24,(unsigned long (__stdcall *)(void *))Thread,value,0,&tID);
  145. //printf("tID: %d\n",tID);
  146.  
  147. //hThread = OpenThread(THREAD_ALL_ACCESS, FALSE, GetCurrentThreadId());
  148. //Returns a "pseudo handle" that can only be used from the calling thread.
  149. hThread = GetCurrentThread();
  150. SuspendThread(hThread);
  151. //ResumeThread(hThread);
  152.  
  153. system("pause");
  154. return (0);
  155. }
  156.  
  157.  



Esta era su aplicación original


PROJECT:
http://www.mediafire.com/?q6dq36cdd9hxvxb


« Última modificación: 31 Marzo 2013, 14:14 pm por 85 » En línea

Me cerraron el Windows Live Spaces, entonces me creé un WordPress XD
http://etkboyscout.wordpress.com/
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
PROBLEMA CON SCROLL BAR
Diseño Gráfico
SCUD2 1 1,845 Último mensaje 24 Diciembre 2004, 18:47 pm
por DownRate
Scroll
Programación Visual Basic
Piojoman 0 1,557 Último mensaje 20 Octubre 2005, 16:56 pm
por Piojoman
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines