vb 怎么获取一个已经打开的dos窗口里面的信息

「已注销」 2018-09-03 03:50:31

获取窗口里面的信息(红线部分)
...全文
381 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2018-09-05
  • 打赏
  • 举报
回复
引用 4 楼 Chen8013 的回复:
[quote=引用 3 楼 gufeng07 的回复:]
我是想获取已经打开的窗口里面的信息 因为这个窗口是连续执行好多命令才出现的,所以楼上这种单一命令的不太管用啊 帮帮忙啊 大神

1. 那个“函数”,可以多次调用啊,要“连续执行好多命令”也是一样的。
  你可以在没执行到特定命令时,不管它的结果就行了。

2. 你可以改用“命名管道”方式来实现,这样可以达到“在同一个DOS窗口中执行多次命令”的效果。[/quote]

我找到一个命名管道的demo 但是怎么改动能进入到图片中的界面呢(cmd界面下连续输两条命令 1,N:\ANDA\setenv.cmd 2,isd rtextrd 就会进入到图片中界面)
https://pan.baidu.com/s/1he6t9NjPL9kBrqB6ZVlVFQ

链接是demo 大神帮帮忙 分没有用 红包也可以
舉杯邀明月 2018-09-04
  • 打赏
  • 举报
回复

分有什么P用……


我在4楼说的,第2种方式,就可以“交互操作”,自己查一下资料,看如何实现吧。
反正我也只中用过匿名管道的。
「已注销」 2018-09-04
  • 打赏
  • 举报
回复
引用 6 楼 gufeng07 的回复:
[quote=引用 4 楼 Chen8013 的回复:]
[quote=引用 3 楼 gufeng07 的回复:]
我是想获取已经打开的窗口里面的信息 因为这个窗口是连续执行好多命令才出现的,所以楼上这种单一命令的不太管用啊 帮帮忙啊 大神

1. 那个“函数”,可以多次调用啊,要“连续执行好多命令”也是一样的。
  你可以在没执行到特定命令时,不管它的结果就行了。

2. 你可以改用“命名管道”方式来实现,这样可以达到“在同一个DOS窗口中执行多次命令”的效果。[/quote]


我这个窗口就像对数据库操作 先进入数据库然后输入后面的命令才管用(我只是举一个例子) 大神可以帮忙写一个吗 [/quote]
重复调用不行 亲
「已注销」 2018-09-04
  • 打赏
  • 举报
回复
引用 4 楼 Chen8013 的回复:
[quote=引用 3 楼 gufeng07 的回复:]
我是想获取已经打开的窗口里面的信息 因为这个窗口是连续执行好多命令才出现的,所以楼上这种单一命令的不太管用啊 帮帮忙啊 大神

1. 那个“函数”,可以多次调用啊,要“连续执行好多命令”也是一样的。
  你可以在没执行到特定命令时,不管它的结果就行了。

2. 你可以改用“命名管道”方式来实现,这样可以达到“在同一个DOS窗口中执行多次命令”的效果。[/quote]


我这个窗口就像对数据库操作 先进入数据库然后输入后面的命令才管用(我只是举一个例子)大神可以帮忙写一个吗
「已注销」 2018-09-04
  • 打赏
  • 举报
回复
我不会vb 大神帮我写一个可以吗 可以加分
舉杯邀明月 2018-09-04
  • 打赏
  • 举报
回复
引用 3 楼 gufeng07 的回复:
我是想获取已经打开的窗口里面的信息 因为这个窗口是连续执行好多命令才出现的,所以楼上这种单一命令的不太管用啊 帮帮忙啊 大神

1. 那个“函数”,可以多次调用啊,要“连续执行好多命令”也是一样的。
  你可以在没执行到特定命令时,不管它的结果就行了。

2. 你可以改用“命名管道”方式来实现,这样可以达到“在同一个DOS窗口中执行多次命令”的效果。
「已注销」 2018-09-04
  • 打赏
  • 举报
回复
我是想获取已经打开的窗口里面的信息 因为这个窗口是连续执行好多命令才出现的,所以楼上这种单一命令的不太管用啊 帮帮忙啊 大神
「已注销」 2018-09-04
  • 打赏
  • 举报
回复
Option Explicit
Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
Const WM_KEYDOWN = &H100
Const WM_KEYUP = &H101
Const WM_CHAR = &H102
Dim i&, HwndVal&, TmpStr$
Private Sub Form_Load()
Shell "cmd /k N:\ANDA\setenv.cmd && isd rtextrd ", vbNormalFocus
End Sub

Private Sub Command1_Click()
HwndVal = FindWindow("ConsoleWindowClass", vbNullString)
TmpStr = "pv5503_kad"
For i = 1 To Len(TmpStr)
PostMessage HwndVal, WM_CHAR, Asc(Mid(TmpStr, i, 1)), 0
Next
PostMessage HwndVal, WM_CHAR, 13, 0
Sleep 10
PostMessage HwndVal, WM_CHAR, 13, 0
Sleep 50
TmpStr = "M_PIC5503_PV"
For i = 1 To Len(TmpStr)
PostMessage HwndVal, WM_CHAR, Asc(Mid(TmpStr, i, 1)), 0
Next
PostMessage HwndVal, WM_CHAR, 13, 0
Sleep 100
PostMessage HwndVal, WM_CHAR, 13, 0
Sleep 150
TmpStr = "sel chaf"
For i = 1 To Len(TmpStr)
PostMessage HwndVal, WM_CHAR, Asc(Mid(TmpStr, i, 1)), 0
Next
PostMessage HwndVal, WM_CHAR, 13, 0
PostMessage HwndVal, WM_CHAR, 13, 0
End Sub

