易语言吧 关注:266,052贴子:1,663,270

救命啊,大神啊一个一直困扰着我多年的问题,关于窗口激活的问题

只看楼主收藏回复


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


IP属地:广东1楼2014-08-23 12:42回复

    测试代码发错了,发现多了两句,不能编辑了.用这个测试:,先在窗口添加三个组件,按钮\标签\编辑框.代码如下:
    .版本 2
    .支持库 spec
    .子程序 _按钮1_被单击
    .局部变量 TEST, 整数型
    延迟 (5000)
    TEST = API_SetForegroundWindow (取窗口句柄 ())
    标签1.标题 = 到文本 (TEST)
    (代码的流程意思是,程序运行后 先点一下按钮后再把窗口后台,5秒后执行激活代码,看看是否能自动前台显示激活)
    以下提提供SetForegroundWindow的DLL命令给大家测试:
    .版本 2
    .DLL命令 API_SetForegroundWindow, 整数型, "user32", "SetForegroundWindow", , , 将窗口设为系统的前台窗口。这个函数可用于改变用户目前正在操作的应用程序 非零表示成功,零表示失败。会设置GetLastError
    .参数 hwnd, 整数型


    IP属地:广东2楼2014-08-23 12:48
    回复
      在线等待大神出现


      IP属地:广东3楼2014-08-23 21:35
      回复
        showwindow()


        IP属地:江苏来自Android客户端4楼2014-08-23 23:52
        收起回复
          你把精易模块里的窗口激活命令的源码拿出来看看就知道了。


          IP属地:江苏来自Android客户端5楼2014-08-23 23:53
          收起回复
            我会激活
            以前试过
            我不是大神
            接触e1年


            IP属地:陕西6楼2014-08-24 18:49
            回复
              还是在做单机版seer时想做的激活,任务栏与主窗口


              IP属地:陕西7楼2014-08-24 18:50
              回复
                载入 (窗口1, , 假)
                后面设置成假就可以了


                IP属地:陕西8楼2014-08-24 18:57
                收起回复
                  。。
                  ✎﹏₯㎕﹍﹍         经不住时间的更改,留不住此间的流年。
                   


                  IP属地:山东来自Android客户端10楼2014-08-24 23:42
                  回复
                    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


                    11楼2014-08-25 03:06
                    收起回复
                      E的对话框方式载入有问题,这个用api有解决的可能,但用哪个我不知道。


                      IP属地:吉林来自手机贴吧12楼2014-08-25 03:57
                      回复
                        简单的临时方案,馊主意但可以临时使用:用一个逻辑型全局变量来控制是否向下执行。方法:首先载入窗口,第二个参数随便,第三个用假,然后用一个判断循环,循环体内只写一个处理事件,判断条件是逻辑变量等于假。当载入的窗口销毁时让逻辑变量变成真,循环结束,下面代码继续执行。注意逻辑变量的值,在什么时候变成什么值不要乱了。


                        IP属地:吉林来自手机贴吧13楼2014-08-25 04:03
                        收起回复

                             --人活着就是为了解决困难。这才是生命的意义,也是生命的内容。


                          IP属地:广东来自Android客户端14楼2014-08-26 00:21
                          回复
                            tab.........
                               --这是一条神奇的小尾巴ฏ๎๎๎๎๎๎๎๎๎ฏฏด้้้้้็็็็็้้้้้็็็็็้้้้้็็็้็็็ฏ๎็็็็็็o
                              


                            IP属地:河南来自Android客户端15楼2014-08-26 01:40
                            回复
                              。。


                              来自Android客户端16楼2014-08-26 02:32
                              回复