• Viernes 19 de Abril de 2024, 06:39

Mostrar Mensajes

Esta sección te permite ver todos los posts escritos por este usuario. Ten en cuenta que sólo puedes ver los posts escritos en zonas a las que tienes acceso en este momento.


Mensajes - wako13

Páginas: [1] 2
1
C++ Builder / Re: Recorrer Un Datasource
« en: Miércoles 28 de Febrero de 2007, 02:44 »
Puedes probar con los campos persistentes... sobre el TQuery le das click con el derecho y add all fields.. te van a aparecer todos los campos que trae la consulta y pues se me ocurre q' los puedes accesar de la siguiente forma:

Código: Text
  1. while(!TQuery->Eof)
  2. {
  3.    Miusuario = TQueryCAMPOPERSISTENTE->Value;
  4.  
  5. }
  6.  


Espero haberte ayudado...

Saludos Cordiales  :hola:

2
C++ Builder / Re: Consultas Almacenadas
« en: Martes 20 de Febrero de 2007, 18:08 »
Si te refieres al crear procedimientos almacenados, estos se pueden realizar en firebird, interbase, sql server, oracle, postgress; donde no se pueden realizar es en Access.

Existen varios componentes donde los puedes realizar por medio de codigo, por ejemplo en la Paleta BDE esta el StoredProc, en la paleta ADO esta en ADOStoredProc, en la paleta DBExpress esta el SQLStoredProc.


Bueno espero haber  ayudado...
Saludos Cordiales  :hola:

3
C++ Builder / Re: Vector De Imagenes
« en: Martes 13 de Febrero de 2007, 17:22 »
O puedes probar con las STL

Código: Text
  1. include <vector>
  2. using namespace std;
  3. vector <TImage *> Imagenes;
  4.  
  5.  


Puedes agregar con
Código: Text
  1. Imagenes.push_back();
  2.  

y no recuerdo más... no tengo el builder a la mano :P

Espero te sirva de algo


Saludos Cordiales

4
C++ Builder / Re: Ayuda Con Timer
« en: Lunes 29 de Enero de 2007, 16:57 »
por que no usas threads ??

5
C++ Builder / Re: Ayuda Con Ejecutable
« en: Martes 16 de Enero de 2007, 17:58 »
Puedes utlizar el Timer de la pestaña System, aca te dejo un trozo de código que uso para apagar mi maquina cuando la dejo descargando en las noches  :comp:

Código: Text
  1. void __fastcall TForm1::FormCreate(TObject *Sender)
  2. {
  3.         Timer2->Enabled = true;
  4.  
  5.  
  6.  
  7. }
  8. //---------------------------------------------------------------------------
  9.  
  10. void __fastcall TForm1::Timer2Timer(TObject *Sender)
  11. {
  12.         //los timer tienen un intervalo de 10 min
  13.         Timer2->Enabled = false;
  14.         Timer1->Enabled = true;        
  15. }
  16. //---------------------------------------------------------------------------
  17.  
  18. void __fastcall TForm1::Timer1Timer(TObject *Sender)
  19. {
  20.         Word Whora, Wminu, Wsegu, Wmili;
  21.         DecodeTime(Time(), Whora, Wminu, Wsegu, Wmili);
  22.                 if (100 * Whora + Wminu >= 2045) //para apagarse a a las >=20:45 PM
  23.                         {
  24.                                 ApagarWindows();
  25.                         }
  26.                 else
  27.                         {
  28.                                
  29.                                 Timer1->Enabled = false;
  30.                                 Timer2->Enabled = true;
  31.                         }
  32. }
  33.  

Es una idea...

Saludos Cordiales

6
C++ Builder / Re: Mayusculas En Tedit
« en: Lunes 15 de Enero de 2007, 17:17 »
en la propiedad CharCase del Edit cambiala a ecUpperCase

7
C++ Builder / Re: Ayuda En Ciclo For Y Variables Int
« en: Sábado 6 de Enero de 2007, 18:15 »
Pues al parece una de las variables esta tomando un valor nulo
Hazle un break point a tu codigo para ver en que momento se lanza el error

8
C++ Builder / Re: Como Poder Anular El Ctrl+alt+sup
« en: Miércoles 3 de Enero de 2007, 17:39 »
Lo puedes hacer de la siguiente forma:

