如何将带有findwindow api的vba宏转换为Google应用脚本?

问题描述

我想将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 (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...