例えばabc.exeというアプリがあったとします。
このアプリには文字列を入力するフォームがいくつかあり、
このアプリのフォームに文字を入れるプログラムを作成したいと思います。
まずはabc.exeをアクティブにし、
アプリのフォームの上から順に配列に代入された文字列の入力をしたいと思います。
つまり、
abc.exeの一番上のフォームにはmoji[0]にある文字列
二番目のフォームにはmoji[1]にある文字列
三番目のフォームにはmoji[2]にある文字列
という形です、こういったことは可能でしょうか?
SendKeys.SendWaitというのはこういうケースでも使えるのでしょうか?
もし可能であれば解説ページ、コードの例をご教示頂ければ幸いです。
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
補足説明の方ありがとうございます。
かなり力技になってしまいますが・・・よければご参考までに
まず市販ソフトということなのでTabIndexが設定されてると思います。
そこで、Button押下後Tabキーと入力文字キーを送ってやります。
下記にサンプルを記述します。
using System.Runtime.InteropServices;
[DllImport("user32.dll")]
extern static IntPtr GetWindow(IntPtr hWnd, uint uCmd);
[DllImport("user32.dll")]
extern static IntPtr GetForegroundWindow();
[DllImport("user32.dll")]
extern static int GetWindowText(IntPtr hWnd, StringBuilder lpStr, int nMaxCount);
[DllImport("user32.dll")]
extern static bool IsWindowVisible(IntPtr hWnd);
[DllImport("user32.dll")]
extern static bool SetForegroundWindow(IntPtr hWnd);
//ButtonClickイベント
const int GW_HWNDNEXT = 2;
StringBuilder sb = new StringBuilder(100);
IntPtr hwnd = GetForegroundWindow();
while (hwnd != IntPtr.Zero)
{
if (IsWindowVisible(hwnd))
{
GetWindowText(hwnd, sb, sb.Capacity); // タイトルバー文字列を取得
if (sb.ToString().IndexOf(textBox1.Text) != -1)
{
SetForegroundWindow(hwnd); // アクティブ
/***
*ここにSendKeys.SendWaitでキーを送ります。
*ラジオボタンがある場合Tabキーでラジオボタンをアクティブにし「↑」「↓」ボタンで変更
*チェックボックスの場合スペースキーでOnOff切り替え可能
*下記にキーコードが記述されています。
*MSDN SendKeys:http://msdn.microsoft.com/ja-jp/library/system.w …
*
*
***/
break;
}
}
hwnd = GetWindow(hwnd, GW_HWNDNEXT);
}
この例ではTextBox1に別アプリケーションの名前の一部を入れることでアクティブにしています。
Ex)GoogleChrome → Google を入力し、Button1をクリックでGoogleChromeがアクティブになります。
力技すぎて汎用性も何もありませんが・・・ご参考までに
ご丁寧な解説に感謝します。
さっそく実行しまして、自分の好み通りに設定したところ
面白いようにうまくいきました。
助かりました、本当にありがとうございます。
また機会がありましたらよろしくお願いします。
No.2
- 回答日時:
申し訳ありません。
説明を履き違えていましたね。ちなみに補足ですが
>早速本題ですが、キーロガーの様なソフトでいいんですよね・・・?
これは別にキーロガー自体を指しているわけではありません。キーロガーの様な入力されたものを監視するということを指して記述しました。
監視するということは入力されたものが取得できるということです。
>アプリのフォームの上から順に配列に代入された文字列の入力をした
いと思います。
このことからTextBoxか何かに文字を入れ配列に代入していると判断しました。そのことから「キーで入力した値を[文字を入れるプログラム(a)]のオブジェクトに格納する」と推測していました。
>シンプルに言うとaとbのアプリがありまして、bのアプリ内の変数に宣言されている文字列をaのアプリの文字入力フォームにボタン一つで入力するというものです。
正しい表現ではないですね。この書き方だとなんとなくは伝わりますが不明確な部分が多いです。
「b内で宣言した変数に代入されている文字列を、aの文字入力フォームに、aについているボタンで格納する。」
又は、
「b内で宣言した変数に代入されている文字列を、aの文字入力フォームに、bについているボタンで格納する。」
かどちらかですか?それとも違いますでしょうか?
ちなみにaは自作ソフトというのは分かりますがbはどうなのでしょうか?
補足宜しくお願いします。
この回答への補足
rk_les様
度々のご回答に感謝します。
説明不足で申し訳ありません。
「b内で宣言した変数に代入されている文字列を、aの文字入力フォームに、bについているボタンで格納する。」というのが正しいです。
ちなみにbが自作ソフトでaが市販のソフトです、
市販のソフトの構成が複雑なため、入力の手間を省くために考えたのがbのソフトです。
お時間のある時にでもアドバイス頂ければ幸いです
よろしくお願いします。
No.1
- 回答日時:
こんにちは。
早速本題ですが、キーロガーの様なソフトでいいんですよね・・・?
このようなソフトではグローバルフックをするのが一般的です。
試してはいませんがSendKeyでも出来るとは思います・・・がかなり面倒だとおもいます。
http://homepage1.nifty.com/MADIA/vc/vc_bbs/20050 …
上記のサイトが非常に参考になると思います。
ご参考までに
この回答への補足
お返事ありがとうございます。
キーロガーとは違って、キーボード入力内容やマウスの動き等を記録する必要はございません。
私の説明が分かりにくいので申し訳ありませんが
シンプルに言うとaとbのアプリがありまして、bのアプリ内の変数に宣言されている文字列をaのアプリの文字入力フォームにボタン一つで入力するというものです。
他のアプリを動かすアプリということです
よろしくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- JavaScript フォームが空欄の時にフォームの外をクリックすると、エラーが出るコードを調べています。 1 2023/06/25 11:51
- Java Javaの問題なのですが、「3文字以上の英数字文字列を入力し、文字列の中に文字(9)が出てくるまでの 1 2023/06/06 18:55
- Access(アクセス) capeofdragonと申します。 Access2016を使っております。 あるフォームがあり、テ 2 2022/09/09 13:18
- JavaScript Javascriptが機能せず原因が分からないので教えて頂きたいです 3 2023/06/04 14:50
- Visual Basic(VBA) エクセルVBAについて 2 2023/01/31 16:21
- C言語・C++・C# C#の問題です。 文字列型の配列 s[100] にキーボードから入力された100文字以内の文字列(単 2 2022/06/22 15:18
- Excel(エクセル) Excel 複数列のある文字を優先して1列に表示したいです 2 2022/12/03 12:07
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- C言語・C++・C# C#テキストボックスの文字を配列にいれてその後表示する 4 2022/07/17 04:47
- その他(プログラミング・Web制作) プログラミング pythonの問題について 2 2022/04/19 00:41
このQ&Aを見た人はこんなQ&Aも見ています
-
賃貸で可能な古民家風レトロな部屋作りのコツ!改めて知る畳の高い機能性と魅力も紹介
畳の部屋を雰囲気のよい部屋に仕上げたい!賃貸住宅でもできる古民家風のレトロな部屋作りのコツを伺った。
-
別のアプリケーションのテキストフィールドに入力する方法
Visual Basic(VBA)
-
C#で自分のウインド・ハンドルを取得するにはどうすればよいのでしょうか
C言語・C++・C#
-
他のウィンドウのボタンを自動的に押したい
C言語・C++・C#
-
-
4
【sendkeysメソッドが動かずに苦慮しております】
Visual Basic(VBA)
-
5
プロセスIDからウィンドウハンドルを取得する方法
C言語・C++・C#
-
6
C# 別なフォームへ値を渡す (初心者です)
その他(プログラミング・Web制作)
-
7
自作アプリからAPIで他のアプリとデータやり取り
その他(プログラミング・Web制作)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
nullと""、\\0とEOFの違いにつ...
-
C#でstringをポインタとして渡す
-
アルファベットをカウント、
-
binaryに対して正規表現を適用...
-
Shift_JIS(16進)を文字に変換す...
-
sprintf関数での文字列変換につ...
-
TCL言語で文字列検索方法を教え...
-
char型配列の最大要素数
-
C言語についてです学籍番号、名...
-
シリアル通信で0x00を送信した...
-
[C++]WCHARの1文字目しか表示で...
-
VBを2008を用いてCSVを取り込む...
-
C++で入力した文字列から数字を...
-
C言語の勉強しています。すみま...
-
ソースコードの間違い (C言語)
-
%dなどの違い
-
NUMERICチェック
-
文字列型の一般的な変数名は?
-
セグメントエラー
-
C言語 配列の長さの上限
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
プログラムによく出てくるst...
-
nullと""、\\0とEOFの違いにつ...
-
TCL言語で文字列検索方法を教え...
-
C#でstringをポインタとして渡す
-
C++で入力した文字列から数字を...
-
%dなどの違い
-
WSH(VBS)でJSONの文字列を読み...
-
16進数を2文字ずつ配列に格納し...
-
シリアル通信で0x00を送信した...
-
_tcscpy_s(wcscpy_s)の第二引数...
-
構造体→文字列→構造体 をする方法
-
VBA-DLLの引数受け渡しについて
-
[C++]WCHARの1文字目しか表示で...
-
数字の入った配列をファイルへ...
-
VB6.0でのバイナリデータの扱い...
-
引用符と二重引用符
-
こんなことって可能なのですか...
-
char型配列の最大要素数
-
sprintf関数について教えて下さ...
-
C言語の課題で困っています;
おすすめ情報