他のプロセスのメインメニューを扱うには
- 題名: 他のプロセスのメインメニューを扱うには
- 著者: ケン
- 日時: 2005/05/25 17:11:28
- ID: 10940
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[1]: 他のプロセスのメインメニューを扱うには
- 著者: 渋木宏明(ひどり)
- URL: http://hidori.jp/
- 日時: 2005/05/25 21:29:03
- ID: 10941
- この記事の返信元:
- この記事への返信:
- ツリーを表示
- 題名: Re[2]: 他のプロセスのメインメニューを扱うには
- 著者: ケン
- 日時: 2005/05/27 10:52:16
- ID: 10975
- この記事の返信元:
- この記事への返信:
- ツリーを表示
分類:[.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