Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   C++ Builder (https://www.clubdelphi.com/foros/forumdisplay.php?f=13)
-   -   Como hago >> Win+D (https://www.clubdelphi.com/foros/showthread.php?t=62410)

Negriz 21-12-2008 17:37:35

Como hago >> Win+D
 
Hola como estan, esta nueva pregunta es para saber si hay alguna manera de minimizar todas las ventanas, osea simular este cmportamiento; o tambien enviarle "Win+D" al windows... he pensado en SendMessage o PostMessage pero es que no tengo mucha experiencia usandolos y por eso no se como hacrelo.

Alguna sugerencia?

Gacias. :)

cHackAll 21-12-2008 17:47:48

Código Delphi [-]
uses ComObj;

procedure TForm1.Button1Click(Sender: TObject);
var Shell: OleVariant;
begin
 Shell := CreateOleObject('Shell.Application');
 Shell.MinimizeAll;
// Shell.UndoMinimizeAll;
end;

Código:

#include <windows.h>
#include <shlobj.h>
 
// ...
 
 CoInitialize(NULL);
 IShellDispatch* Shell = NULL;
 CoCreateInstance(CLSID_Shell, NULL, CLSCTX_SERVER, IID_IDispatch, (void**)&Shell);
 Shell->MinimizeAll();
// Shell->UndoMinimizeAll();

// Shell->Release();
// CoUninitialize();

ó

Código:

HWND hWnd = FindWindow("Shell_TrayWnd", NULL);
 SendMessage(hWnd, WM_COMMAND, 419, 0);
// SendMessage(hWnd, WM_COMMAND, 416, 0);

Saludos

Negriz 21-12-2008 18:32:51

:) :)
 
Hey muchas gracias cHackAll

Cita:

Empezado por cHackAll (Mensaje 331738)

Código:

#include <windows.h>
#include <shlobj.h>
 
// ...
 
 CoInitialize(NULL);
 IShellDispatch* Shell = NULL;
 CoCreateInstance(CLSID_Shell, NULL, CLSCTX_SERVER, IID_IDispatch, (void**)&Shell);
 Shell->MinimizeAll();
// Shell->UndoMinimizeAll();

// Shell->Release();
// CoUninitialize();


Bueno este code me dice Multiple declracion de FOLDERSETTINGS en la libreria shlobj.h :(... quite el code y solo la declare y pues salio el mismo error.


Cita:

Empezado por cHackAll (Mensaje 331738)
Código:

HWND hWnd = FindWindow("Shell_TrayWnd", NULL);
 SendMessage(hWnd, WM_COMMAND, 419, 0);
// SendMessage(hWnd, WM_COMMAND, 416, 0);


y este code funcionó perfecto.
A ver si entendi, el comando Win+D se le envia a la la barra de tareas (donde 419 y 416 son MinimizeAll y UndoMinimizeAll). Bien pero pues, supongamos que necesito algun dia enviarle otro comando como win+R o cualquier otro, como sabira yo que entero va alli... ¿hay algun listado o algo asi?

jejeje muchas gracias cHackAll ya logre hacer lo que queria. Y la pregunta anterior es solo curiosidad :)

y pues para el primer codigo voy a necesitar un poco mas de tiempo para comprender como es que funciona...

Negriz 21-12-2008 18:51:58

Hola... encontre la solucion al pirmer problema de la multiple declarracion de FOLDERSETTINGS. Fuente

bueno la idea es que hay ir a Proyect->Options->Directories/Conditionals y en la parte donde dice conditional defines agregar esta linea NO_WIN32_LEAN_AND_MEAN separandola de las demas con un ( ; )

Y funciona perfecto. :D

escafandra 21-12-2008 19:38:09

Bueno, aunque el tema está resuelto y veo que llego un poco tarde, voy a aportar otra solución sencilla simulando pulsaciones del teclado. Esta forma puede ser una solución general para otras preguntas de este tipo.

Código:

 
keybd_event(0x5B, 0, 0, 0);    // Pulsa VK_LWIN
keybd_event(0x44, 0, 0, 0);    // Pulsa VK_D
keybd_event(0x5B, 0, KEYEVENTF_KEYUP, 0);    //Suelta VK_LWIN

Saludos.:cool:

Negriz 22-12-2008 20:52:18

:D Gracias escafandra aunque logre hacer lo que queria no creo que este tema se cierre del todo :) digamos que todavia tengo algunas preguntas:

Con respecto a la solucion anterior:
supongamos que necesito algun dia enviarle otro comando como win+R o cualquier otro, como sabira yo que entero va alli... ¿hay algun listado o algo asi?

Con respecto a la nueva solucion:
La pregunta sigue siendo basicamente la misma, (0x5B) estos datos son hexagesimales?
y hay algun listado para saber duales son las teclas? o acaso hay una menra simplemente de saber que tecla es cual en tiempo real? tiene que ver con ASCII?

stube buscando y ahun sigo probado :D Gracias por el code.

escafandra 22-12-2008 23:19:28

Cita:

Empezado por Negriz (Mensaje 331893)
La pregunta sigue siendo basicamente la misma, (0x5B) estos datos son hexagesimales?

Si, es hexadecimal, pero en decimal tambien funciona, es lo mismo.

Cita:

Empezado por Negriz (Mensaje 331893)
hay algun listado para saber duales son las teclas?

Busca en la ayuda de Builder las Virtual Keys. Palabra clave: Virtual-Key Codes.

Saludos.;)

Negriz 23-12-2008 18:19:57

:D muchas gracias :D


La franja horaria es GMT +2. Ahora son las 01:51:15.

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