问题描述
我想将VBA宏转换为Google Apps脚本,但我认为这一特殊的转换是不可能的,因为我完全不知道从何处开始。无论如何,我找不到做“ findwindow”在APP脚本上所做的事情。有谁知道如何解决这个问题,还是我应该放弃呢?
另外,有人陪同电话伴侣一起玩吗?由于他们不提供任何API,因此使用移动伴侣通过Google传播方式发送消息的唯一方法是使用findwindow,这也显示了相同的问题。任何对此的见解将不胜感激。谢谢。
Option Explicit
#If VBA7 Then
' https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindowa
Private Declare PtrSafe Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
(ByVal lpClassName As String,_
ByVal lpWindowName As String) As Long
' https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindowexa
Public Declare PtrSafe Function findwindowex Lib "user32.dll" Alias "findwindowexA" _
(ByVal hwndParent As Long,_
ByVal hwndChildAfter As Long,_
ByVal lpszClass As String,_
ByVal lpszWindow As String) As Long
' https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendmessagea
Private Declare PtrSafe Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long,_
ByVal wMsg As Long,_
ByVal wParam As Long,_
ByRef lParam As Any) As Long
'https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-postmessagea
Private Declare PtrSafe Function PostMessage Lib "user32" Alias "PostMessageA" _
(ByVal hwnd As Long,_
ByRef lParam As Any) As Long
Private Declare PtrSafe Function GetNextwindow Lib "user32" Alias "Getwindow" (ByVal hwnd As Long,ByVal wFlag As Long) As Long
Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
#Else
' https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindowa
Private Declare Function FindWindow Lib "user32.dll" Alias "FindWindowA" _
(ByVal lpClassName As String,_
ByVal lpWindowName As String) As Long
' https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-findwindowexa
Public Declare Function findwindowex Lib "user32.dll" Alias "findwindowexA" _
(ByVal hwndParent As Long,_
ByVal lpszWindow As String) As Long
' https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-sendmessagea
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" _
(ByVal hwnd As Long,_
ByRef lParam As Any) As Long
'https://docs.microsoft.com/en-us/windows/win32/api/winuser/nf-winuser-postmessagea
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" _
(ByVal hwnd As Long,_
ByRef lParam As Any) As Long
>Private Declare Function GetNextwindow Lib "user32" Alias "Getwindow" (ByVal hwnd As Long,ByVal wFlag As Long) As Long
Private Declare Sub Sleep Lib "kernel32" (ByVal Milliseconds As LongPtr)
#End If
Dim Handle,HandleEx As Long
Private Const WM_SETTEXT = &HC: Private Const WM_KEYDOWN = &H100
Private Const VK_RETURN = &HD: Private Const VK_ESCAPE = &H1B
Private Const WM_CLOSE = &H10: Private Const GW_HWNDNEXT = &H2
Sub Send_Kakao(Target As Range,Msg As Range)
Dim SendTo$: SendTo = Target.Value
Dim Message$: Message = Msg.Value
Dim hwnd_KakaoTalk As Long: Dim hwnd_RichEdit As Long
Call Call_ChatRoom(Target)
DoEvents
Sleep 1000
hwnd_KakaoTalk = FindWindow(vbNullString,SendTo)
hwnd_RichEdit = findwindowex(hwnd_KakaoTalk,"RichEdit50W",vbNullString)
If hwnd_RichEdit = 0 Then MsgBox SendTo & "This chatroom is not opened.": Exit Sub
Call SendMessage(hwnd_RichEdit,WM_SETTEXT,ByVal Message)
Call PostMessage(hwnd_RichEdit,WM_KEYDOWN,VK_RETURN,0)
End Sub
Private Sub Call_ChatRoom(Target As Range)
Dim ChatRoom$: ChatRoom = Target.Value
Dim rtnV As Long
Handle = FindWindow("EVA_Window_Dblclk",vbNullString) 'Saave Window Handle info of Kakao on Handle
'//Print error when cannot be located
If Handle = 0 Then
MsgBox "Open kakao first.",16,"Error"
Else
HandleEx = findwindowex(Handle,"EVA_ChildWindow",vbNullString) 'children Window1
HandleEx = findwindowex(HandleEx,"EVA_Window",vbNullString) 'children Window2
HandleEx = findwindowex(HandleEx,"Edit",vbNullString) 'children Window3
Call SendMessage(HandleEx,ByVal ChatRoom)
DoEvents
Sleep 1000
Call PostMessage(HandleEx,0)
End If
End Sub
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)