高分求解:多窗口文本输入问题。

银狐被占用 2009-04-10 11:51:49
现有一窗口,连续打开3次。窗口中有两个文本框。
想在一窗口的第一个文本框中输入1。二窗口的第二个文本框中输入2。三窗口的第一个文本框中输入3。
各窗口有可能最小化,在不激活文本框的前提下,如何做到以上要求?
望高手解答。高分感谢!
帮顶有分。。。
...全文
110 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
银狐被占用 2009-04-12
  • 打赏
  • 举报
回复
谢谢楼上各位。。。
结贴给分。。。
ncqingchuan1976 2009-04-10
  • 打赏
  • 举报
回复
估计应该是先获取另外一个程序的窗体,再通过该窗体获取需要介入的文本框,然后再用sendmessage发送消息。
估计要用这几个函数EnumWindows,GetWindow,sendmessage等几个函数
yo_yokel 2009-04-10
  • 打赏
  • 举报
回复
首先,你说的1,2,3的输入是否是确定的。
解决办法:1,可以同时声明出三个窗体,你只需要控制form的弹出时间。
2,利用一个服务,也就是第三方程序与窗体通讯。
ncqingchuan1976 2009-04-10
  • 打赏
  • 举报
回复
估计应该是先获取另外一个程序的窗体,再通过该窗体获取需要介入的文本,然后再用sendmessage发送消息。
银狐被占用 2009-04-10
  • 打赏
  • 举报
回复
4楼说的是在同一程序下。
我现在要实现的是控制已经运行的其它程序的窗口。

谢谢4楼。。。
lirongxj 2009-04-10
  • 打赏
  • 举报
回复
问题没描述清楚怎么让人帮忙解决?
zzxap 2009-04-10
  • 打赏
  • 举报
回复
在父窗口form public 一个变量
public int a=0
打开第一个窗口,a=a+1

然后窗口的textbox=form1.a

打开第二个 a=a+1
然后窗口的textbox=form1.a

关闭窗口 a=a-1


itliyi 2009-04-10
  • 打赏
  • 举报
回复
outou 2009-04-10
  • 打赏
  • 举报
回复
不知道,UP
银狐被占用 2009-04-10
  • 打赏
  • 举报
回复
说明:窗口是另个一个程序的。
ncqingchuan1976 2009-04-10
  • 打赏
  • 举报
回复
写了点代码,可以通过程序向记事本发送了,更具体的没有时间研究了,你先将就点看嘛

Imports System.Runtime.InteropServices
Imports System.Net
Imports System.IO
Imports System.Text


Public Class Form1
Private Const WM_SETTEXT As Integer = &HC

Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As IntPtr
Declare Auto Function SendMessage Lib "User32.dll" (ByVal hWnd As IntPtr, ByVal Msg As Integer, ByVal wParam As Integer, ByVal lParam As String) As Integer
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As IntPtr, ByVal hWnd2 As IntPtr, ByVal lpsz1 As String, ByVal lpsz2 As String) As IntPtr

Private Declare Function EnumChildWindows Lib "user32" (ByVal hWndParent As IntPtr, ByVal lpEnumFunc As EnumChildProcCallback, ByVal lParam As Integer) As Integer
Private Delegate Function EnumChildProcCallback(ByVal hWnd As IntPtr, ByVal lParam As Integer) As Boolean

Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hWnd As IntPtr, ByVal lpClassName As StringBuilder, ByVal nMaxCount As Integer) As Integer
Private Declare Function GetWindowThreadProcessId Lib "user32" Alias "GetWindowThreadProcessId" (ByVal hwnd As IntPtr, ByVal lpdwProcessId As Long) As Integer


Dim s As String
Private Function EnumChildProc(ByVal hWnd As IntPtr, ByVal lParam As Integer) As Boolean

Dim A As New StringBuilder(255)
GetClassName(hWnd, A, 256)
If UCase(A.ToString) = "EDIT" Then
s = A.ToString
End If
EnumChildProc = True

End Function

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

Dim Parenthwd As New IntPtr()
Parenthwd = FindWindow("Notepad", vbNullString)
Dim d As IntPtr
EnumChildWindows(Parenthwd, New EnumChildProcCallback(AddressOf EnumChildProc), 0)
d = FindWindowEx(Parenthwd, IntPtr.Zero, s, vbNullString)
SendMessage(d, WM_SETTEXT, 0, TextBox1.Text)
End Sub

Private Function FindPID() As Integer
For Each PR As Process In Process.GetProcesses

If PR.ProcessName = "notepad" Then
Return PR.Id
End If
Next
End Function

End Class

wangping_li 2009-04-10
  • 打赏
  • 举报
回复
先获取窗体的句柄,然后用sendmessage向控件发送消息
mykelly6 2009-04-10
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 ncqingchuan1976 的回复:]
估计应该是先获取另外一个程序的窗体,再通过该窗体获取需要介入的文本框,然后再用sendmessage发送消息。
估计要用这几个函数EnumWindows,GetWindow,sendmessage等几个函数
[/Quote]
通过句柄来获取窗体吧,但是要知道实第几个估计比较难了。

别人封装好的程序不是那么好控制的。
十八道胡同 2009-04-10
  • 打赏
  • 举报
回复
自己定义个变量.在来判断是第几次窗口.
boywangliang 2009-04-10
  • 打赏
  • 举报
回复
学习咯

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