Const WM_IME_CHAR = &H286 Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long Private Declare Function GetForegroundWindow Lib "user32" () As Long Private Declare Function AttachThreadInput Lib "user32" (ByVal idAttach As Long, ByVal idAttachTo As Long, ByVal fAttach As Long) As Long Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long Private Declare Function GetFocus Lib "user32" () As LongPublic Sub SendText(s As String) Dim pid As Long, i As Integer, ch As Integer, focusID As Long pid = GetWindowThreadProcessId(GetForegroundWindow, pid) AttachThreadInput pid, App.ThreadID, 1 focusID = GetFocus AttachThreadInput pid, App.ThreadID, 0 For i = 1 To Len(s) ch = Asc(Mid$(s, i, 1)) SendMessage focusID, WM_IME_CHAR, ch, ByVal 0& Next End Sub
to yyz985(yyz985): 你好,请到这里贴一下,我测试一下效果如何,马上结分,谢谢! http://community.csdn.net/Expert/topic/4958/4958882.xml?temp=.3448603
------------------------------------------
你学过windows sdk编程再来问吧,这句话可让俺伤心了现在要把外部进程的一个窗口,变成本进程的.
------------------------------------------
这句话本身就是有问题的,从消息循环的角度来讲,你没有消息循环,就没有窗口,如果你有了消息循环,窗口要变成自己的,意味着它的消息处理都跑到你的消息循环来处理,其他的???那就不懂是什么意思了.附带说一句,我对vb一窍不通,对c有点了解,从我对windows的理解角度来看,你这个根本就不通,当然也有可能我没理解到你的意思,又或者我对windows的窗口原理理解不够透彻
能把别的程序放到自己的窗口
用的是 loadlibily
忘了
不要轻易说没有不可能的事情,那和人定胜天好象如出一辙。
那个窗口还是属于原来的进程,跟本进程无关.
那要怎么显示?随便显示又是什么意思?
(搞不懂,现在的需求越来越怪,难倒是我老了?................)
如果要把一个窗口据为己有,至少也要给这个窗口提供一个线程啊。
win32 的每个线程有一个消息队列,供该线程所有的窗口使用。如果想把一个窗口完全变为自己的,就得想办法把该窗口与其原来的线程断开...
想想就晕了...
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function GetForegroundWindow Lib "user32" () As Long
Private Declare Function AttachThreadInput Lib "user32" (ByVal idAttach As Long, ByVal idAttachTo As Long, ByVal fAttach As Long) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hWnd As Long, lpdwProcessId As Long) As Long
Private Declare Function GetFocus Lib "user32" () As LongPublic Sub SendText(s As String)
Dim pid As Long, i As Integer, ch As Integer, focusID As Long
pid = GetWindowThreadProcessId(GetForegroundWindow, pid)
AttachThreadInput pid, App.ThreadID, 1
focusID = GetFocus
AttachThreadInput pid, App.ThreadID, 0
For i = 1 To Len(s)
ch = Asc(Mid$(s, i, 1))
SendMessage focusID, WM_IME_CHAR, ch, ByVal 0&
Next
End Sub
http://community.csdn.net/Expert/topic/4958/4958882.xml?temp=.3448603