|
分類:[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
|