这是我写的 大神API函数GetText能获得DOS窗口里的字符串吗 急啊 大神 救救我吧
「已注销」 2018-09-04
  • 打赏
  • 举报
回复
引用 8 楼 Chen8013 的回复:

分有什么P用……


我在4楼说的,第2种方式,就可以“交互操作”,自己查一下资料,看如何实现吧。
反正我也只中用过匿名管道的。



API函数GetText能获得DOS窗口里的字符串吗 怎么用 帮帮忙大神 上面是我写的 运行完之后就可以图片中的窗口
脆皮大雪糕 2018-09-03
  • 打赏
  • 举报
回复
一般要用数据管道来做,给个例子。
新建窗体、一个command 一个text
粘贴以下代码。


Option Explicit
Private Declare Function CreatePipe Lib "kernel32" (phReadPipe As Long, phWritePipe As Long, lpPipeAttributes As SECURITY_ATTRIBUTES, ByVal nSize As Long) As Long
Private Declare Function ReadFile Lib "kernel32" (ByVal hFile As Long, ByVal lpBuffer As String, ByVal nNumberOfBytesToRead As Long, lpNumberOfBytesRead As Long, ByVal lpOverlapped As Any) As Long

Private Type SECURITY_ATTRIBUTES
nLength As Long
lpSecurityDescriptor As Long
bInheritHandle As Long
End Type

Private Type STARTUPINFO
cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long
End Type

Private Type PROCESS_INFORMATION
hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long
End Type

Private Declare Function CreateProcessAsUser Lib "advapi32.dll" Alias "CreateProcessAsUserA" (ByVal hToken As Long, ByVal lpApplicationName As String, ByVal lpCommandLine As String, ByVal lpProcessAttributes As SECURITY_ATTRIBUTES, ByVal lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As String, ByVal lpCurrentDirectory As String, ByVal lpStartupInfo As STARTUPINFO, ByVal lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function CreateProcessA Lib "kernel32" (ByVal lpApplicationName As Long, ByVal lpCommandLine As String, lpProcessAttributes As SECURITY_ATTRIBUTES, lpThreadAttributes As SECURITY_ATTRIBUTES, ByVal bInheritHandles As Long, ByVal dwCreationFlags As Long, ByVal lpEnvironment As Long, ByVal lpCurrentDirectory As Long, lpStartupInfo As STARTUPINFO, lpProcessInformation As PROCESS_INFORMATION) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

Private Const NORMAL_PRIORITY_CLASS = &H20
Private Const STARTF_USESTDHANDLES = &H100
Private Const STARTF_USESHOWWINDOW = &H1

Private Function ExecuteCommandLineOutput(CommandLine As String, Optional BufferSize As Long = 256, Optional TimeOut As Long) As String

Dim Proc As PROCESS_INFORMATION
Dim Start As STARTUPINFO
Dim SA As SECURITY_ATTRIBUTES
Dim hReadPipe As Long
Dim hWritePipe As Long
Dim lBytesRead As Long
Dim sBuffer As String

If VBA.Len(CommandLine) > 0 Then
SA.nLength = Len(SA)

'sa.nLength = vba.Len(sa)
SA.bInheritHandle = 1&
SA.lpSecurityDescriptor = 0&
If CreatePipe(hReadPipe, hWritePipe, SA, 0) > 0 Then
Start.cb = Len(Start)
Start.dwFlags = STARTF_USESTDHANDLES Or STARTF_USESHOWWINDOW
Start.hStdOutput = hWritePipe
Start.hStdError = hWritePipe
If CreateProcessA(0&, CommandLine, SA, SA, 1&, NORMAL_PRIORITY_CLASS, 0&, 0&, Start, Proc) = 1 Then
CloseHandle hWritePipe
sBuffer = VBA.String(BufferSize, VBA.Chr(0))
If TimeOut > 0 Then
Dim BeginTime As Date
BeginTime = VBA.Now
End If

Do Until ReadFile(hReadPipe, sBuffer, BufferSize, lBytesRead, 0&) = 0
DoEvents
If TimeOut < 0 Then
If DateDiff("s", BeginTime, VBA.Now) > TimeOut Then
ExecuteCommandLineOutput = "Timeout"
Exit Do
End If
End If
ExecuteCommandLineOutput = ExecuteCommandLineOutput & VBA.Trim(Replace(Left(sBuffer, lBytesRead), VBA.Chr(0), ""))
Text1.Text = ExecuteCommandLineOutput
Loop

CloseHandle Proc.hProcess
CloseHandle Proc.hThread
CloseHandle hReadPipe
Else
ExecuteCommandLineOutput = "File or command not found"
Text1.Text = ExecuteCommandLineOutput
End If
Else
ExecuteCommandLineOutput = "CreatePipe failed.Error:" & Err.LastDllError & "."
Text1.Text = ExecuteCommandLineOutput
End If
End If
End Function







Private Sub Command1_Click()
ExecuteCommandLineOutput "ipconfig"
End Sub




「已注销」 2018-09-03
  • 打赏
  • 举报
回复
FindWindow获取窗口句柄
PostMessage往里面传值
但是现在我不能读取里面的信息 大神们 帮帮忙

7,762

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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