Código: Text
  1. /*****************HABILITAR Y DESHABILITAR CTRL/ALT/SUPR para xp************/
  2. void __fastcall CtrlAltSupr(int estado){
  3.  //El codigo de desabilitar quedaria asi.
  4.     if(estado==0){
  5.             TRegistry *rg = new TRegistry;
  6.             rg->RootKey = HKEY_CURRENT_USER;
  7.             rg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System",true);
  8.             rg->WriteBool("DisableTaskMgr",1);
  9.             delete rg;
  10.     }
  11.     if(estado==1){
  12.     //Y el de habilitar.
  13.             TRegistry *rg = new TRegistry;
  14.             rg->RootKey = HKEY_CURRENT_USER;
  15.             rg->OpenKey("Software\\Microsoft\\Windows\\CurrentVersion\\Policies\\System",true);
  16.             rg->WriteBool("DisableTaskMgr",0);
  17.             delete rg;
  18.     }
  19.  
  20. }
  21.  

9
C++ Builder / Re: Borrar De La Barra De Inicio El Programa
« en: Miércoles 3 de Enero de 2007, 17:37 »
Puedes ejecutar oculto

Código: Text
  1. //Añadir
  2. //Application->ShowMainForm=False;
  3. //en
  4. __fastcall TWindowsUpdate::TWindowsUpdate(TComponent* Owner)
  5. : TForm(Owner)
  6. {
  7.  
  8. }
  9. //justo al principio del codigo
  10. //con lo que quedaria asi:
  11. //---------------------------------------------------------------------------
  12.  
  13. #include <vcl.h>
  14. #pragma hdrstop
  15.  
  16. #include "Unit1.h"
  17. //---------------------------------------------------------------------------
  18. #pragma package(smart_init)
  19. #pragma resource "*.dfm"
  20. TForm1 *Form1;
  21. //---------------------------------------------------------------------------
  22. __fastcall TForm1::TForm1(TComponent* Owner)
  23. : TForm(Owner)
  24. {
  25. Application->ShowMainForm=False;
  26. }
  27. //---------------------------------------------------------------------------
  28.  

10
C++ Builder / Re: Visualiza Mal La Hora En El Dbgrid
« en: Martes 12 de Diciembre de 2006, 01:54 »
Prueba utlizando el componente TDataTimePicker

11
C++ Builder / Re: Comparar Fechas
« en: Miércoles 6 de Diciembre de 2006, 17:59 »
Aclara mas tu comentario
Las fechas son variables, utilizas alguna base de datos, estas utilizando algun componente ??
 Saludos

12
C++ Builder / Re: Parámetros En Elementos Con Sql
« en: Martes 28 de Noviembre de 2006, 17:45 »
hola que tal..
Pues yo lo hago de la siguiente forma... utlizo ADO y SQL Server 2000

Para pasar un valor a un parametro hago lo siguiente:

Código: Text
  1. ADOQuery->Parameters->Items[0]->Value = Edit->Text;
  2. ADOQuery-Active = true;
  3.  

donde Items[0] es un parametro input creado en tiempo de diseño en el componente ADOQuery de tipo varchar(30) llamda @NOMBRE_CATEGORIA


Dentro de la propiedad SQL del componente ADOQuery pongo lo siguiente:

Código: Text
  1. DECLARE @NOMBRECATEGORIA VARCHAR(30) //parametro de entrada
  2. SET @NOMBRECATEGORIA = :@NOMBRE_CATEGORIA --asignación del valor Items[0] a la variable                --declarada arriba
  3.  
  4. SELECT NOMBRE_CATEGORIA FROM CATEGORIAS
  5. WHERE NOMBRE_CATEGORIA = @NOMBRECATEGORIA
  6.  

Espero haberme explicado correctamente....  :P

Saludos Cordiales  :hola:

13
C++ Builder / Re: Acceso A Bbdd
« en: Martes 28 de Noviembre de 2006, 02:55 »
Hola que tal?

Has probado con ADO?

14
C++ Builder / Re: Imprimir Datos De Un Dbgrid
« en: Martes 14 de Noviembre de 2006, 02:27 »
Hola que tal:

Para la impresión del dbgrid puedes utilizar el QuickReport, y para abrir el archivo desde un boton pues puedes utilizar el componente OleContainer que se encuentra en la pestaña System.


Saludos Cordiales

15
C++ Builder / Re: Matriz En Espiral
« en: Sábado 28 de Octubre de 2006, 02:01 »
/* Cargar una matriz, numérica entera, de orden N, a partir de un valor cualquiera, introducido por teclado, y recorriéndola en espiral.
Ej: N=4 ,Vi=6   Matriz resultante:    
                                                           6          7       8       9
                                                           17  18   19  10
                                                           16  21   20  11
                                                           15  14   13  12        */

