Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

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

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Hint del reloj de Windows

Hola

ufh... cuánto tiempo sin hacer una pregunta por aquí... allá va...

Me gustaría saber cuándo se muestra el hint del reloj de windows, para poder cambiar este texto antes de que se muestre.




Salu2


P.D.: El motivo de querer hacer esto sois muchos de vosotros

Edito: hasta ahora lo único que llevo es obtener el Handle del reloj:

Código Delphi [-]
hReloj:=FindWindowEx(FindWindowEx(FindWindow('Shell_TrayWnd', nil),
                     HWND(0), 'TrayNotifyWnd', nil),
                     HWND(0), 'TrayClockWClass', nil);

Pero no sé hacer nada más

Última edición por ixMike fecha: 03-03-2008 a las 00:20:17.
Responder Con Cita
  #2  
Antiguo 03-03-2008
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
jeje...
Me parece que el asunto tiene mas miga del que parece.

En principio a mi se me ocurrió hacer un SetWindowLong interfiriendo en proceso Wnd de la ventana del reloj, interceptar los mensajes y ya está.
Fácil verdad ?

Pues mira por donde la cosa parece algo mas compleja...

En principio parece inviable lo que proponía a pelo, a no ser que se meta un gancho o Hook a la aplicación que queremos interferir, y para esto tal como he podido ver, se necesita un DLL para enganchar al relojito.

Buscando y buscando he encontrado en Delphi-PRAXIS el código que te pongo aquí (para que no se pierda) que en realidad es el inicio de lo que necesitas. En este ejemplo se controla únicamente si se pulsa el ratón y saca un mensaje. En tu WndProc deberías controlar creo el WM_MOUSEMOVE y actuar en consecuencia..................... que creo que no va a ser poniendo y texto sin mas....


El código:

Código Delphi [-]
library ClockHook;

var
  g_hhook: THandle;
  hwndTaskbar, hwndTray, g_hwndClock: hwnd;
  idThread: dword;

  g_bInitClock: boolean = false;

  g_oldWndProc, g_hInst: THandle;


procedure RefreshRebar(myHwnd: hwnd);
var
  hhwnd: hwnd;
begin
  if myHwnd > 0 then
  begin
    InvalidateRect(myHwnd, nil, TRUE);
    hhwnd := GetWindow(myHwnd, GW_CHILD);
    while hhwnd > 0 do
    begin
      InvalidateRect(hhwnd, nil, TRUE);
      hhwnd := GetWindow(hhwnd, GW_HWNDNEXT);
    end;
  end;
end;

procedure RefreshTaskbar(myHwnd: hwnd);
var
  hwndTaskbar, hwndRebar, hwndTray, hwndStartButton: hwnd;
begin
  hwndTray := GetParent(myHwnd);
  hwndTaskbar := GetParent(hwndTray);
  hwndRebar := FindWindowEx(hwndTaskbar, 0, 'ReBarWindow32', nil);
  hwndStartButton := FindWindowEx(hwndTaskbar, 0, 'Button', nil);

  InvalidateRect(hwndStartButton, nil, TRUE);
  InvalidateRect(hwndTray, nil, TRUE);
  PostMessage(hwndTray, WM_SIZE, SIZE_RESTORED, 0);

  RefreshRebar(hwndRebar);
  PostMessage(hwndRebar, WM_SIZE, SIZE_RESTORED, 0);
  InvalidateRect(hwndTaskbar, nil, TRUE);
  PostMessage(hwndTaskbar, WM_SIZE, SIZE_RESTORED, 0);
end;

function WndProc(hWnd: HWND; uMsg: UINT; wParam: wParam; lParam: LParam): lresult; stdcall;
begin
  case uMsg of
    WM_LBUTTONDOWN: MessageBoxA(0, 'Left mouse button', 'Test', 0);
  end;

  result := CallWindowProc(@g_oldWndProc, hWnd, uMsg, wParam, lParam);
end;

procedure InitClock(myHwnd: hwnd);
begin
  if g_bInitClock then exit;
  g_bInitClock := true;

  g_oldWndProc := GetWindowLong(myHwnd, GWL_WNDPROC);
  SetWindowLong(myHwnd, GWL_WNDPROC, LongInt(@WndProc));
  RefreshTaskbar(myHwnd);
end;

function CallWndProc(ncode: integer; wParam: WPARAM; lParam: LPARAM): LRESULT; stdcall;
var
  pcwps: PCWPSTRUCT;
begin
  pcwps := PCWPSTRUCT(lParam);

  if (ncode = HC_ACTION) then
  begin
    if (not g_bInitClock) and (pcwps.hwnd = g_hwndClock) then
      InitClock(pcwps.hwnd);
  end;

  result := CallNextHookEx(g_hhook, ncode, wParam, lParam);
end;

function StartHook(): boolean; stdcall;
begin
  g_hInst := GetModuleHandle('ClockHook.dll');

  hwndTaskbar := FindWindow('Shell_TrayWnd', nil);
  hwndTray := FindWindowEx(hwndTaskbar, 0, 'TrayNotifyWnd', nil);
  g_hwndClock := FindWindowEx(hwndTray, 0, 'TrayClockWClass', nil);
  idThread := GetWindowThreadProcessId(hwndTaskbar, nil);
 
  g_hhook := SetWindowsHookEx(WH_CALLWNDPROC, @CallWndProc, g_hInst, idThread);
 
  PostMessage(hwndTaskbar, WM_SIZE, SIZE_RESTORED, 0);
 
  result := true;
end;

function StopHook(): boolean; stdcall;
begin
  SetWindowLong(killhwnd, GWL_WNDPROC, g_oldWndProc);
  g_oldWndProc := 0;
  RefreshTaskbar(killhwnd);

  result := UnhookWindowsHookEx(g_hhook);
  g_hhook := 0;
