当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 5 篇帖子 ] 
作者 内容
1 楼 
 文章标题 : 使用Python语言控制其他进程窗口的输入法
帖子发表于 : 2015-01-23 10:18 
论坛管理员

注册: 2005-03-27 0:06
帖子: 10149
系统: Ubuntu 12.04
送出感谢: 7
接收感谢: 130
由于网上的资料比较少,写了一个放出来。

代码:
#coding=utf-8
from ctypes import *
from ctypes.wintypes import BOOL, HWND, LPARAM, HKL
import _winreg

hwnd = windll.user32.FindWindowA('Notepad',None)
print "hwnd:", hwnd

windll.user32.SetForegroundWindow(hwnd)

editHwnd = 0

@WINFUNCTYPE(BOOL, HWND, LPARAM)
def print_title(hwnd,lParam):
    className = (c_wchar * 7)()
    windll.user32.GetClassNameW(hwnd,className,7)
    className = className.value
    if className!="":
        print className,hwnd
        global editHwnd
        if className=='Edit':
            editHwnd = hwnd
    return 1
     
windll.user32.EnumChildWindows(hwnd,print_title,1)

print "editHwnd:",editHwnd

kListCount = windll.user32.GetKeyboardLayoutList(0,None)
print "GetKeyboardLayoutList:",kListCount

#kList= windll.Kernel32.HeapAlloc(windll.Kernel32.GetProcessHeap(),0x00000008,kListCount*sizeof(HKL))
kList=(HKL * kListCount)()
windll.user32.GetKeyboardLayoutList(kListCount,kList)
#kList = (HKL * kListCount).from_address(kList)
for k in kList:
    print "KeyboardLayout:",k,k&0x0000ffff,k>>16,hex(k)
    try:
        key = _winreg.OpenKey(_winreg.HKEY_LOCAL_MACHINE,'SYSTEM\CurrentControlSet\Control\Keyboard Layouts\%X'%k)
        print _winreg.QueryValueEx(key,'Layout Text')[0]
    except:
        print "No Find Layout Text of %s"%k
hkl=kList[0]
#windll.Kernel32.HeapFree(windll.Kernel32.GetProcessHeap(),0,kList)

p= c_int()
windll.user32.GetWindowThreadProcessId(hwnd,byref(p))
pid = p.value
print "GetWindowThreadProcessId:",pid

tid = windll.Kernel32.GetCurrentThreadId()
print "GetCurrentThreadId:",tid

windll.user32.AttachThreadInput(tid,pid,True)

print "editHwnd:",editHwnd
print "hkl:",hkl
#print "WM_INPUTLANGCHANGEREQUEST:", windll.user32.SendMessageA(editHwnd,0x0050,True,hkl)
print "WM_INPUTLANGCHANGEREQUEST:", windll.user32.SendMessageA(hwnd,0x0050,True,hkl)

windll.user32.AttachThreadInput(tid,pid,False)

print "GetLastError:", GetLastError()
 


页首
 用户资料  
 
2 楼 
 文章标题 : Re: 使用Python语言控制其他进程窗口的输入法
帖子发表于 : 2015-01-23 20:27 

注册: 2013-04-27 19:26
帖子: 295
系统: ubuntu+win7
送出感谢: 21
接收感谢: 9
$ python immethod.py
Traceback (most recent call last):
File "immethod.py", line 3, in <module>
from ctypes.wintypes import BOOL, HWND, LPARAM, HKL
File "/usr/lib/python2.7/ctypes/wintypes.py", line 23, in <module>
class VARIANT_BOOL(_SimpleCData):
ValueError: _type_ 'v' not supported


页首
 用户资料  
 
3 楼 
 文章标题 : Re: 使用Python语言控制其他进程窗口的输入法
帖子发表于 : 2015-01-23 21:26 
论坛管理员

注册: 2005-03-27 0:06
帖子: 10149
系统: Ubuntu 12.04
送出感谢: 7
接收感谢: 130
需要到windows环境下运行,针对记事本的控制。


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 使用Python语言控制其他进程窗口的输入法
帖子发表于 : 2015-01-23 23:46 
头像

注册: 2010-10-07 14:23
帖子: 33999
地址: 某系某星某洲某国某省某市
系统: Archdows10
送出感谢: 29
接收感谢: 151
2.7啊。。。现在已经更新到3.4了。。


_________________
心似浮云常自在,意如流水任东西。
此事背后一定有个天大的咪咪
广告:
1、走过路过,不要错过,dropbox网盘2.25G大放送
py大法好,退C保平安
java多妖孽,VB本异端
日诵一千遍,快活似神仙


页首
 用户资料  
 
5 楼 
 文章标题 : Re: 使用Python语言控制其他进程窗口的输入法
帖子发表于 : 2015-01-24 0:02 
论坛管理员

注册: 2005-03-27 0:06
帖子: 10149
系统: Ubuntu 12.04
送出感谢: 7
接收感谢: 130
习惯了。 :em01


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 5 篇帖子 ] 

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译