Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   API de Windows (https://www.clubdelphi.com/foros/forumdisplay.php?f=7)
-   -   Atacar el ToolBarWindows32 (https://www.clubdelphi.com/foros/showthread.php?t=31120)

mangi 28-04-2006 13:07:58

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!


La franja horaria es GMT +2. Ahora son las 04:06:48.

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