Помогите пожалуста! Мне надо программно нажать пункт меню в окне програмы ,которую я сам запускаю из своего приложения. И никак не получается .......
Раз ты его создал (процесс), следовательно есть все права доступа к нему. Выдели там память (VirtualAllocEx), создай поток(CreateRemoteThread), запиши туда код (через WriteProcessMemory) и загрузи с его помощью свою дллку (вызови там LoadLibrary), которая сделает все что надо и выгрузится. Если хочешь неодноразово выполнять действия с хендлами окон созданного процесса, создай именованную секцию (или маппинг) и скидывай туда перечень хендлов полученных из другого процесса. То есть, например такой код (): push "lld" push ".yra" push "rbil" push eax lea eax,[esp+4] push eax mov eax,LoadLibrary <--static address, similar in created and existed processes call eax pop eax add esp,10h ret
Qu!tM@n Вот держи пример нажатия пункта меню "справка->о программе" в regedit. Код (Text): .386 .model flat, stdcall option casemap :none include ..\include\windows.inc include ..\include\kernel32.inc include ..\include\user32.inc includelib ..\lib\kernel32.lib includelib ..\lib\user32.lib .data Caption db "Редактор реестра",0 .data? handle dd ? hmenu dd ? .code start: invoke FindWindow, 0, addr Caption ; ищем окно с caption'ом Редактор реестра mov handle, eax invoke SendMessage, handle, WM_SYSCOMMAND, SC_RESTORE, 0 ; если свернут, то восстанавливаем invoke SetForegroundWindow, handle ; выводим на передний план invoke GetMenu, handle ;получаем дескриптор меню окна редактора реестра mov hmenu, eax invoke GetSubMenu, hmenu, 4 ; получаем дескриптор всплывающего меню mov hmenu, eax invoke GetMenuItemID, hmenu, 2 ; получаем идентификатор нужного пункта меню mov hmenu,eax invoke SendMessage, handle,WM_COMMAND,hmenu,0 ;посылаем сообщение invoke ExitProcess, 0 ;выходим end start Я думаю вопросов возникнуть не должно, но если появятся, то спрашивай. Да, если нужно не на асме, то скажи - напишу не на асме.