救命啊,大神啊一个一直困扰着我多年的问题,关于窗口激活的问题
易语言吧
全部回复
仅看楼主
level 1
l35 楼主

关于窗口激活问题,困扰着我好多年了,各位方法都试过了都没能解决,而且我在网上找都三天两夜了
程序功能是这样的,窗口激活后在前台显示且获得输入焦点。
先说我第一个测试方法: _启动窗口.总在最前=真 来测试,结果是窗口在是前台显示了但没能获得输入焦点..然后我再加上 _启动窗口.获取焦点 () 虽然有输入焦点但还是不能直接输入,要用鼠标点一下这窗口才能进入编辑框内容输入..最终以失败告终
第二个测试方法: 用API函数SetForegroundWindow来激活,这个有点奇葩,它在易语言中按F5测试成功了,但编译或静态编译后它就奇葩了:只是窗口在任务栏闪了两下,即没有前台显示也没获得焦点..最终还是失败
附上我测试方法,先在窗口添加三个组件,按钮\标签\编辑框.代码如下:
.版本 2
.支持库 spec
.子程序 _按钮1_被单击
.局部变量 TEST, 整数型
延迟 (5000)
TEST = API_SetForegroundWindow (取窗口句柄 ())
标签1.标题 = 到文本 (TEST)
_启动窗口.总在最前 = 真
_启动窗口.获取焦点 ()
(代码的流程意思是,程序运行后 先点一下按钮后再把窗口后台,5秒后执行激活代码,看看是否能自动前台显示激活)
以下提提供SetForegroundWindow的DLL命令给大家测试:
.版本 2
.DLL命令 API_SetForegroundWindow, 整数型, "user32", "SetForegroundWindow", , , 将窗口设为系统的前台窗口。这个函数可用于改变用户目前正在操作的应用程序 非零表示成功,零表示失败。会设置GetLastError
.参数 hwnd, 整数型
2014年08月23日 04点08分 1
level 1
l35 楼主

测试代码发错了,发现多了两句,不能编辑了.用这个测试:,先在窗口添加三个组件,按钮\标签\编辑框.代码如下:
.版本 2
.支持库 spec
.子程序 _按钮1_被单击
.局部变量 TEST, 整数型
延迟 (5000)
TEST = API_SetForegroundWindow (取窗口句柄 ())
标签1.标题 = 到文本 (TEST)
(代码的流程意思是,程序运行后 先点一下按钮后再把窗口后台,5秒后执行激活代码,看看是否能自动前台显示激活)
以下提提供SetForegroundWindow的DLL命令给大家测试:
.版本 2
.DLL命令 API_SetForegroundWindow, 整数型, "user32", "SetForegroundWindow", , , 将窗口设为系统的前台窗口。这个函数可用于改变用户目前正在操作的应用程序 非零表示成功,零表示失败。会设置GetLastError
.参数 hwnd, 整数型
2014年08月23日 04点08分 2
level 1
l35 楼主
在线等待大神出现
2014年08月23日 13点08分 3
level 13
showwindow()
2014年08月23日 15点08分 4
l35
这命令早试过了。不管用
2014年08月23日 17点08分
level 13
你把精易模块里的窗口激活命令的源码拿出来看看就知道了。
2014年08月23日 15点08分 5
l35
试过了.根本没用
2014年08月24日 11点08分
level 6
我会激活
以前试过
我不是大神
接触e1年
2014年08月24日 10点08分 6
level 6
还是在做单机版seer时想做的激活,任务栏与主窗口
2014年08月24日 10点08分 7
level 6
载入 (窗口1, , 假)
后面设置成假就可以了
2014年08月24日 10点08分 8
l35
我只能说:答非所问
2014年08月24日 11点08分
level 9
。。
✎﹏₯㎕﹍﹍         经不住时间的更改,留不住此间的流年。
 