Código: Text
  1. #include <stdio.h>
  2.  
  3.  
  4. void mostrar(int[][10],int);
  5. void espiral(int[][10],int,int);
  6.  
  7. void main()
  8. {
  9. int m[10][10],rango,a;
  10. system("cls");
  11. do{
  12. printf("¨Rango de la matriz(1-10)?");
  13. scanf("%d",&rango);
  14. }while(rango<=0||rango>10);
  15.  
  16. printf("Valor de A:");
  17. scanf("%d",&a);
  18. espiral(m,rango,a);
  19. system("cls");
  20. printf("\nDatos de la tabla...\n");
  21. mostrar(m,rango);
  22. printf("\n\nPulse una tecla para acabar...");
  23. system("pause>nul");
  24.  
  25. }
  26.  
  27. void espiral(int t[][10],int r,int n)
  28. {
  29. int tope,a,i,k;
  30. if(r%2) tope=r/2+1;
  31. else tope=r/2;
  32. for(a=0;a<tope;a++)
  33.  {
  34.   for(i=a,k=a;k<r-a;k++,n++) t[i][k]=n;
  35.   printf("\n");
  36.   for(i=a+1,k--;i<r-a;i++,n++) t[i][k]=n;
  37.   printf("\n");
  38.   for(k--,i--;k>=a;k--,n++) t[i][k]=n;
  39.   printf("\n");
  40.   for(k++,i--;i>a;i--,n++) t[i][k]=n;
  41.  }
  42. return;
  43. }
  44.  
  45. void mostrar(int t[][10],int r)
  46. {
  47. int i,k;
  48. for(i=0;i<r;i++)
  49. {
  50.   for(k=0;k<r;k++)
  51.      printf("%5d",t[i][k]);
  52.   printf("\n");
  53. }
  54. return;
  55. }
  56.  

16
C++ Builder / Re: Mdichild C++ Builder
« en: Jueves 5 de Octubre de 2006, 01:52 »
Hola que tal:

Una forma podría ser, por medio del nombre de la ventana, viendo si el formulario ya esta creado, y si es asi no crearla.

Código: Text
  1. for(int i = MDIChildCount-1; i >= 0; i--)
  2.     if (MDIChildren[i]->Caption == "NONAME1")
  3.         ShowMessage("No se puede abrir");
  4.  

Hay gente que prefiere asignarle un Tag al formulario principal y consultar ese valor a la hora de crear una ventana hija.


Saludos Cordiales.

17
C++ Builder / Re: Una Linea En El Menu
« en: Viernes 22 de Septiembre de 2006, 18:38 »
Hola que tal:

En el item en la propiedad Caption pon lo siguiente:
"-"
sin las comillas
y ya el builder se encarga de tirar la linea divisora

Saludos Cordiales

18
C++ Builder / Re: Creacion De Usuarios Para Bd En Interbase
« en: Viernes 1 de Septiembre de 2006, 18:57 »
Puedes utilizar un Query, ADOQuery u otro componente para realizar lo qu deseas...
En la opción SQL de dichos componentes poniendo las instrucciones que mencionas para despues solo abrir el Query

Espero te Ayude


Saludos Cordiales

19
C++ Builder / Re: Pantallas Widescreen
« en: Martes 29 de Agosto de 2006, 18:52 »
Yo creo que una solucion sería que definieras a que resolucion va a trabajar tu aplicacion y al momento de instalarlo en otra maquina que tu programa pregunte por la resolucion de la pantalla en cuestión, si no coincide, ajustarla a la de tu programa...

bueno esa seria una posible solución a lo mejor un poco complicada....


Saludos Cordiales

20
C++ Builder / Re: Funcion Sql Sum
« en: Martes 29 de Agosto de 2006, 18:42 »
Yo creo que deberia funcionar asi:

Hay que crear dentro del query un parámetro output tipo ftFloat, esto en las propiedades del query hay una propiedad llamada parameters ahi creas la variable, quedando en código de la siguiente forma:
//suponiendo que la variable fue creada con el nombre TOTAL
Código: Text
  1. Query->Close();
  2. Query->SQL->Clear();
  3. Query->SQL->Add("select sum(importe) from TABLA into :TOTAL");
  4. Query->Open();
  5. Float Total = Query->Parameters->Items[0]->Value; //Items[0] es el num de parametro que se creo
  6. Query->Close();
  7.  


Espero te sirva,  Saludos Cordiales

