Jump to content
Sign in to follow this  

Recommended Posts

Greetings,

Is possible build a script to send/receive commands in "Native Messagin" ?

If you install this extension:
https://chrome.google.com/webstore/detail/native-messaging-example/mefhabneoickhhbiglkmehhmemefkopf/related

And this complement:
https://github.com/Mandar-Shinde/Google-Chrome-Native-Messaging/releases/download/V1.0/GoogleNativeClient.exe

You have a work example to send / receive messages from Google Chrome's plugin and NativeMessagingApp.exe.

I found the source NativeMessagingApp.exe's here:
https://github.com/Mandar-Shinde/Google-Chrome-Native-Messaging

I try build this script... But not work...
 

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Compression=4
#AutoIt3Wrapper_Outfile=C:\Users\Public\GoogleNativeClient\NativeMessagingApp2.exe
#AutoIt3Wrapper_UseUpx=y
#AutoIt3Wrapper_Change2CUI=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

#NoTrayIcon

#include-once
#include <Array.au3>
#include <JSMN.au3> ; https://github.com/chechelaky/AutoIt/blob/master/JSMN.au3
#include <Debug.au3>

Global $msg = "@empty"

Global Const $CLIENT_START = '{"text":"Client Started"}'
Global Const $CLIENT_STOP = '{"text":"Client Stopped"}'
Global Const $CLIENT_CLICK = '{"text":"Client Click"}'

_DebugSetup("NativeMessagingApp2", True, 4, @ScriptDir & "\NativeMessagingApp2.log", True)

Global $read, $json, $out = ""

If IsArray($CmdLine) Then
;~  $msg = @LF & "Google Chrome Native Messaging App V1" & @LF & @LF & _
;~          "GPLV3 software distributed under the License is distributed on an ""AS IS"" BASIS" & @LF & _
;~          "WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied." & @LF & _
;~          "See the License for the specific language governing permissions and" & @LF & _
;~          "limitations under the License." & @LF & @LF

;~  Local $size = UBound($CmdLine, 1) - 1
;~  $msg &= "App running with args=" & $size & @LF
;~  For $ii = 0 To $size
;~      $msg &= $ii & " : " & $CmdLine[$ii] & @LF
;~  Next
;~  _DebugOut($msg)
EndIf

sendMessage($CLIENT_START)

While Sleep(10)
    $read = ConsoleRead()
    If @error And $out Then
        _DebugOut("$read...............: " & $out)
        $json = Jsmn_decode($out)
        If @error Then
            _DebugOut("$json...............: @Error")
        Else
            _DebugOut("$json...............: @Ok")
        EndIf

        If IsObj($json) And $json.Exists("text") Then
            sendMessage('{"text":"' & $json.Item("text") & '"}')
        Else
            sendMessage('{"text":"@Error"}')
        EndIf
        $out = ""
    Else
        $out &= $read
    EndIf
WEnd

Func sendMessage($var)
    ConsoleWrite($var & @CRLF)
    _DebugOut("sendMessage===>" & $var)
EndFunc   ;==>Say

 

Edit the file:
C:\Users\Public\GoogleNativeClient\com.google.chrome.example.echo-win.json

And replace:
"path": "NativeMessagingApp.exe",

By:
"path": "NativeMessagingApp2.exe",

Then plugin call the AutoIt script...

But is not functional...

 

About the file mainwindow.cpp, have this function:

inline QString sendMessage(QString data){
  unsigned int len = data.length();
  cout.write(reinterpret_cast<const char *>(&len), 4);
  cout << data.toUtf8().data() << flush;
  return "";
}

How re-write this to AutoIt?
How execute a flush?



Best regards.

Edited by Luigi

Visit my repository

Share this post


Link to post
Share on other sites

https://www.autoitscript.com/autoit3/docs/functions/StdoutRead.htm

https://www.autoitscript.com/autoit3/docs/functions/StdinWrite.htm

https://www.autoitscript.com/autoit3/docs/functions/StdioClose.htm

flush most likely not needed 

https://www.autoitscript.com/autoit3/docs/functions/FileFlush.htm

 

although I would expect consoleread/consolewrite should be able to do what you need.

