【伺か】Ghostからアクションを起こしてほしかったので、ユーザーの画面の覗き込むコードを書いた【yaya】

ukagaka

できるようになること。

Ghostはあなたがどんなアプリを起動しているか、どんなサイトを見ているのかを知ることができるようになります。

ukagaka.png

内容は単純で、現在アクティブになっているウィンドウのタイトルを取得するものです。

環境

  • windows10 64bitでコンパイルしています。

活用

カテゴリとして旅行や料理についてユーザーが検索していればそれを正規表現などで拾って会話の起点にすると自然な感じになると思います。
ほかにもエッチな単語なんかもGhostの反応としてはイメージしやすいですね。

C#のコード

exeファイルはこちら OneDrive

using System; 
using System.Runtime.InteropServices; 
using System.Text; 



class Win32Api { 
    [DllImport("user32.dll")] 
    public static extern IntPtr GetForegroundWindow(); 

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
    public static extern int GetWindowText(IntPtr hWnd, StringBuilder lpString, int nMaxCount); 

    [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)] 
    public static extern int GetWindowTextLength(IntPtr hWnd); 
} 


public class Hello{ 
    public static void Main(){ 
        int result; 
        string _windowText; 
        const int MaxLength = 500; 

        IntPtr handle       = Win32Api.GetForegroundWindow(); 
        StringBuilder tsb   = new StringBuilder(MaxLength); 
        result              = Win32Api.GetWindowText(handle, tsb, tsb.Capacity); 


        if ( result > 0 ) { 
            _windowText = tsb.ToString(); 
        } 
        else { 
            _windowText = ""; 
        } 
        //foreground window title 
        Console.WriteLine(tsb.ToString()); 
    } 
} 

ファイル構成

呼び出しにproxy_ex.dllを使用しています。
下記の方からお借りしました。
Release SAORI : proxy_ex v1.0.2 · ponapalt/csaori · GitHub

ghost名/ghost/master 

    ├─yaya.dll 
    ├─dll 
    │  ├─proxy_ex.dll 
    │  └─getWindowTitle.exe 
    └─profile 

伺かに組み込む

proxyをsjisで使用します。

//1分に一度呼ばれる 
OnMinuteChange { 
    _window_title = FUNCTIONEX( "./dll/proxy_ex.dll" , "./getWindowTitle.exe" ) 
    "何見てるの? %(_window_title) ? ふ~ん。\e" 
} 


//既存の関数に追加 
OnGhostLoad { 
    //proxy_ex.dll初期化 
    FUNCTIONEX("./dll/proxy_ex.dll" ,  "/charset" , "sjis"  ) 
} 

最後に。

Ghostからユーザーに対して取れるアクションが乏しいような気がしました。
素敵なゴーストが生まれることを願っています。