| Ver tema anterior :: Ver tema siguiente |
| Autor |
Mensaje |
yao_13 Master


Registrado: 29 Jul 2003Mensajes: 226
|
Publicado: Vie 15 May, 2009 6:22 pm Asunto: Moverse entre ventanas de windows.. |
|
|
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 |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Vie 15 May, 2009 10:26 pm Asunto: |
|
|
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 |
|
 |
yao_13 Master


Registrado: 29 Jul 2003Mensajes: 226
|
Publicado: Vie 15 May, 2009 11:08 pm Asunto: |
|
|
ok, deja lo pruebo, gracias man, _________________ Sin pena, ni gloria |
|
| Volver arriba |
|
 |
yao_13 Master


Registrado: 29 Jul 2003Mensajes: 226
|
Publicado: Lun 18 May, 2009 3:53 pm Asunto: |
|
|
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 |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Lun 18 May, 2009 7:42 pm Asunto: |
|
|
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 |
|
 |
yao_13 Master


Registrado: 29 Jul 2003Mensajes: 226
|
Publicado: Mar 30 Jun, 2009 6:16 pm Asunto: |
|
|
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 |
|
 |
escafandra Master

Registrado: 29 Nov 2007Mensajes: 625Ubicación: Madrid - España
|
Publicado: Mie 01 Jul, 2009 12:18 pm Asunto: |
|
|
| 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 |
|
 |
alfredo Master

Registrado: 13 Oct 2003Mensajes: 246Ubicación: Valencia Venezuela
|
Publicado: Jue 09 Jul, 2009 6:50 pm Asunto: |
|
|
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 |
|
 |
|