2017-09-03 7 views
2

自分で作成していないサードパーティのアプリケーションがあります。ボタンのクリックを聞き取り、そのアプリケーションのテーブルからデータを読み込むことができるアプリケーションを作成する必要があります。私は、サードパーティのアプリケーションはC#で作られていると確信していますが、わかりません。 UIボタンが押されたことを知り、アプリケーションからデータを収集する方法はありますか?私は、上記のタスクを満たしている限り、解決策がどのプログラミング言語に書き込まれなければならないのか気にしません。他のWindowsアプリケーションからイベントをキャプチャします

+0

他のアプリケーションのソースコードにアクセスできますか? – z3nth10n

+0

いいえ、インターネットからダウンロードしましたが、そのアプリケーションのデータをより明確に表示し、サードパーティのボタンが押されたときにアクションを実行するようなインターフェースを作成しようとしています。 – JPadley

答えて

1

他のアプリからデータを取得するために、user32.dllのようなDLLをほとんど使用することはできません。 検索ウィンドウの親ハンドル:その後

[DllImport("user32.dll", SetLastError = true)] 
static extern IntPtr FindWindow(string lpClassName, string lpWindowName); 

public static IntPtr FindWindow(string windowName) 
{ 
    var hWnd = FindWindow(windowName, null); 
    return hWnd; 
} 

、子ウィンドウ

[DllImport("user32.dll", SetLastError = true)] 
public static extern IntPtr FindWindowEx(IntPtr parentHandle, IntPtr childAfter, string className, string windowTitle); 

private IntPtr FindSomeElement(IntPtr parent) 
{ 
    IntPtr childHandle; 

childHandle = FindWindowEx(
    parent,  
    IntPtr.Zero,  
    "WindowsForms10.EDIT.app21", 
    IntPtr.Zero); 
return childHandle;} 

のハンドルを見つけ、そこからテキストを取得:

private static string GetText(IntPtr childHandle) 
{ 
    const uint WM_GETTEXTLENGTH = 0x000E; 
    const uint WM_GETTEXT = 0x000D; 

    var length = (int)SendMessage(handle, WM_GETTEXTLENGTH, IntPtr.Zero, null); 
    var sb = new StringBuilder(length + 1); 
    SendMessage(handle, WM_GETTEXT, (IntPtr)sb.Capacity, sb); 
    return sb.ToString(); 
} 

//私はこれをテストするのdidntコード、ちょうどアイデアを出した。詳細については、www.pinvoke.net/default.aspx/を参照してください。あなたはuser32.dllについて多くを見つけることができます

+0

また、SPY ++は、要素クラス名またはメインウィンドウクラス名を取得するのに役立ちます。 –

+0

これはどの言語で書かれていますか? – JPadley

+0

@JPadley、それはC# –

関連する問題