CH3COOH(酢酸)のさくっと393

VB.NET(VS2003)でお仕事中.Windows Mobile大好きです。

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  413  : 記事  0  : コメント  787  : トラックバック  92

ニュース

CH3COOH(酢酸)の実験室

書庫

日記カテゴリ

楽天証券が提供しているMarketSpeedへの自動ログイン機能をこしらえてみました。
とりあえず動いているみたいなので公開ω(゚ω゚)ω カパー

テキストボックスに文字列を入力させたかったんだけど、
どうやって良いのかがよくわからなくて悩んじゃって、
このコードを書くのに2日も掛かっちゃったんですよ。

using System;
using System.Collections.Generic;
using System.Text;
using System.Runtime.InteropServices;
using System.Threading;

namespace Win32Api_test
{
    class Program
    {
        [DllImport("User32.dll", CharSet = CharSet.Unicode)]
        static extern IntPtr FindWindow(string lpszClass, string lpszWindow);

        [DllImport("User32.dll", CharSet = CharSet.Unicode)]
        static extern IntPtr FindWindowEx(
            IntPtr hwndParent, IntPtr hwndChildAfter, string lpszClass, string lpszWindow);

        [DllImport("User32.dll")]
        static extern IntPtr GetWindow(IntPtr hWnd, Int32 uCmd);

        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = false)]
        static extern IntPtr SendMessage(IntPtr hWnd, UInt32 Msg, IntPtr wParam, String lParam);

        [return: MarshalAs(UnmanagedType.Bool)]
        [DllImport("user32.dll", SetLastError = true)]
        static extern bool PostMessage(IntPtr hWnd, UInt32 Msg, Int32 wParam, Int32 lParam);

        const uint WM_SETTEXT = 0x000C;
        const uint WM_LBUTTONDOWN = 0x201;
        const uint WM_LBUTTONUP = 0x202;

        const int GW_HWNDNEXT = 2;

        static void Main(string[] args)
        {
            // Market Speedのログインダイアログを探す
            IntPtr h = FindWindow(null, "Market Speed - ログイン");

            // ユーザーID入力欄に入力する
            IntPtr h2 = FindWindowEx(h, IntPtr.Zero, "Static", "ログインID");
            IntPtr h3 = GetWindow(h2, GW_HWNDNEXT);
            SendMessage(h3, WM_SETTEXT, IntPtr.Zero, "ゆーざーID");

            // パスワード入力欄に入力する
            IntPtr h4 = FindWindowEx(h, IntPtr.Zero, "Static", "パスワード");
            IntPtr h5 = GetWindow(h4, GW_HWNDNEXT);
            SendMessage(h5, WM_SETTEXT, IntPtr.Zero, "ぱすわーど");

            // "OK"ボタンを押下する
            IntPtr h6 = FindWindowEx(h, IntPtr.Zero, "Button", "OK");
            PostMessage(h6, WM_LBUTTONDOWN, 0, 0);
            PostMessage(h6, WM_LBUTTONUP, 0, 0);

            // ここでウェイトが必要 
            Thread.Sleep(1000);
        }
    }
}

Win32APIなんて触ったことの無い僕が動くものを作れたのは、
じゃんぬさんが「pinvoke.net見ればいいよ。」と書いていた質問掲示板のレスのおかげです(*´ヮ`*)

投稿日時 : 2008年2月5日 0:00

コメント

# [開発状況]近況……何も進んでいません(´・ω・`)ノシ 2008/02/28 0:58 酢酸のべとべと日記
[開発状況]近況……何も進んでいません(´・ω・`)ノシ

# re: [開発状況][C#]MarketSpeedの自動ログイン機能を作ってみた 2008/10/28 10:12 たか
これは、ログインの小さなウィンドウを手動で開いておかないといけないのでしょうか?

# re: [開発状況][C#]MarketSpeedの自動ログイン機能を作ってみた 2008/10/28 22:15 CH3COOH(酢酸)
>たかさん
もう随分前のエントリなので記憶違いもあるかもしれませんが、
「Market Speed - ログイン」という名前の付いたウィンドウを探して、
上記の処理を行いますので、小さなウィンドウが開いてる事が前提です。

確かMarketSpeedで情報を見ようとすると
ログインウィンドウが開いたはずですので、
実際に作ったアプリでは、
ショートカット→ログインウィンドウ開く→ログイン処理
で動かしていたと思います。

# re: [開発状況][C#]MarketSpeedの自動ログイン機能を作ってみた 2009/02/19 21:40
ありがとう

# re: [開発状況][C#]MarketSpeedの自動ログイン機能を作ってみた 2009/02/19 22:49 CH3COOH(酢酸)
どういたしまして

# re: [開発状況][C#]MarketSpeedの自動ログイン機能を作ってみた 2009/05/02 9:35 山田
助かりました。ありがとうございました。

# re: [開発状況][C#]MarketSpeedの自動ログイン機能を作ってみた 2009/08/14 15:55 ばくたす
非常に参考になりました!こちらのコードを参考にさせてもらい、アプリ自動起動→ログインボタンを自動に押下し、ログインウインドウを開く処理を追加で作成してみました。よろしければご参照ください。

Post Feedback

タイトル
名前
Url:
コメント