微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何将带有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.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?