· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.WIN32 —› панель инструментов

Посл.отвђт Сообщенiе


Дата: Июл 1, 2004 13:22:40

Как определить idcommand кнопки в другом приложение?
делал :
ttb TBBUTTON <>
........
.......
invoke SendMessage,хэндл toolbara,TB_GETBUTTON,3,addr ttb
.......
......
mov eax,ttb.idCommand
но eax = 0 что делать?


Дата: Июл 1, 2004 14:06:08
Правка

ksinon
Было такое обсуждение. Кажется, можно работать с этим только в пределах одного адресного пространства процесса. Возможно, я ошибаюсь…


Дата: Июл 1, 2004 14:26:11 · Поправил: bogrus

Я тоже такое припоминаю , ещё сам пробывал таким макаром достать из тулбара в трее .

Может пригодиться всё или этот кусочек :
// hToolbar      - handle to toolbar control
// PID           - process containing the toolbar
// nBtnIndex     - zero-based index of simulated button

void SimulateToolbarBtnPress(HWND hToolbar, DWORD PID, int nBtnIndex)
{
	TBBUTTON bt;
	HANDLE	hProc;
	void*	pRemoteBuf;

		// get control ID of our button	
                //
	hProc		= OpenProcess( PROCESS_ALL_ACCESS, NULL, PID );
	pRemoteBuf	= VirtualAllocEx( hProc, NULL, sizeof(TBBUTTON), MEM_COMMIT, PAGE_READWRITE );
	SendMessage( hToolbar,TB_GETBUTTON,nBtnIndex,(LPARAM)pRemoteBuf );
	ReadProcessMemory( hProc,pRemoteBuf,(void*)&bt,sizeof(TBBUTTON),NULL );
	VirtualFreeEx( hProc,pRemoteBuf,sizeof(TBBUTTON),MEM_RELEASE );
	CloseHandle(hProc);

 	// simulate button press
	//
	::PostMessage( ::GetParent(hToolbar), WM_COMMAND, (WPARAM)bt.idCommand, (LPARAM)hToolbar);
}


Дата: Июл 1, 2004 14:28:26

действительно сделал
ttb TBBUTTON <>
........
.......
invoke SendMessage,хэндл toolbara,TB_GETBUTTON,3,addr ttb
.......
......
mov eax,ttb.idCommand
в томже процессе
и idcommand определи
Тогда какие есть варианты чтобы можно было
разблокировать кнопку?
invoke SendMessage,htoolbar,TB_ENABLEBUTTON,ttb.idcommand,1 ; разблокировать кнопку
invoke SendMessage,htoolbar,TB_INDETERMINATE ,ttb.idcommand,0 ;показать


Дата: Июл 1, 2004 14:29:42

забыл!

В другом процессе!


Дата: Июл 1, 2004 14:41:56

ksinon - а какая разница - в том процессе, или в другом?
сначала TB_GETBUTTON
а потом TB_SETBUTTONINFO


Дата: Июл 1, 2004 14:57:29

в masm не нашел что то TB_SETBUTTONINFO?
Пробовал получить id кнопки другово процесса - не получалось.
Сделал в томже процессе что и toolbar все работает!


Дата: Июл 1, 2004 15:21:21

ksinon

Два месяца назад ты спрашивал тоже самое в этом топике , зачем новый создавать .


Дата: Июл 1, 2004 16:01:53

bogrus: ну дык ему не ответили -)
кстати, я не совсем понял - получаются TB_GETBUTTON не маршалится?
попробуй аллоцировать структуру через GlobalAlloc

а насчет TB_SETBUTTONINFO поищи в %PROGRAMFILES%\Microsoft SDK\Include

кстати. у меня по-моему тоже были проблемы с тулбаром - там как-то хитро оно все работает..

Вот. посмотрел - там просто копируются данные в память, на которую указывает lParam. И никакого маршаллинга там нету.
Соответсвенно - VirtualAllocEx (Read|Write)ProcessMemory
так будет работать. По-другому - не будет.


Дата: Июл 1, 2004 21:30:10 · Поправил: bogrus

„ну дык ему не ответили -) “

Дык и мне тоже :) И щаз он снова пропадёт на 2 месяца :)
Короче для NT хватит сишного примера , а для 9х видимо юзать CreateFileMapping,MapViewOfFile,CopyMemory .
Если idcommand у проги не меняеться , то наверное лучше подсмотреть его в отладчике


Дата: Июл 2, 2004 08:08:13

будем пробовать!


Дата: Июл 6, 2004 10:07:53

все ок !
всем пасибо!


Дата: Июл 7, 2004 13:08:34 · Поправил: ksinon

прога работает !
определяет idCommand кнопок toolbara,но перестает работать если пытаешься получить инфу о кнопках в OUTLOOKE
(idCommand==0).
В чем причина?
invoke GetWindowThreadProcessId,htoolbar, addr ProcessId
invoke OpenProcess,PROCESS_ALL_ACCESS,NULL, ProcessId
mov hProcess,eax
invoke VirtualAllocEx,hProcess,NULL,sizeof TBBUTTON ,MEM_COMMIT,PAGE_READWRITE
mov buff,eax
mov ebx,0
loop_all:
add ebx,1
invoke SendMessage,htoolbar,TB_GETBUTTON,ebx, buff
invoke ReadProcessMemory,hProcess,buff, ADDR ttb,sizeof TBBUTTON ,NULL

invoke SendMessage,htoolbar,TB_ENABLEBUTTON, ttb.idCommand,1
invoke SendMessage,htoolbar,TB_INDETERMINATE , ttb.idCommand,0
invoke dwtoa , ttb.idCommand ,ADDR MsgBoxText12
invoke MessageBox, NULL,addr MsgBoxText12, addr MsgBoxText12, MB_OK
.if ebx==5
invoke VirtualFreeEx,hProcess,buff,sizeof TBBUTTON,MEM_RELEASE
invoke CloseHandle,hProcess
jmp EXIT
.ELSE
JMP loop_all
.endif


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.046