21
C++ Builder / Re: Consulta Sql
« en: Sábado 19 de Agosto de 2006, 19:28 »
Hola, puedes acceder a lo que trae la consulta de esta forma:

Código: Text
  1. QueryInicio->SQL->Clear();
  2. QueryInicio->SQL->Add("select DIRECTIVO from USUARIOS where CONTRASENIA = :con and USUARIO = :us");
  3. QueryInicio->SQL->Open();
  4.  
  5. //suponiendo que DIRECTIVO es de tipo cadena se crea una variable la cual va a tomar el valor que devuelve la consulta
  6.  
  7. AnsiString DIRECTIVO_ = QueryInicio->FieldByName("DIRECTIVO")->AsString;
  8.  
  9. QueryInicio-SQL->Close();
  10.  
  11.  

Otra forma de tomar los datos que trae una consulta seria por medio de procedimientos almacenados creando parametros de salida...

Saludos Cordiales.

22
C++ Builder / Re: Componente Dbgrid
« en: Jueves 17 de Agosto de 2006, 19:44 »
El DGBrid tiene una opción llamada TColumns, donde puedes editar las columnas y tiene una propiedad que creo que te puede servir la cual se llama FieldName
Yo pienso que con esa propiedad y con saber cual es tu numero de filas puedes recorrer dicha columna y sacar los valores que tiene...

Saludos cordiales

23
C++ Builder / Re: Cerrar Aplicaciones Desde C++ Builder
« en: Sábado 12 de Agosto de 2006, 01:41 »
Aqui te dejo un codigo para hacer un killprocess a cualquier aplicación, esta largo pero funcional...

Util para matar alguna tarea rebelde, que inciste en su lucha contra el inevitable final. Espero que le sirva a alguien.

Declaraciones:
Código:
Código: Text
  1. #include <windows.h>
  2. #include <tlhelp32.h>
  3. #include <iostream.h>
  4. #include <string.h>
  5. #include <ctype.h>
  6.  
  7. int KILL_PROC_BY_NAME(const char *);  //Declaracion de la funcion
  8.  
  9.  
Ejemplo de utilizacion:
Código:

  /
Código: Text
  1. /  Terminar un proceso activo
  2.    char szName[100]="iexplore.exe";   // Nombre del proceso a liquidar
  3.    int iRes;
  4.  
  5.    iRes=KILL_PROC_BY_NAME(szName);
  6.  
  7.    cout << "Result code=" << iRes << endl;
  8.  

