Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 31-03-2009
Avatar de roman
roman roman is offline
Moderador
 
Registrado: may 2003
Ubicación: Ciudad de México
Posts: 20.269
Poder: 10
roman Es un diamante en brutoroman Es un diamante en brutoroman Es un diamante en bruto
Código Delphi [-]
h2:=FindWindow('SciCalc',nil);

El nombre de la clase de la ventana de la calculadora es SciCalc, no calc.

// Saludos
Responder Con Cita
  #2  
Antiguo 01-04-2009
Avatar de cHackAll
[cHackAll] cHackAll is offline
Baneado?
 
Registrado: oct 2006
Posts: 2.159
Poder: 20
cHackAll Va por buen camino
Aunque funciona, "buscar" una ventana no significa encontrar la que tu has creado;

Código Delphi [-]
function EnumThreadWndProc(hWnd, lParam: Cardinal): LongBool; stdcall;
begin
 Result := not SetWindowPos(hWnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE or SWP_NOSIZE);
end;
 
var si: TStartupInfo = (cb: SizeOf(si));
 
procedure TForm1.Button1Click(Sender: TObject);
var pi: TProcessInformation;
begin
 CreateProcess(nil, 'calc', nil, nil, False, 0, nil, nil, si, pi);
 WaitForInputIdle(pi.hProcess, INFINITE);
 EnumThreadWindows(pi.dwThreadId, @EnumThreadWndProc, 0);
end;
__________________
RTFM > STFW > Foro > Truco > Post > cHackAll > KeBugCheckEx
Responder Con Cita
  #3  
Antiguo 01-04-2009
Avatar de Neftali [Germán.Estévez]
Neftali [Germán.Estévez] Neftali [Germán.Estévez] is offline
[becario]
 
Registrado: jul 2004
Ubicación: Barcelona - España
Posts: 18.293
Poder: 10
Neftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en brutoNeftali [Germán.Estévez] Es un diamante en bruto
Cita:
Empezado por roman Ver Mensaje
El nombre de la clase de la ventana de la calculadora es SciCalc, no calc.
Ampliando lo que dice Román, como ves la función FindWindow admite dos parámetros; El ClassName y el Título. Son los dos que puedes utilizar para encontrar una ventana.
En al caso de la calculadora, podrías utilizar:

Código Delphi [-]
// POr ClassName
h2:=FindWindow('SciCalc',nil);
// Por título
h2:=FindWindow(nil, 'Calculadora');

La siguiente pregunta lógica debe ser: ¿Y cómo se la clase de una ventana?

Hay muchas utilidades que te pueden dar esta información tipo WinSpy, WinExp o FormClassSpy (esta última como es la más pequeña y simple te la adjunto) y seguro que por internet encuentras muchas más....



TAmbién debes tener en cuenta las llimitaciones de FindWindow, tal como apunta cHackAll.
Si utilizas el título, debes tener en cuenta que el título no es siempre el mismo (a veces cambian durante la ejecución o en distintos idiomas) y en cuanto a la clase, pues tampoco es infalible si tienes 2 o 3 calculadoras ejecutándose.
Archivos Adjuntos
Tipo de Archivo: zip Form Class Spy.zip (15,6 KB, 17 visitas)
__________________
Germán Estévez => Web/Blog
Guía de estilo, Guía alternativa
Utiliza TAG's en tus mensajes.
Contactar con el Clubdelphi

P.D: Más tiempo dedicado a la pregunta=Mejores respuestas.
Responder Con Cita
  #4  
Antiguo 01-04-2009
Avatar de rgstuamigo
rgstuamigo rgstuamigo is offline
Miembro
 
Registrado: jul 2008
Ubicación: Santa Cruz de la Sierra-Bolivia
Posts: 1.646
Poder: 17
rgstuamigo Va por buen camino
Lightbulb

Muchas gracias a los tres,,vaya ya decia yo que talves podria ir por el nombre, y muy buena esa herramienta Neftali.
Mi codigo quedo asi:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  h2:HWND;
begin
WinExec('calc.exe',SW_SHOWNORMAL);//aqui habro la calculadora
// siguiendo el consejo de Neftali
h2:=FindWindow('SciCalc',nil);
if h2<>0 then
    SetWindowPos(h2,
               HWND_TOPMOST,
               Left,
               Top,
               Width,
               Height,
               SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);

end;
Empesado por Neftali>
Cita:
...pues tampoco es infalible si tienes 2 o 3 calculadoras ejecutándose.
Pues para evitar dos o mas ventanas abiertas se me ocurre esto:
Código Delphi [-]
procedure TForm1.Button1Click(Sender: TObject);
var
  h2,h1:HWND;
begin
h1:=FindWindow('SciCalc',nil);//busco si hay una calculadora abierta;
if h1=0 then//si no hay ninguna calculadora abierta procedo normalmente
 begin
  WinExec('calc.exe',SW_SHOWNORMAL);//aqui habro la calculadora
  // siguiendo el consejo de Neftali
  h2:=FindWindow('SciCalc',nil);
  if h2<>0 then
    SetWindowPos(h2,
               HWND_TOPMOST,
               Left,
               Top,
               Width,
               Height,
               SWP_NOACTIVATE or SWP_NOMOVE or SWP_NOSIZE);
  end
 else ShowMessage('Ya tiene una calculadora abierta..Usela no sea flojo'+#13 //si ya existe una calculadora abierta
          +'Y trabaje duro para ganarse el pan de cada dia.');

end;
Desde luego que quisas sea trucha mi solucion pero funciona y me evita que el usuario desde la aplicacion me habra dos o mas calculadoras..
Como dicen los españoles: "si teneis otra solucion posteala."
Saludos...
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7

Última edición por rgstuamigo fecha: 01-04-2009 a las 21:33:06.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Abrir un fichero externo jocey Varios 3 05-08-2008 22:05:53
Configurar aplicacion con archivo externo voldemmor Varios 1 10-01-2008 21:28:38
Form fsStayOnTop de otro Form fsStayOnTop Colgueit OOP 0 24-06-2006 16:57:38
se podra abrir delphi al estilo VB Michel Varios 3 07-07-2003 18:57:09


La franja horaria es GMT +2. Ahora son las 06:15:58.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi