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);
WriteProcessMemory(hProc, pAddr, @tbb, sizeof(tbb), dwTmp);
SendMessage(hTBwnd, TB_GETBUTTONINFO, 0, LPARAM(@tbb));
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!