PDA

Ver la Versión Completa : Atacar el ToolBarWindows32


mangi
28-04-2006, 13:07:58
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:


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:


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!