C# と VB.NET の質問掲示板

わんくま同盟

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト


(過去ログ 92 を表示中)
■54815 / )  自フォームの前に使っていたプロセスの取得。
□投稿者/ たけたけ (1回)-(2010/11/03(Wed) 13:56:05)

分類:[VB.NET/VB2005 以降] 

お世話になります。
いろいろ調べたのですが、どうしてもわかりません。どなたがアドバイスをお願いします。

クリップボードに登録したデータを、自フォームのボタンをクリックして、直前に使っていたプログラム(notepad等)に書き込もうと思っています。
下記のパターン1、パターン2を試したのですが、プロセスは取れるのですが、希望した順ではなく、どうしてもうまくいきません。
(パターン2はコメントアウトしてあるGetNetWindowもダメでした。notepadのプロセスを直接していして、書き込むとうまくいきました。)

Windows7 64bit VS2010 初心者です。よろしくお願いします。

  Enum GetWindow_Cmd
    GW_HWNDFIRST = 0
    GW_HWNDLAST = 1
    GW_HWNDNEXT = 2
    GW_HWNDPREV = 3
    GW_OWNER = 4
    GW_CHILD = 5
    GW_ENABLEDPOPUP = 6
  End Enum
  Public Const WM_SETTEXT = &HC

  Declare Function GetForegroundWindow Lib "user32" () As IntPtr
  Declare Function GetNextWindow Lib "user32" Alias "GetWindow" (ByVal hWnd As IntPtr, ByVal wFlag As Integer) As IntPtr
  Declare Function GetWindow Lib "user32" (ByVal hWnd As IntPtr, ByVal uCmd As Integer) As IntPtr
  Public Declare Function GetWindowThreadProcessId Lib "user32.dll" _
                            (ByVal hWnd As IntPtr, ByRef lpdwProcessId As Integer) As Integer

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

    'パターン1
    Dim Processes As Process() = Process.GetProcesses
    Dim id As Integer = 0
    Dim ProcessNamePat1(Processes.Length - 1) As String
    For i As Integer = Processes.Length - 1 To 0 Step -1
      If Not Processes(i).MainWindowHandle.Equals(IntPtr.Zero) Then

        ProcessNamePat1(id) = Processes(i).ProcessName
        id += 1

      End If
    Next

    ReDim Preserve ProcessNamePat1(id - 1)

    'パターン2
    Dim StHwnd As IntPtr = GetForegroundWindow
    Dim ProcessID As Integer
    Dim ProcessNamePat2 As String
    Dim MWProcess As Process
    While StHwnd <> 0
      'StHwnd = GetNextWindow(StHwnd, 2)
      StHwnd = GetWindow(StHwnd, GetWindow_Cmd.GW_HWNDNEXT)
      GetWindowThreadProcessId(StHwnd, ProcessID)
      MWProcess = Process.GetProcessById(ProcessID)
      If Not MWProcess.MainWindowHandle.Equals(IntPtr.Zero) Then

        ProcessNamePat2 = MWProcess.ProcessName

      End If
    End While

  End Sub

返信 編集キー/


管理者用

- Child Tree -