Club Builder - Foros de discusión Club Builder
Foro de C++Builder en español
 
 FAQFAQ   BuscarBuscar   MiembrosMiembros   Grupos de UsuariosGrupos de Usuarios   RegistrarseRegistrarse 
 PerfilPerfil   Entra para ver tus mensajes privadosEntra para ver tus mensajes privados   EntrarEntrar 

Moverse entre ventanas de windows..

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Consultas
Ver tema anterior :: Ver tema siguiente  
Autor Mensaje
Mensaje    Asunto: Moverse entre ventanas de windows.. Responder citando

He pensado en hacer una aplicación que se ejecute en "Background" la cual esté cambiando ventanas de aplicaciones abiertas de windows para que se muestren; es decir, tengo abierto Excel, pero después de 10 segs, quiero que se muestre la ventana de PowerPoint y asi...

Alguien sabrá como hacer esto?

Gracias de antemano.
_________________
Sin pena, ni gloria
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

A bote pronto se me ocurre que uses un timer en tu aplicación Hide. En ese timer usas las APIs FindWindow y ShowWindow

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

ok, deja lo pruebo, gracias man,
_________________
Sin pena, ni gloria
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Ok, eso ya lo tengo hecho man, de esta forma tan simple, con ayuda de el código que por ahí posteó Angel:
Código:
void __fastcall TForm1::Button1Click(TObject *Sender)
{
     HWND vent;
     venta = FindWindow(NULL, "WinTools");
     if (vent != NULL)
     {
      ShowWindow(vent, SW_RESTORE);
      SetForegroundWindow(vent);
     }
}


En este caso hice una prueba en un botón, y una carpeta que se llama "WinTools"

Pero me gustaría saber como meto en una lista todas las aplicaciones que tengo abiertas para ir rotando entre ellas?

Gracias de Antemano
_________________
Sin pena, ni gloria
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

Para enumerar procesos tendrás que usar las APIs CreateToolhelp32Snapshot, Process32First y Process32Next. Para enumerar las ventanas la API EnumWindows

Ten en cuenta que un proceso puede tener mas de una ventana o no tener ninguna... Tu decides lo que te interesa.

Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Perdón por tardar en responder, pero salí de viaje de improvisto.

Ya hice pruebas con el código, el problema ahora es que en el ListBox sale toooodos los procesos, y yo solo quiero las ventanas abiertas que se ven en mi barra de tareas.

Se podrá?

Saludos de antemano.
_________________
Sin pena, ni gloria
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mensaje    Asunto: Responder citando

yao_13 escribió:
...yo solo quiero las ventanas abiertas que se ven en mi barra de tareas.

Se podrá?...


Si. El siguiente ejemplo te obtiene en un LixBox una lista de aplicaciones con ventana estén o no ocultas.

Código:

//---------------------------------------------------------------------------
String GetExeNameByWnd(HWND hWnd)
{
   HANDLE snp;
   PROCESSENTRY32 lppe;
   DWORD dwProcessId;

   String Result = "";
   GetWindowThreadProcessId(hWnd, &dwProcessId);
   snp = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
   try{
     lppe.dwSize = sizeof(lppe);
     if(Process32First(snp, &lppe)){
       do{
         if(lppe.th32ProcessID == dwProcessId){
           Result = AnsiString(lppe.szExeFile);
           break;
         }
       }while(Process32Next(snp, &lppe));
     }
   }
   __finally{
     CloseHandle(snp);
   }
   return Result;
}

typedef BOOL (__stdcall *TP)();

BOOL CALLBACK GetWindows(HWND hWnd, TStrings* List)
{
    String Name = GetExeNameByWnd(hWnd);
    if(Name != "" && List->IndexOf(Name) == - 1)
       List->Add(Name);
    return true;
}


//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
   : TForm(Owner)
{
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
   EnumWindows((TP)GetWindows, LPARAM(Form1->ListBox1->Items));
}


Saludos.
Volver arriba
Ver perfil de usuario Enviar mensaje privado
Mensaje    Asunto: Responder citando

Estoy en algo parecido, quiero listar las ventanas mnimizadas y los TrayIcons de la barra de tareas.

Con esta funcion obtengo la lista de ventanas incluidas las no visibles:

Código:
bool __stdcall EnumWindowsProc(HWND hWnd, LPARAM lParam)
{
    //Ventanas es un TStringList Creado con el form
    char pszTitulo[256];
    String Titulo;
    if ( GetWindowText(hWnd, pszTitulo, sizeof(pszTitulo)) )
    {
     Titulo=pszTitulo;
     if(Ventanas->IndexOf(pszTitulo)==-1)
        Ventanas->Add( pszTitulo );
    }
    return true;
}
//---------------------------------------------------------------------------


En mi caso listo las visibles en un popupmenu usando IsWindowVisible() y IsWindowIconic() del API:

Código:
//---------------------------------------------------------------------------
void TfStandBy::ActualizaMinimizadas()
{
Ventanas->Clear();

  EnumWindows( reinterpret_cast<WNDENUMPROC>(EnumWindowsProc),
        reinterpret_cast<LPARAM>(this) );
       
for(int i=0;i<Ventanas>Count;i++)
 {
     HWND vent;
     String Window=Ventanas->Strings[i];
     vent = FindWindow(NULL,Window.c_str());
     if (vent != NULL)
     {
      if(IsWindowVisible(vent)||IsIconic(vent)
      {
       TMenuItem *Item=new TMenuItem(PopupMenu2);
       Item->Caption=Ventanas->Strings[i];
       Item->Hint=Ventanas->Strings[i];
       PopupMenu2->Items->Add(Item);
       Item->OnClick=AbrirVentana;
      }
     }
 }
}
//---------------------------------------------------------------------------


Ahora el evento para abrir la ventana seleccionada:
Código:
//---------------------------------------------------------------------------
void __fastcall TfStandBy::AbrirVentana(TObject *Sender)
{
     TMenuItem *Item=(TMenuItem*)Sender;
     HWND vent;
     vent = FindWindow(NULL,Item->Hint.c_str());
     if (vent != NULL)
     {
      ShowWindow(vent, SW_RESTORE);
      SetForegroundWindow(vent);
     }
}
//---------------------------------------------------------------------------


La mayor Parte del codigo lo he extraido de este magnifico foro, lo menos googleando.
Volver arriba
Ver perfil de usuario Enviar mensaje privado Enviar email
Mostrar mensajes de anteriores:   
Cambiar a:  
No puedes publicar temas nuevos en este foro
No puedes responder a temas en este foro
No puedes editar tus mensajes en este foro
No puedes borrar tus mensajes en este foro
No puedes votar en las encuestas de este foro


Hosting WordPress Indedmedia desde 3,99 €
© 2002–2026 Club Builder · Funciona con phpBB.