|

本帖最后由 萧阳天 于 2015-1-18 20:13 编辑
窗口_是否在最顶端 函数有BUG
源码:
当前窗口 = 窗口_取焦点句柄 () ' ---> 错误关键所在 窗口_取焦点句柄 ,功能有局限,只能取本进程的焦点句柄,取不了其它进程焦点句柄,焦点在其它进程,本函数就无用了
修改后的 窗口_取焦点句柄 () 函数
.版本 2
.子程序 窗口_取焦点句柄, 整数型, 公开, 取焦点句柄;获得自身拥有输入焦点的窗口句柄
.局部变量 wnd, 整数型
.局部变量 SelfThreadId, 整数型
.局部变量 ForeThreadId, 整数型
.局部变量 附加线程, 逻辑型
' 获取当前具有输入焦点控件的窗口句柄由于GetFocus只能本身进程调用,所以必须调用AttachThreadInput函数附加线程
wnd = 0 ' ;//窗口句柄
wnd = GetForegroundWindow () ' //获得当前激活的窗口句柄
SelfThreadId = GetCurrentThreadId () ' //获取本身的线程ID
ForeThreadId = GetWindowThreadProcessId (wnd, 0) ' //根据窗口句柄获取线程ID
.如果真 (ForeThreadId ≠ SelfThreadId)
AttachThreadInput (ForeThreadId, SelfThreadId, 真) ' //附加线程
.如果真结束
wnd = GetFocus () ' //获取具有输入焦点的窗口句柄
.如果真 (ForeThreadId ≠ SelfThreadId)
AttachThreadInput (ForeThreadId, SelfThreadId, 假) ' //取消附加的线程
.如果真结束
' SendMessage(wnd,WM_CHAR,WPARAM('a'),0);//发送一个字消息
返回 (wnd)
需要再增加一个DLL命令
.版本 2
.DLL命令 AttachThreadInput, 整数型, , "AttachThreadInput", , “连接线程输入函数”,返回值 Long,非零表示成功,零表示失败,
.参数 idAttach, 整数型, , 欲连接线程的标识符(ID),这是源
.参数 idAttachTo, 整数型, , 与idAttach线程连接的另一个线程的标识符 fAttach Long,这是转移连接到的目标
.参数 fAttach, 逻辑型, , TRUE(非零)连接,FALSE撤消连接 注销
|
评分
-
查看全部评分
|