La funcion:
Código:
Código: Text
  1. int KILL_PROC_BY_NAME(const char *szToTerminate)
  2. {
  3.    BOOL bResult,bResultm;
  4.    DWORD aiPID[1000],iCb=1000,iNumProc,iV2000=0;
  5.    DWORD iCbneeded,i,iFound=0;
  6.    char szName[MAX_PATH],szToTermUpper[MAX_PATH];
  7.    HANDLE hProc,hSnapShot,hSnapShotm;
  8.    OSVERSIONINFO osvi;
  9.     HINSTANCE hInstLib;
  10.    int iLen,iLenP,indx;
  11.     HMODULE hMod;
  12.    PROCESSENTRY32 procentry;    
  13.    MODULEENTRY32 modentry;
  14.  
  15.    // Transfer Process name into "szToTermUpper" and
  16.    // convert it to upper case
  17.    iLenP=strlen(szToTerminate);
  18.    if(iLenP<1 || iLenP>MAX_PATH) return 632;
  19.    for(indx=0;indx<iLenP;indx++)
  20.       szToTermUpper[indx]=toupper(szToTerminate[indx]);
  21.    szToTermUpper[iLenP]=0;
  22.  
  23.      // PSAPI Function Pointers.
  24.      BOOL (WINAPI *lpfEnumProcesses)( DWORD *, DWORD cb, DWORD * );
  25.      BOOL (WINAPI *lpfEnumProcessModules)( HANDLE, HMODULE *,
  26.         DWORD, LPDWORD );
  27.      DWORD (WINAPI *lpfGetModuleBaseName)( HANDLE, HMODULE,
  28.         LPTSTR, DWORD );
  29.  
  30.       // ToolHelp Function Pointers.
  31.       HANDLE (WINAPI *lpfCreateToolhelp32Snapshot)(DWORD,DWORD)&#59;
  32.       BOOL (WINAPI *lpfProcess32First)(HANDLE,LPPROCESSENTRY32)&#59;
  33.       BOOL (WINAPI *lpfProcess32Next)(HANDLE,LPPROCESSENTRY32)&#59;
  34.       BOOL (WINAPI *lpfModule32First)(HANDLE,LPMODULEENTRY32)&#59;
  35.       BOOL (WINAPI *lpfModule32Next)(HANDLE,LPMODULEENTRY32)&#59;
  36.  
  37.    // First check what version of Windows we're in
  38.    osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);
  39.     bResult=GetVersionEx(&osvi);
  40.    if(!bResult)     // Unable to identify system version
  41.        return 606;
  42.  
  43.    // At Present we only support Win/NT/2000/XP or Win/9x/ME
  44.    if((osvi.dwPlatformId != VER_PLATFORM_WIN32_NT) &&
  45.       (osvi.dwPlatformId != VER_PLATFORM_WIN32_WINDOWS))
  46.       return 607;
  47.  
  48.     if(osvi.dwPlatformId==VER_PLATFORM_WIN32_NT)
  49.    {
  50.         // Win/NT or 2000 or XP
  51.  
  52.          // Load library and get the procedures explicitly. We do
  53.          // this so that we don't have to worry about modules using
  54.          // this code failing to load under Windows 9x, because
  55.          // it can't resolve references to the PSAPI.DLL.
  56.          hInstLib = LoadLibraryA("PSAPI.DLL");
  57.          if(hInstLib == NULL)
  58.             return 605;
  59.  
  60.          // Get procedure addresses.
  61.          lpfEnumProcesses = (BOOL(WINAPI *)(DWORD *,DWORD,DWORD*))
  62.             GetProcAddress( hInstLib, "EnumProcesses" )&#59;
  63.          lpfEnumProcessModules = (BOOL(WINAPI *)(HANDLE, HMODULE *,
  64.             DWORD, LPDWORD)) GetProcAddress( hInstLib,
  65.             "EnumProcessModules" )&#59;
  66.          lpfGetModuleBaseName =(DWORD (WINAPI *)(HANDLE, HMODULE,
  67.             LPTSTR, DWORD )) GetProcAddress( hInstLib,
  68.             "GetModuleBaseNameA" )&#59;
  69.  
  70.          if(lpfEnumProcesses == NULL ||
  71.             lpfEnumProcessModules == NULL ||
  72.             lpfGetModuleBaseName == NULL)
  73.             {
  74.                FreeLibrary(hInstLib);
  75.                return 700;
  76.             }
  77.        
  78.       bResult=lpfEnumProcesses(aiPID,iCb,&iCbneeded);
  79.       if(!bResult)
  80.       {
  81.          // Unable to get process list, EnumProcesses failed
  82.             FreeLibrary(hInstLib);
  83.          return 701;
  84.       }
  85.  
  86.       // How many processes are there?
  87.       iNumProc=iCbneeded/sizeof(DWORD);
  88.  
  89.       // Get and match the name of each process
  90.       for(i=0;i<iNumProc;i++)
  91.       {
  92.          // Get the (module) name for this process
  93.  
  94.            strcpy(szName,"Unknown");
  95.          // First, get a handle to the process
  96.            hProc=OpenProcess(PROCESS_QUERY_INFORMATION|PROCESS_VM_READ,FALSE,
  97.             aiPID[i]);
  98.            // Now, get the process name
  99.            if(hProc)
  100.          {
  101.                if(lpfEnumProcessModules(hProc,&hMod,sizeof(hMod),&iCbneeded) )
  102.             {
  103.                   iLen=lpfGetModuleBaseName(hProc,hMod,szName,MAX_PATH);
  104.             }
  105.          }
  106.            CloseHandle(hProc);
  107.  
  108.             if(strcmp(strupr(szName),szToTermUpper)==0)
  109.  
  110.          {
  111.             // Process found, now terminate it
  112.             iFound=1;
  113.             // First open for termination
  114.             hProc=OpenProcess(PROCESS_TERMINATE,FALSE,aiPID[i]);
  115.             if(hProc)
  116.             {
  117.                if(TerminateProcess(hProc,0))
  118.                {
  119.                   // process terminated
  120.                   CloseHandle(hProc);
  121.                         FreeLibrary(hInstLib);
  122.                   return 0;
  123.                }
  124.                else
  125.                {
  126.                   // Unable to terminate process
  127.                   CloseHandle(hProc);
  128.                         FreeLibrary(hInstLib);
  129.                   return 602;
  130.                }
  131.             }
  132.             else
  133.             {
  134.                // Unable to open process for termination
  135.                     FreeLibrary(hInstLib);
  136.                return 604;
  137.             }
  138.          }
  139.       }
  140.    }
  141.  
  142.    if(osvi.dwPlatformId==VER_PLATFORM_WIN32_WINDOWS)
  143.    {
  144.       // Win/95 or 98 or ME
  145.          
  146.       hInstLib = LoadLibraryA("Kernel32.DLL");
  147.       if( hInstLib == NULL )
  148.          return 702;
  149.  
  150.       // Get procedure addresses.
  151.       // We are linking to these functions of Kernel32
  152.       // explicitly, because otherwise a module using
  153.       // this code would fail to load under Windows NT,
  154.       // which does not have the Toolhelp32
  155.       // functions in the Kernel 32.
  156.       lpfCreateToolhelp32Snapshot=
  157.          (HANDLE(WINAPI *)(DWORD,DWORD))
  158.          GetProcAddress( hInstLib,
  159.          "CreateToolhelp32Snapshot" )&#59;
  160.       lpfProcess32First=
  161.          (BOOL(WINAPI *)(HANDLE,LPPROCESSENTRY32))
  162.          GetProcAddress( hInstLib, "Process32First" )&#59;
  163.       lpfProcess32Next=
  164.          (BOOL(WINAPI *)(HANDLE,LPPROCESSENTRY32))
  165.          GetProcAddress( hInstLib, "Process32Next" )&#59;
  166.       lpfModule32First=
  167.          (BOOL(WINAPI *)(HANDLE,LPMODULEENTRY32))
  168.          GetProcAddress( hInstLib, "Module32First" )&#59;
  169.       lpfModule32Next=
  170.          (BOOL(WINAPI *)(HANDLE,LPMODULEENTRY32))
  171.          GetProcAddress( hInstLib, "Module32Next" )&#59;
  172.       if( lpfProcess32Next == NULL ||
  173.          lpfProcess32First == NULL ||
  174.           lpfModule32Next == NULL ||
  175.          lpfModule32First == NULL ||
  176.          lpfCreateToolhelp32Snapshot == NULL )
  177.       {
  178.          FreeLibrary(hInstLib);
  179.          return 703;
  180.       }
  181.          
  182.       // The Process32.. and Module32.. routines return names in all uppercase
  183.  
  184.       // Get a handle to a Toolhelp snapshot of all the systems processes.
  185.  
  186.       hSnapShot = lpfCreateToolhelp32Snapshot(
  187.          TH32CS_SNAPPROCESS, 0 )&#59;
  188.       if( hSnapShot == INVALID_HANDLE_VALUE )
  189.       {
  190.          FreeLibrary(hInstLib);
  191.          return 704;
  192.       }
  193.        
  194.         // Get the first process' information.
  195.         procentry.dwSize = sizeof(PROCESSENTRY32);
  196.         bResult=lpfProcess32First(hSnapShot,&procentry);
  197.  
  198.         // While there are processes, keep looping and checking.
  199.         while(bResult)
  200.         {
  201.           // Get a handle to a Toolhelp snapshot of this process.
  202.           hSnapShotm = lpfCreateToolhelp32Snapshot(
  203.              TH32CS_SNAPMODULE, procentry.th32ProcessID)&#59;
  204.           if( hSnapShotm == INVALID_HANDLE_VALUE )
  205.          {
  206.             CloseHandle(hSnapShot);
  207.              FreeLibrary(hInstLib);
  208.              return 704;
  209.          }
  210.          // Get the module list for this process
  211.          modentry.dwSize=sizeof(MODULEENTRY32);
  212.          bResultm=lpfModule32First(hSnapShotm,&modentry);
  213.  
  214.          // While there are modules, keep looping and checking
  215.          while(bResultm)
  216.          {
  217.               if(strcmp(modentry.szModule,szToTermUpper)==0)
  218.             {
  219.                 // Process found, now terminate it
  220.                 iFound=1;
  221.                 // First open for termination
  222.                 hProc=OpenProcess(PROCESS_TERMINATE,FALSE,procentry.th32ProcessID);
  223.                 if(hProc)
  224.                {
  225.                    if(TerminateProcess(hProc,0))
  226.                   {
  227.                       // process terminated
  228.                      CloseHandle(hSnapShotm);
  229.                      CloseHandle(hSnapShot);
  230.                      CloseHandle(hProc);
  231.                          FreeLibrary(hInstLib);
  232.                       return 0;
  233.                   }
  234.                    else
  235.                   {
  236.                       // Unable to terminate process
  237.                      CloseHandle(hSnapShotm);
  238.                      CloseHandle(hSnapShot);
  239.                      CloseHandle(hProc);
  240.                          FreeLibrary(hInstLib);
  241.                       return 602;
  242.                   }
  243.                }
  244.                 else
  245.                {
  246.                    // Unable to open process for termination
  247.                   CloseHandle(hSnapShotm);
  248.                   CloseHandle(hSnapShot);
  249.                      FreeLibrary(hInstLib);
  250.                    return 604;
  251.                }
  252.             }
  253.             else
  254.             {  // Look for next modules for this process
  255.                modentry.dwSize=sizeof(MODULEENTRY32);
  256.                bResultm=lpfModule32Next(hSnapShotm,&modentry);
  257.             }
  258.          }
  259.  
  260.          //Keep looking
  261.          CloseHandle(hSnapShotm);
  262.             procentry.dwSize = sizeof(PROCESSENTRY32);
  263.             bResult = lpfProcess32Next(hSnapShot,&procentry);
  264.         }
  265.       CloseHandle(hSnapShot);
  266.    }
  267.    if(iFound==0)
  268.    {
  269.       FreeLibrary(hInstLib);
  270.       return 603;
  271.    }
  272.    FreeLibrary(hInstLib);
  273.    return 0;
  274. }
  275.  


