DOBON.NET DOBON.NETプログラミング掲示板過去ログ

他のプロセスのメインメニューを扱うには

環境/言語:[xp]
分類:[.NET]

他のプロセスのメニューを実行するには、どのようなAPIを使えばよいのでしょうか?
以下のプログラムでは、メニューの項目までは表示できるのですが、それをクリックして実行することができません。
できれば、Sendkeyは使いたくありません。なぜなら、プロセスのメニューによってはキーがない場合もあるためです。


メニュー項目のIDを取得するAPIを使って、何とかできないもでしょうか?

----フォーム内-----

Private Declare Function GetMenu Lib "USER32" (ByVal hWnd As IntPtr) As IntPtr
Private Declare Function GetSubMenu Lib "USER32" (ByVal hMenu As IntPtr, ByVal nPos As Integer) As IntPtr
Private Declare Function GetMenuString Lib "user32" Alias "GetMenuStringA" (ByVal hMenu As IntPtr, ByVal wIDItem As Integer, ByVal lpString As String, ByVal nMaxCount As Integer, ByVal wFlag As Integer) As Integer
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal _ lpClassName As String, ByVal lpWindowName As String) As IntPtr




Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click


Dim r As IntPtr
Dim rc As IntPtr
Dim rc1 As IntPtr
Dim moji As String = Space(50)


Dim abc As New ProcessStartInfo("notepad.exe")
abc.WindowStyle = ProcessWindowStyle.Normal
Dim a As System.Diagnostics.Process =systemm.Diagnostics.Process.Start(abc)

a.WaitForInputIdle()


r = FindWindow(vbNullString, "無題 - メモ帳")



rc = GetMenu(r)
rc1 = GetSubMenu(rc, 1)

GetMenuString(rc1, 13, moji, moji.Length, &H400)

MsgBox(moji)

a.CloseMainWindow()

End Sub
> メニュー項目のIDを取得するAPIを使って、何とかできないもでしょうか?

目的のメニュー項目のコマンド ID を取得して

PostMessage (r, WM_COMMAND, commandId, 0);

すればOKです。

PostMessage() の宣言は

http://www.pinvoke.net/

辺りでゲットしてください。
その通りでした。
ありがとうございました。
解決済み!

DOBON.NET | プログラミング道 | プログラミング掲示板