2014年08月24日 15点08分 10
level 11
SwitchToThisWindow function
[This function is not intended for general use. It may be altered or unavailable in subsequent versions of Windows.]
Switches focus to the specified window and brings it to the foreground.
SyntaxC++VOID WINAPI SwitchToThisWindow( _In_ HWND hWnd, _In_ BOOL fAltTab);ParametershWnd [in]
Type: HWND
A handle to the window.
fAltTab [in]
Type: BOOL
A TRUE for this parameter indicates that the window is being switched to using the Alt/Ctl+Tab key sequence. This parameter should be FALSE otherwise.
Return value
This function does not return a value.
Remarks
This function is typically called to maintain window z-ordering.
This function was not included in the SDK headers and libraries until Windows XP with Service Pack 1 (SP1) and Windows Server 2003. If you do not have a header file and import library for this function, you can call the function using LoadLibrary and GetProcAddress.
试试这个API,我在C++下测试没有问题,不知道E可不可以。
还有,你的那个问题,解答是下面这个,博客里也提供了一种方法,你喜欢哪个就是哪个吧。
->微软认为在windows的多线程环境下,不应该强制切换输入焦点,所以在目标窗口和当前窗口不是用一线程时,函数无效。
引用:http://blog.csdn.net/icedmilk/article/details/5391702
MSDN :http://msdn.microsoft.com/en-us/library/windows/desktop/ms633553(v=vs.85).aspx
2014年08月24日 19点08分 11
l35
SwitchToThisWindow()这个函数试过了,编译前可以用,编译后就只在任务闪烁..和SetForegroundWindow的效果是一样的..失败
2014年08月25日 15点08分
l35
wow原来你才是真正的大神,用了你的第二个方法终于解决了[真棒].实在是太流弊了,非常感谢这位大神thankyou verymuch!
2014年08月25日 17点08分
@l35 @l35 具体是什么方法?地址中的代码不是很理解
2015年08月01日 10点08分
具体??
2018年02月03日 10点02分
level 11
E的对话框方式载入有问题,这个用api有解决的可能,但用哪个我不知道。
2014年08月24日 19点08分 12
level 11
简单的临时方案,馊主意但可以临时使用:用一个逻辑型全局变量来控制是否向下执行。方法:首先载入窗口,第二个参数随便,第三个用假,然后用一个判断循环,循环体内只写一个处理事件,判断条件是逻辑变量等于假。当载入的窗口销毁时让逻辑变量变成真,循环结束,下面代码继续执行。注意逻辑变量的值,在什么时候变成什么值不要乱了。
2014年08月24日 20点08分 13
l35
看不懂,希望你能举例说明
2014年08月25日 15点08分
level 15
[真棒]
   --人活着就是为了解决困难。这才是生命的意义,也是生命的内容。
2014年08月25日 16点08分 14
level 9
tab.........
   --这是一条神奇的小尾巴ฏ๎๎๎๎๎๎๎๎๎ฏฏด้้้้้็็็็็้้้้้็็็็็้้้้้็็็้็็็ฏ๎็็็็็็o
  
2014年08月25日 17点08分 15
level 8
。。
2014年08月25日 18点08分 16
level 6
求详解解决方法。。。
2014年10月11日 09点10分 17
level 12
在加一条代码 编辑框1.至焦点
2014年10月11日 11点10分 18
直接在窗口激活后,编辑框获取焦点
2018年07月13日 03点07分
level 1
真巧,我现在也是这个问题
2016年08月21日 08点08分 20
level 6
ฏ๎๎๎๎๎๎๎๎๎ฏฏด้้้้้็็็็็้้้้้็็็็็้้้้้็็็้็็็ฏ๎็็็็็็o
ฏ๎๎๎๎๎๎๎๎๎ฏฏด้้้้้็็็็็้้้้้็็็็็้้้้้็็็้็็็ฏ๎็็็็็็o
ฏ๎๎๎๎๎๎๎๎๎ฏฏด้้้้้็็็็็้้้้้็็็็็้้้้้็็็้็็็ฏ๎็็็็็็oฏ๎๎๎๎๎๎๎๎๎ฏฏด้้้้้็็็็็้้้้้็็็็็้้้้้็็็้็็็ฏ๎็็็็็็o
ฏ๎๎๎๎๎๎๎๎๎ฏฏด้้้้้็็็็็้้้้้็็็็็้้้้้็็็้็็็ฏ๎็็็็็็o
ฏ๎๎๎๎๎๎๎๎๎ฏฏด้้้้้็็็็็้้้้้็็็็็้้้้้็็็้็็็ฏ๎็็็็็็o
ฏ๎๎๎๎๎๎๎๎๎ฏฏด้้้้้็็็็็้้้้้็็็็็้้้้้็็็้็็็ฏ๎็็็็็็o
ฏ๎๎๎๎๎๎๎๎๎ฏฏด้้้้้็็็็็้้้้้็็็็็้้้้้็็็้็็็ฏ๎็็็็็็o
ฏ๎๎๎๎๎๎๎๎๎ฏฏด้้้้้็็็็็้้้้้็็็็็้้้้้็็็้็็็ฏ๎็็็็็็o
2017年03月14日 22点03分 21
level 4
让里面的编辑框获取焦点呀
2017年03月15日 07点03分 22
正解!
2018年07月13日 03点07分
@逍遥男爵 获取个毛,你连窗口到最前且激活都做不到,你获取焦点也是在那闪,键盘第一时刻就输入不了
2018年10月15日 16点10分
1 2 尾页