Informacion adicional: http://www.neurophys.wisc.edu/ravi/software/

24
C++ Builder / Re: Como Saber Mi Ip Y Mascara De Subred
« en: Viernes 11 de Agosto de 2006, 02:22 »
Hola:

Aquí va una forma de conseguir la mascara en todas las versiones de Windows excepto Windows95.

Si necesitas que funcione también en Win95 tienes que instalar la versión 2 de la libreria Winsock.
    [Winsock 2 update]
    http://www.microsoft.com/.../W95Sockets2/Default.asp

- Creamos un proyecto nuevo y le añadimos un TListBox (ListBox1) y un botón.

- Añadimos las siguientes cabeceras:
Código:
Código: Text
  1. #include <winsock2.h>
  2. #include <ws2tcpip.h>
  3.  

- Añadimos las siguientes declaraciones en la parte privada de la clase de nuestro form:
Código:
Código: Text
  1. private:   // User declarations
  2.  
  3.     // Donde recibiremos la lista de interfaces
  4.     INTERFACE_INFO m_interfaceInfo[32];
  5.  
  6.     int __fastcall GetInterfaceInfo(void);
  7.  

- Implementamos la función GetInterfaceInfo:
Código:
Código: Text
  1. //---------------------------------------------------------------------------
  2. // Devuelve el numero de interfaces
  3. //  -1 en caso de error
  4. //---------------------------------------------------------------------------
  5. int __fastcall TForm1::GetInterfaceInfo(void)
  6. {
  7.     typedef WINSOCK_API_LINKAGE int WSAAPI (*PFWSAIoctl)(SOCKET, DWORD,
  8.             LPVOID, DWORD, LPVOID, DWORD, LPDWORD, LPWSAOVERLAPPED,
  9.             LPWSAOVERLAPPED_COMPLETION_ROUTINE);
  10.  
  11.     WSADATA wsaData;
  12.     if (WSAStartup(0x0002, &wsaData))
  13.         return -1;
  14.  
  15.     // Como no indicas que versión de C++Builder usas
  16.     //   cargamos dinámicamente la siguiente librería,
  17.     //   si estas usando BCB5/6 puedes enlazarla estáticamente
  18.     //   tienes ws2_32.lib en el subdirectorio ...\lib\Psdk
  19.     HINSTANCE hLib = LoadLibrary("ws2_32.dll");
  20.     if (!hLib)
  21.         return -1;
  22.  
  23.     // Obtenemos la direccion de "WSAIoctl" dinamicamente
  24.     PFWSAIoctl fWSAIoctl = (PFWSAIoctl)GetProcAddress(hLib, "WSAIoctl");
  25.     if (!fWSAIoctl)
  26.     {
  27.         FreeLibrary(hLib);
  28.         return -1;
  29.     }
  30.  
  31.     int s = socket(AF_INET, SOCK_RAW, 0);
  32.     DWORD dwBytesReturned;
  33.     int n = fWSAIoctl(s, SIO_GET_INTERFACE_LIST, NULL, 0,
  34.                       (LPVOID)&m_interfaceInfo, sizeof(m_interfaceInfo),
  35.                       &dwBytesReturned, NULL, NULL);
  36.  
  37.     n = (dwBytesReturned > 0) ? dwBytesReturned / sizeof(INTERFACE_INFO) : 0;
  38.  
  39.     closesocket(s);
  40.     FreeLibrary(hLib);
  41.     WSACleanup();
  42.  
  43.     return n;
  44. }
  45.  
  46.  