step 1 would be that you see the plugin from chrome starts your compiled exe. you should be able to see that happening with a simple gui window or thru taskmanager

 

Edited by junkew

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By emendelson
      After fifteen years of working in AutoIt, I'm still a beginner, so I have ConsoleWrite() lines all over my scripts to help me find my mistakes. Is it likely that these lines are slowing down my compiled scripts? If so, would it make sense to replace all the ConsoleWrite() lines with
      If Not @Compiled Then ConsoleWrite("data") Or is it better simply to comment out those lines when I have things working correctly?
      I'm not sure there's a clear answer to this question, but I hope someone knows a lot more about it than I do.
    • By rmckay
      Hello,
      I've added ConsoleWrite lines to functions I've created.  The format for the ConsolWrite statements is : (@CRLF & $sPath  &  '('  &  @ScriptLineNumber  &  ') : *** Func _ABC() ***: '  &  @crlf ).  $sPath  is defined as the filepath to the file containing the function - Local $sPath = "C:\Users\Owner\Documents\AutoIt\NT8 Download Replay Data\DownloadReplayFunctions02.au3" 
      Local $sPath = "C:\Users\Owner\Documents\AutoIt\NT8 Download Replay Data\DownloadReplayFunctions02.au3" ConsoleWrite(@CRLF & $sPath & '(' & @ScriptLineNumber & ') : *** Func _oMenuItemHistoricalData() ***: ' & @crlf ) The result is that I can access the functions from the Scite output window when the function is located in another file which is included in the main file.  For some reason Scite adds a line to the code when I switch to the Include file from the output window.

      Why does the line get added to the script and can I stop if from appearing?
      Thanks,
    • By Danyfirex
      Hello guys.  It's been awhile since I shared something. So today I want to share my last project.
      What's Loga?
      Loga is a simple logging library to keep track of code with an integrated console.
      Features.
      Common log levels. Integrated console. Multiple instances. Custom color and font for each instance log level. Define output format with macros. Conditional and occasional Logging. Easy to use. Basic Usage:
      #include "..\Loga.au3" ;This are some of the default settings: ;Default log level $LOGA_LEVEL_TRACE ;output format: {Symbol}{LogIndex} {LevelName} {LongDateTime} {Message} ;Log to File is enabled. ;Log file name format: YYYYMMDDHHMM-Loga-InstanceIndex.log ;Custom Console is disabled by default. ;By default log to STDOUT. _LogaTrace("I'm Trace") _LogaDebug("I'm Debug") _LogaInfo("I'm Info") _LogaWarn("I'm Warn") _LogaError("I'm Error") _LogaFatal("I'm Fatal")  
      More examples here.
       
      Check Loga on GitHub.
       
      Loga Latest Release v1.0.2.
       
      Saludos
       
       
       
       
    • By gahhon
      I am not very sure if I am all right to post here tho. Due to other forums have no respond at all.
      So I have my custom make google chrome extension, and it will load unpack into Portable Google Chrome, but it keep pop up the alert box

      Is there any way to disable it? Because my Portable Google Chrome will load as Kiosk mode, so that user can't be uninstall/disable the extension.
      Many thanks in advance.
    • By xuzo
      Haven't used AutoIt in years, so very rusty...
      I can make autoIT activate windows of different programs, but having a hard time getting it to activate different tabs on Google chrome.
      It only works if the window is open and all other tabs are closed.
      #include <Constants.au3> #include <AutoItConstants.au3> Opt("WinTitleMatchMode", 2) WinActivate ( "Calc" ) WinWait("Calc") MouseClick($MOUSE_CLICK_LEFT, 100, 200, 2) send("{shiftdown}{end}{shiftup}{ctrlDown}c{ctrlUp}") $title = ClipGet() ;send($title) ;this is the section where I would like a specific tab to be activated WinActivate ( "Create +Prospects | Simple CRM - Cent Browser" ) WinWait("Create +Prospects | Simple CRM - Cent Browser") ;Opt("WinTitleMatchMode", 1) ;Local $hWnd= WinWait("Simple") ;WinActivate($hWnd) MouseClick($MOUSE_CLICK_LEFT, 300, 500, 2) Send($title)  
×
×
  • Create New...