Страница: 1 |
Страница: 1 |
Вопрос: Работа с меню в чужом процессе
Добавлено: 21.01.06 12:31
Автор вопроса: Alex
И так есть программа, не важно какая, она запущена, у нее есть меню выпадающее, мне очень хочется программно нажать на пункт меню "Выход" Как это сделать?
Ответы
Всего ответов: 7
Номер ответа: 1
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #1
Добавлено: 21.01.06 13:26
Гы гы.
Какой, всё-таки, упорный молодой человек...
Надо послать окну WM_COMMAND с нужным ID, я же тебе говорил уже...
Номер ответа: 2
Автор ответа:
Alex
Вопросов: 1
Ответов: 2
Профиль | | #2
Добавлено: 21.01.06 13:46
Ну я это уже понял, а как это сделать то?
У меня нифига не получается
Я уже весь инет излазил, а нифига найти не могу, ну мож правдо я хреново смотрел.
Ну напиши ты пример в 2 строчки чтоб я понял как это делать!!!!
Номер ответа: 3
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #3
Добавлено: 21.01.06 13:59
Блин, я же тебе давал ссылку на мануал про общую теорию сообщений и про SendMessage.
Там бы ты и прочитал, что
SendMessage hwnd, WM_COMMAND, ID, byval 0&
Ещё там бы ты прочитал про
SendMessage hwnd, WM_SYSCOMMAND, SC_CLOSE, byval 0&
Но тебе всё пофиг, и читать ты ничего не хочешь.
Номер ответа: 4
Автор ответа:
Alex
Вопросов: 1
Ответов: 2
Профиль | | #4
Добавлено: 21.01.06 14:11
SendMessage hwnd, WM_COMMAND, ID, byval 0&
А чей hwnd ,и ID надо указывать?
и что byval 0& это такое?
у меня пока вот что есть:
'получение позиции команды меню
Public Function GetMenuPos(ByVal hMenu As Long, ByVal Caption As String) As Long
Dim i As Long
Dim max As Long
Dim lres As Long
Dim Result As Long
Dim sData As String
Dim sdLen As Long
Result = -1
max = GetMenuItemCount(hMenu)
If max = 0 Then GetMenuPos = -1: Exit Function
For i = 0 To max - 1
sData = String$(256, 32)
sdLen = Len(sData) + 1
lres = GetMenuString(hMenu, i, sData, sdLen, MF_BYPOSITION)
If LCase$(Left$(sData, lres)) = LCase$(Caption) Then Result = i: Exit For
Next i
GetMenuPos = Result
End Function
'Получение манипулятора меню
Public Function SearchMenu(ByVal hMenu As Long, ByVal Caption As String) As Long
Dim i As Long
Dim lres As Long
Dim max As Long
Dim Result As Long
lres = GetMenuPos(hMenu, Caption)
If lres <> -1 Then SearchMenu = hMenu: Exit Function
Debug.Print max
max = GetMenuItemCount(hMenu)
For i = 0 To max - 1
lres = GetMenuItemID(hMenu, i)
If lres = -1 Then Result = SearchMenu(GetSubMenu(hMenu, i), Caption)
Next i
SearchMenu = Result
End Function
Номер ответа: 5
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #5
Добавлено: 21.01.06 14:17
2GSerg:
дайка еще раз ссылочку - он не хочет, а я почитаю!
Номер ответа: 6
Автор ответа:
GSerg
Вопросов: 0
Ответов: 1876
Профиль | | #6
Добавлено: 21.01.06 15:23
Теория.
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/aboutmessagesandmessagequeues.asp
Практика.
http://msdn.microsoft.com/library/en-us/winui/winui/windowsuserinterface/windowing/messagesandmessagequeues/usingmessagesandmessagequeues.asp
Номер ответа: 7
Автор ответа:
[root]
Вопросов: 45
Ответов: 1212
Web-сайт:
Профиль | | #7
Добавлено: 21.01.06 15:27
спасибо. - гуд