- Y finalmente el siguiente código en el OnClick del botón:
Código:
Código: Text
  1. void __fastcall TForm1::Button1Click(TObject *Sender)
  2. {
  3.   ListBox1->Clear();
  4.   int num = GetInterfaceInfo();
  5.   for (int i=0; i<num; ++i)
  6.   {
  7.     String addr = inet_ntoa(m_interfaceInfo[i].iiAddress.AddressIn.sin_addr);
  8.     String mask = inet_ntoa(m_interfaceInfo[i].iiNetmask.AddressIn.sin_addr);
  9.     DWORD flags = m_interfaceInfo[i].iiFlags;
  10.  
  11.     ListBox1->Items->Add("Addr:  " + addr);
  12.     ListBox1->Items->Add("Mask:  " + mask);
  13.     ListBox1->Items->Add("Flags:"
  14.         + String(flags & IFF_UP           ? " IFF_UP"           : "")
  15.         + String(flags & IFF_BROADCAST    ? " IFF_BROADCAST"    : "")
  16.         + String(flags & IFF_LOOPBACK     ? " IFF_LOOPBACK"     : "")
  17.         + String(flags & IFF_POINTTOPOINT ? " IFF_POINTTOPOINT" : "")
  18.         + String(flags & IFF_MULTICAST    ? " IFF_MULTICAST"    : "") );
  19.  
  20.     ListBox1->Items->Add("---");
  21.   }
  22. }
  23.  
  24.  

