Ver Mensaje Individual
  #1  
Antiguo 28-04-2006
mangi mangi is offline
Registrado
 
Registrado: abr 2006
Posts: 1
Reputación: 0
mangi Va por buen camino
Atacar el ToolBarWindows32

Hola a todos!!
Llevo dias peleándome con los botones de un toolbar y no hay manera, no avanzo. Principalmente quisiera poder pulsar un determinado botón de una toolbar (ToolBarWinsdows32) en una aplicación externa. Para ello debo mandar el siguiente mensaje:

Código Delphi [-]
SendMessage(hTBwnd, TB_PRESSBUTTON, tbb.idCommand,MAKELONG(1,0));

Sin embargo no se exactamente que es idCommand.
He intentado tambien obtener su texto, pero tampoco lo consigo. Únicamente consigo contar el número de botones del toolbar.

Exactamente el codigo que estoy probando es:

Código Delphi [-]
const
  MAX_TEXT = 256;

var
  lpBuf: array[0..MAX_TEXT - 1] of char;
  tbb: TBBUTTONINFO;
  dwPId: DWORD;
  hProc: THANDLE;
  pText, pAddr: pointer;
  dwTmp: DWORD;
  index, id, nCount: integer;
  
begin
  if BOOL(GetWindowThreadProcessId(hTBwnd, @dwPId)) then
    hProc := OpenProcess(PROCESS_VM_OPERATION or PROCESS_VM_READ or PROCESS_VM_WRITE, FALSE, dwPId);
  if hProc <> 0 then
  begin
    pText := VirtualAllocEx(hProc, nil, MAX_TEXT, MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);
    pAddr := VirtualAllocEx(hProc, nil, sizeof(tbb), MEM_RESERVE or MEM_COMMIT, PAGE_READWRITE);

    nCount := SendMessage(hTBwnd, TB_BUTTONCOUNT, 0, 0);
    showmessage(IntTostr(nCount));
    SetForegroundWindow(hTBwnd);

    tbb.idCommand:=id;
    tbb.cbSize := sizeof(tbb);
    tbb.dwMask := TBIF_TEXT;
    tbb.pszText := pText;
    tbb.cchText := sizeof(pText);

    //para coger información del botón, y a partir del idCommand poder utilizar PressButton
    WriteProcessMemory(hProc, pAddr, @tbb, sizeof(tbb), dwTmp);
    SendMessage(hTBwnd, TB_GETBUTTONINFO, 0, LPARAM(@tbb));
    //pongo cero en idcommand porque no se que hay que poner
    ReadProcessMemory(hProc, pText, @lpBuf, MAX_TEXT, dwTmp);
    showmessage(lpBuf);

    SendMessage(hTBwnd, TB_PRESSBUTTON,tbb.idCommand,MAKELONG(1,0));
  end;

  if Assigned(pAddr) then
    VirtualFreeEx(hProc, pAddr, 0, MEM_RELEASE);
  if Assigned(pText) then
    VirtualFreeEx(hProc, pText, 0, MEM_RELEASE);
  CloseHandle(hProc);
end;

Me gustaría que alguien me indicara qué es idCommand y cómo saber qué valor darle.

También cómo pulsar un botón, y qué errores ven en mi código.

Muchas gracias y saludos a todos!

Última edición por dec fecha: 28-04-2006 a las 13:29:53.
Responder Con Cita