【已解决】小白问题,关于解决按钮后激活原窗口的方法
本帖最后由 宇硕 于 2021-1-10 10:16 编辑各位大神,请教一个问题:拟制作一个简单的快捷键的按钮窗口,即点击按钮1,就在所选的文档内输入“abc”,用的send,但是在激活按钮窗口的时候,所选文档的激活状态就没有了,请问有什么方法能够返回上一次点击的文档窗口的激活状态呢,文档窗口的title不定,不胜感激 说到send函数,个人的一点经验。几种写入方法,写在一块了,有注释,运行一次就明白了。
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <WinAPI.au3>
#include <array.au3>
$Form1 = GUICreate("Form1", 231, 128)
$Button1 = GUICtrlCreateButton("发送", 40, 24, 153, 73)
GUISetState(@SW_SHOW)
WinSetOnTop($Form1, '', 1)
If Not WinActivate('') Then
Run('notepad.exe')
WinWait('')
WinActivate('')
EndIf
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Button1
_Send('ABC中华人民共和国' & Random())
EndSwitch
WEnd
Func _Send($sText)
Local $aAryWin = WinList('')
;~ _ArrayDisplay($aAryWin)
For $i = 1 To $aAryWin
If BitAND(_WinAPI_GetWindowLong($aAryWin[$i], $GWL_EXSTYLE), $WS_EX_TOPMOST) Then ContinueLoop;引用前辈们的代码,其实我也看不懂
If Not BitAND(WinGetState($aAryWin[$i]), 2) Then ContinueLoop;引用前辈们的代码,其实我也看不懂
WinActivate($aAryWin[$i]);激活窗口
Send("原字符串,与输入法相关:" & @CR & $sText &"{Enter}"&@CRLF);先发送原来的字符
$vSendStr = _SendEx($sText);转换字符串,一般有send都会涉及到输入法状态
Send("修正字符串,与输入法无关:" & @CR & $vSendStr & @CRLF);转换后的字符串与输入法无关
ControlSend("", "", ControlGetFocus("", ""), "与输入法无关的实际字符为:" & @LF);提示语,将实际字符串打出来看一下。
ControlSend("", "", ControlGetFocus("", ""), $vSendStr, 1);最后一个参数1的意思按原字符模样输出,不转换。
ControlSend("", "", ControlGetFocus("", ""), @CRLF & "用controlSend加快速度:" & @CR & $vSendStr & @CRLF);直接用Controlsend速度很快。
$oldText = ControlGetText("", "", ControlGetFocus("", ""))
;ControlSetText不会激活修改事件,也就是说,如果不做别的改动,关闭记事本甚至不会提示保存。
ControlSetText("", "", ControlGetFocus("", ""), $oldText &"用ControlSetText置入文本:" & @CR & $sText & @CR&"ControlSetText的缺点在于不激活修改事件,原软件不会认为你做过修改!");用了Controlsend怎么少得了ControlText呢?速度更快。
Return True
Next
EndFunc ;==>_Send
Func _SendEx($sSendStr = '');论坛大神写的函数,借用一下
Local $vSendStr = '', $aSplit, $sStr, $sOptSendKeyDelay
If $sSendStr = '' Then Return SetError(1, 0, '')
$aSplit = StringSplit($sSendStr, '')
For $i = 1 To $aSplit
$sStr = $aSplit[$i]
If StringRegExp($sStr, '(?i)[\w,/\\\|~`!<>\[\]\.''":@#$%\^&*\(\)-+=]', 0) Then
$vSendStr &= '{ASC ' & Asc($sStr) & '}'
Else
$vSendStr &= $sStr
EndIf
Next
Return $vSendStr
EndFunc ;==>_SendEx
**** Hidden Message *****
关于解决按钮后激活原窗口的方法 If Not BitAND(_WinAPI_GetWindowLong($Form1, $GWL_EXSTYLE), $WS_EX_NOACTIVATE) Then _WinAPI_SetWindowLong($Form1, $GWL_EXSTYLE, BitOR(_WinAPI_GetWindowLong($Form1, $GWL_EXSTYLE), $WS_EX_NOACTIVATE)) zghwelcome 发表于 2021-1-6 11:06
**** 本内容被作者隐藏 ****
谢谢大神,我研究下 tubaba 发表于 2021-1-6 15:58
If Not BitAND(_WinAPI_GetWindowLong($Form1, $GWL_EXSTYLE), $WS_EX_NOACTIVATE) Then _WinAPI_SetWindow ...
这个是?看不懂哇 zghwelcome 发表于 2021-1-6 11:06
**** 本内容被作者隐藏 ****
大神,我想写的是视频播放快捷键盘,需要定位的是视频播放的窗口,但是视频的标题不定,用class:后面是不是把notepad换成个啥 tubaba 发表于 2021-1-6 15:58
If Not BitAND(_WinAPI_GetWindowLong($Form1, $GWL_EXSTYLE), $WS_EX_NOACTIVATE) Then _WinAPI_SetWindow ...
学习了,谢谢大神 看看你隐藏了什么内容,学习一下 解决了就编辑标题,添加已解决
最近很多不编辑的,直接移至无意义,之后批量删除。 是什么神奇的方法,居然隐藏起来了
页:
[1]