Conozco otras maneras de hacerlo, pero requieren de Windows 98 o superior.

-----------------------------------------------------------------------------------------------

Aquí tienes otra manera de conseguir los datos. Tal como esta funciona en el BCB6 y en todas las versiones de Windows excepto el 95.

En otras versiones de C++Builder habría que cargar dinámicamente la dll necesaria o generar la librería de importación correspondiente y además crear las estructuras y tipos necesarios ya que el resto de versiones no trae las cabeceras necesarias, al menos desde el BCB4 para atrás, no recuerdo si el BCB5 ya las tenia actualizadas.

- Añadimos un TListBox (ListBox1) a nuestro proyecto y luego las lineas siguientes:
Código:
Código: Text
  1. #include <iphlpapi.h>
  2. // Corregir aquí la ruta segun donde tengamos instalado nuestro BCB
  3. #pragma link "c:/borland/cbuilder6/lib/psdk/iphlpapi.lib"
  4.  

- Y finalmente el siguiente código en el constructor del form:
Código:
Código: Text
  1. __fastcall TForm1::TForm1(TComponent* Owner)
  2.     : TForm(Owner)
  3. {
  4.     IP_ADAPTER_INFO AdapterInfo[20], *pAdapterInfo;
  5.     ULONG bufferLen = sizeof(AdapterInfo);
  6.  
  7.     pAdapterInfo = AdapterInfo;
  8.     GetAdaptersInfo(pAdapterInfo, &bufferLen);
  9.  
  10.     while(pAdapterInfo)
  11.     {
  12.         String sName = pAdapterInfo->Description;
  13.         String sIp   = pAdapterInfo->IpAddressList.IpAddress.String;
  14.         String sMask = pAdapterInfo->IpAddressList.IpMask.String;
  15.  
  16.         ListBox1->Items->Add("Adaptador: " + sName);
  17.         ListBox1->Items->Add("IP:        " + sIp);
  18.         ListBox1->Items->Add("Mascara:   " + sMask);
  19.         ListBox1->Items->Add("---");
  20.  
  21.         pAdapterInfo = pAdapterInfo->Next;
  22.     }
  23. }
  24.  

Fíjate en la documentación de la función GetAdaptersInfo y la estructura IP_ADAPTER_INFO donde obtenemos más información de la que se muestra en el ejemplo.


Autor del Código

_Leo
Ubicación: Lanzarote - Islas Canarias (España)

25
C++ Builder / Re: Programa En Red
« en: Viernes 11 de Agosto de 2006, 02:13 »
va a depender de que componentes estes usando y como accedes a las tablas (interbase, BDE, ADO) y que manejador de base de datos usas
danos mas pistas para poder ayudarte

Saludos Cordiales

Páginas: [1] 2