阅读:2927回复:5

[求助]请问怎么获取外挂小小的激活状态?

楼主#
更多 发布于:2018-08-27 23:13
最近把媒体播放器换成了mpv,基本上都是键盘操作
但是常常因为小小输入法是激活状态,无法操作成功,要ctrl+spase关闭小小在操作,
因为习惯了把小小当作调用其他程序的快捷命令入口(比如调用FFmpeg和快捷输入FFmpeg的命令),导致这样的情况很多
所以我想用ahk写一个当检查到mpv是激活的时候自动取消小小输入法的激活状态
什么都准备好了,就差怎么获取激活状态了


谢谢
沙发#
发布于:2018-08-28 10:22
Run, xxxx\yong\yong-vim.exe 1,,Hide
强行切换到英文状态即可。

不分享一下么?
板凳#
发布于:2018-08-28 11:49
我是用粗暴的
#Persistent
SetTimer, mympv, 250
return

mympv:
WinWaitActive ahk_exe mpv.exe
Run, "..\yong\yong-vim.exe" 1,,Hide
return


请问还有其他状态能切换吗?比如简繁
我使用各种模拟按键测试发送ctrl+alt+f都不行,只有物理按了才对小小有效
地板#
发布于:2018-08-28 14:36
查找ahk的帮助文件写了个新的

mympv:
WinWaitActive ahk_exe mpv.exe
{
Run, "xxx\yong\yong-vim.exe" 1,,Hide
}
WinWaitNotActive ahk_exe mpv.exe
{
Run, "xxx\yong-vim.exe" 0,,Hide
}
sleep,1000
goto,mympv
return

mpv激活时英文,不激活时中文
4楼#
发布于:2018-08-28 16:14


#SingleInstance Force

Gui +LastFound
hWnd := WinExist()
DllCall( "RegisterShellHookWindow", UInt,hWnd )
MsgNum := DllCall( "RegisterWindowMessage", Str,"SHELLHOOK" )
OnMessage( MsgNum, "ShellMessage")

ShellMessage( wParam, lParam ) {
  debug:=false
  if (debug)
  {
    WinGetclass, WinClass, ahk_id %lParam%
    tooltip, wParam = %wParam% lParam = %lParam% WinClass = %WinClass%
  }
  If ( wParam = 32772 || wParam = 4) ;4 (HSHELL_WINDOWACTIVATED) or 32772 (0x8004; HSHELL_RUDEAPPACTIVATED)
  {
    Sleep, 200
    WinGetclass, WinClass, ahk_id %lParam%
    if (debug)
    {
      tooltip, wParam = %wParam% lParam = %lParam% WinClass = %WinClass%
    }
    ;~ En
    If WinClass in ExploreWClass,CabinetWClass,AfxMDIFrame140u,IrfanView,DSUI:PDFXCViewer,EVERYTHING,ConsoleWindowClass,Photoshop
    {
      if (debug)
      {
        tooltip, EN wParam = %wParam% lParam = %lParam% WinClass = %WinClass%
      }
      Run, ..\yong-vim.exe 1,,Hide
    }
    ;~ Ch
    If WinClass in TXGuiFoundation,WeChatMainWndForPC
    {
      if (debug)
      {
        tooltip, CH wParam = %wParam% lParam = %lParam% WinClass = %WinClass%
      }
      Run, ..\yong-vim.exe 0,,Hide
    }
  }
  Sleep, 500
  if (debug)
  {
    ToolTip
  }
  return
}

;~ 本脚本在激活一个新窗口时执行。并不百分之百可靠,偶尔会失效。凑合用用吧。
;~ 有些窗口(QQ、微信等)大部分时候都是不好使的(在窗口间「切换」时几乎无效,「新打开窗口」时容易生效。)
;~ 可以打开 debug 查看脚本执行状态。
;~ Run后面的相对路径是相对于此 ahk 文件所在文件夹的路径。建议用绝对路径。
;~ Run, xxxx\yong-vim.exe 是否有效,可以单独写个一行的 ahk 脚本运行测试一下。
;~ 通过在两行「If WinClass in ...」后面追加 ahk_class,设置自动切换至英文和中文的窗口。
5楼#
发布于:2018-08-28 16:39
看不懂啊,而且测试了下,感觉效果不好
If WinClass in mpv,HoneyviewClassX,ImagineW
只有mpv有效,而且不是程序启动就切英文,要重新激活窗口
If WinClass in Progman,CabinetWClass
这个也没有在资源管理器文件夹窗口里切到中文
前面提到了,我常常用$[123]321 这种输入FFmpeg命令
所以不能立刻切回中文,不适合我



多个窗口我用
-------180829 修改
GroupAdd, ABGroup , ahk_exe mpv.exe
GroupAdd, ABGroup , ahk_exe Imagine64.exe
GroupAdd, ABGroup , ahk_exe Honeyview.exe
GroupAdd, ABGroup , ahk_class ConsoleWindowClass
GroupAdd, ABGroup , ahk_class TfrmInstall
GroupAdd, ABGroup1 , ahk_exe Explorer.EXE
GroupAdd, ABGroup1 , ahk_exe firefox.exe
SetTimer, yongmpv, 1000
Return
yongmpv:
IfWinActive, ahk_group ABGroup
{
    Run, xx\yong\yong-vim.exe 1, , hide
}
;Else
IfWinActive, ahk_group ABGroup1
{
    Run, yy\yong\yong-vim.exe 0, , hide
}
Return
游客

返回顶部