end;

exports
  StartHook,
  StopHook;
         
begin
end.

Llama la atención que la captura del Wndproc de la ventanita en cuestión lo hace en el procedimiento InitClock.

A partir de ahí, creo tal como digo que no va a bastar con cambiar simplemente un texto del hint, sino que además vas a tener que crear una ventanita tipo Thint con el texto a exhibir.
No se me ocurre como enviarle un CM_HINTSHOW de la VCL.

Seguro que muchos de los ASES que tenemos aquí cuando lean esto, encuentran una solución al asunto, pero creo que lo te pongo es el inicio.

Un saludo estruendoso con petardos...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #3  
Antiguo 03-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Gracias, intentaré hacer algo con todo esto, no estoy muy puesto en APIs y Hooks

Cita:
Empezado por ArdiIIa Ver Mensaje
Seguro que muchos de los ASES que tenemos aquí cuando lean esto, encuentran una solución al asunto
Eso estaba esperando yo

Cita:
Empezado por ArdiIIa Ver Mensaje
Un saludo estruendoso con petardos...
Como diría el tío masclet... ¡Peiñ!


Salu2.
Responder Con Cita
  #4  
Antiguo 03-03-2008
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Cita:
Empezado por ixMike Ver Mensaje
Como diría el tío masclet... ¡Peiñ!


Salu2.
El tío masclet, parece un profesional fallero mas que un fallero sin mas....

Como siempre la bonita la calle Sueca, corazón de Ruzafa....
No se si los vecinos están muy de acuerdo con él....
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #5  
Antiguo 04-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Hola.

Faltó el uses

Código Delphi [-]
uses Windows, Messages;

Pero no sé qué más tengo que añadir:

Cita:
Empezado por Compilador
Undeclared identifier: 'killhwnd'

Buscando en Google "Delphi killhwnd" sólo salen 3 resultados, uno de ellos el de DelphiPraxis (si supiera alemán ), otra de las página no tenía nada que ver, y la tercera estaba en japonés (jo, alemán y japonés, dos idiomas que me gustaría aprender).


"killhwnd" aparece en StopHook (para no haceros buscar ) ¿alguien sabe qué hacer?


Salu2.
Responder Con Cita
  #6  
Antiguo 13-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Bueno, en esa página que encontré en japonés, seguí un par de links donde ponía "TClock Light" y resultó ser un programa (que descargué en japones y en español ) que hace maravillas : Modifica la apariencia del reloj, la del botón inicio (hasta le puedes meter un bitmap de fondo, también al menú), menú contextual del reloj, y el hint, ¡lo que yo buscaba! Lo malo es que el código está en C.

Me tocará traducir

Calculo que en un mes ya tengo el programita hecho (o no, según como vea que llevo los exámenes).

Salu2.
Responder Con Cita
  #7  
Antiguo 13-03-2008
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Se parece algo el código de lo que pusimos anteriormente ???
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #8  
Antiguo 13-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Son como poco 30 archivos .c y .h de no menos de 5K cada uno, déjame un tiempo
Responder Con Cita
  #9  
Antiguo 13-03-2008
Avatar de Lepe
[Lepe] Lepe is offline
Miembro Premium
 
Registrado: may 2003
Posts: 7.424
Poder: 29
Lepe Va por buen camino
yo llevo usando el TClockEx más de 4 años, tanto en w2000 como Xp y va de miedo. He visto su página web y dice que pase en unas semanas para ver si está colgado el código fuente. Parece que la última actualización es del año 2000... dudo que cuelgue los fuentes

Saludos
__________________
Si usted entendió mi comentario, contácteme y gustosamente,
se lo volveré a explicar hasta que no lo entienda, Gracias.
Responder Con Cita
  #10  
Antiguo 13-03-2008
Avatar de ixMike
ixMike ixMike is offline
Miembro
 
Registrado: feb 2004
Posts: 1.151
Poder: 22
ixMike Va por buen camino
Mira, el programa TClock Light que tengo me lleva a este enlace:
http://www.gratisweb.com/panchowatkins/tclock.htm

Ahí puedes descargártelo (es de 2004) y todos los idiomas en que está disponible, español inclusive. También lleva el código (en C).

Salu2.
Responder Con Cita
  #11  
Antiguo 13-03-2008
Avatar de ArdiIIa
[ArdiIIa] ArdiIIa is offline
Miembro Premium
 
Registrado: nov 2003
Ubicación: Valencia city
Posts: 1.481
Poder: 22
ArdiIIa Va por buen camino
Tiene que ser super-completo Cinco ejecutables y una dll...
__________________
Un poco de tu generosidad puede salvar la vida a un niño. ASÍ DE SENCILLO
Responder Con Cita
  #12  
Antiguo 13-04-2010
Avatar de masedano
masedano masedano is offline
Registrado
 
Registrado: jun 2007
Posts: 9
Poder: 0
masedano Va por buen camino
Pudiste convertirlo?

ixMike
Estuve leyendo de tu "experimento"
Como te fue? Pudiste convertirlo?

Saludos
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
Hint en DBlookupListBox luchomarfil OOP 1 16-10-2007 14:16:15
Hint en un TStatusPanel ixMike OOP 4 11-05-2007 19:23:37
Hint /*+ Append*/ AngelMarvin Oracle 0 04-04-2006 16:45:26
Hint (Urgente !!!) jymy788 Varios 2 16-09-2004 16:18:27
Propiedad Hint Javier_A OOP 1 28-11-2003 14:55:53


La franja horaria es GMT +2. Ahora son las 17:57:16.


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