Ver Mensaje Individual
  #8  
Antiguo 26-05-2010
LoPiTaL LoPiTaL is offline
Miembro
 
Registrado: abr 2009
Posts: 168
Reputación: 18
LoPiTaL Va por buen camino
Cita:
Empezado por oabel5 Ver Mensaje
estuve haciendo experimentos y no logro meter la ruta en la ventana "Abrir". Esto es lo que hice:
char s[200]="O:\\NU\\Projects\\FuA\\CC_EL\\Centerdaten\\ECU_Test\\Projects\\DQ200_G2\\Tools\\EcuFlashTool\\Flas hMonitorEOL\\DQ200G2_Flash_Monitor_EOL.ini";

wnd = FindWindow (NULL,"ECU Flash Tool");
BringWindowToTop(wnd);
keybd_event(VK_CONTROL, 0, 0, 0);
keybd_event(0x4F, 0, 0, 0);
keybd_event(0x4F, 0, KEYEVENTF_KEYUP, 0);
keybd_event(VK_CONTROL, 0, KEYEVENTF_KEYUP, 0);

wnd = FindWindow (NULL,"Open File");
BringWindowToTop(wnd);

for( i= 0;i<= strlen(s);i++)
{
keybd_event((int)s[i], 0, 0, 0);
keybd_event((int)s[i], 0, KEYEVENTF_KEYUP, 0);
}

el problema es que los signos ":" y "\" no los quiere escribir. Tienes alguna idea de cómo añado estos signos?
Saludos.
Abel.
Es bastante sencillo si utilizas la función VkKeyScan: esta devuelve qué valor tienes que pasarle al keybd_event para escribir el caracter que quieras, así como el estado del shift, ctrl, alt, etc... Te pongo un ejemplo:

Código Delphi [-]
var
  auxWord: Word;
  auxChar: byte;
begin
  laStr:='C:\HOLA\HOLA2';

  //Para todos los chars
  for I := 1 to length(laStr) do begin
      auxWord:=VkKeyScan(laStr[i]);  //Escaneamos el char en concreto
     
     //Según la ayuda de la función, en el byte menos significativo tenemos
     //el valor del char a pasarle a keybd_event, y en el byte más significativo
    //tenemos el estado del shift, ctrl y alt. NO distingue entre alt, ctrl, shift 
    //izdos y drchos, pero dado que no puede ser el alt izdo (si no, no escribiría
    //nada, pongo el derecho (de ahí que sea VK_RMENU y no VK_MENU)).

      auxChar:=(auxWord and $FF);

      if (auxWord and $100)<>0 then
        keybd_event(VK_SHIFT, 0, 0, 0)
      else if (auxWord and $400)<>0 then
        keybd_event(VK_RMENU, 0, 0, 0);

      keybd_event(auxChar, 0, 0, 0);
      keybd_event(auxChar, 0, KEYEVENTF_KEYUP, 0);

      if (auxWord and $100)<>0 then
        keybd_event(VK_SHIFT, 0, KEYEVENTF_KEYUP, 0)
      else if (auxWord and $400)<>0 then
        keybd_event(VK_RMENU, 0, KEYEVENTF_KEYUP, 0);
  end;

  //Finalmente pulsamos enter:
  keybd_event(VK_RETURN, 0, 0, 0);
  keybd_event(VK_RETURN, 0, KEYEVENTF_KEYUP, 0);

A mí me ha funcionado a la perfección.

Un saludo,
LoPiTaL
Responder Con Cita