- PR -

アクティブ・アプリケーションに文字列を書き込む

1
投稿者投稿内容
鎌田
常連さん
会議室デビュー日: 2003/09/23
投稿数: 45
投稿日時: 2006-04-18 10:40
C#で作るアプリケーションから任意のアクティブ・アプリケーションに文字列を書き込みたいのですが、.NETではどのように行えばよいのでしょうか。

Excelがアクティブならそのアクティブセルへ、ユーザー作成のアプリケーションがアクティブならそのカーソルのあるテキストボックスへ、といった具合です。

GetActiveWindowやSendMessegeの代わりに使える機能があるでしょうか。
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-04-18 10:57
引用:

鎌田さんの書き込み (2006-04-18 10:40) より:

C#で作るアプリケーションから任意のアクティブ・アプリケーションに文字列を書き込みたいのですが、.NETではどのように行えばよいのでしょうか。



.net の管理下にいないウインドウを操作するなら
今までどおり WindowsAPI に頼らないと実現できません。
ということで、

引用:

GetActiveWindowやSendMessegeの代わりに使える機能があるでしょうか。


を DllImport して呼んであげてください。
鎌田
常連さん
会議室デビュー日: 2003/09/23
投稿数: 45
投稿日時: 2006-04-18 11:02
>.net の管理下にいないウインドウを操作するなら
>今までどおり WindowsAPI に頼らないと実現できません。

そうですか。ありがとございました。
...終わってしまった。
じゃんぬねっと
ぬし
会議室デビュー日: 2004/12/22
投稿数: 7811
お住まい・勤務地: 愛知県名古屋市
投稿日時: 2006-04-18 11:10
引用:

鎌田さんの書き込み (2006-04-18 10:40) より:

Excelがアクティブならそのアクティブセルへ、ユーザー作成のアプリケーションがアクティブならそのカーソルのあるテキストボックスへ、といった具合です。


Excel に関してならば、Windows API でなくても可能ですが...
その他のアプリケーションも入り口さえ用意してくれれば、というところですね。

特化しても仕方がないですけどね。(;^-^)

_________________
C# と VB.NET の入門サイト
じゃんぬねっと日誌
かるあ
ぬし
会議室デビュー日: 2003/11/16
投稿数: 1190
お住まい・勤務地: センガワ→ムサシノ
投稿日時: 2006-04-18 11:15
引用:

鎌田さんの書き込み (2006-04-18 11:02) より:

...終わってしまった。


ん?APIが使えない環境なんですか?
何かでラップして・・・って意味無いな・・・
鎌田
常連さん
会議室デビュー日: 2003/09/23
投稿数: 45
投稿日時: 2006-04-18 11:28
>ん?APIが使えない環境なんですか?

いえ、使えます。
"終わった"は、かるあさんの回答で .NETネイティブには代替品なし でファイナルアンサーのようでしたので、このスレも1発目の回答で"終了〜"かと。

GetForgroundWindowからシコシコやります。
とっちゃん
大ベテラン
会議室デビュー日: 2005/07/19
投稿数: 203
投稿日時: 2006-04-18 12:21
とっちゃんです。

文字列が英数字&記号(平たく言えば、1キーとして送りつけることが可能なもの)なら、SendKeys クラスを使えばいいのでは?

日本語を含む「文字列」という場合は、ダメですけどね(^^;

元々「文字列」を送る標準的な手法は存在していないので、やり方としては

  1. キーボードメッセージを使ったエミュレーション(基本は英数字のみ)
  2. クリップボードを経由した貼り付け
  3. WM_CHARで送りつける
  4. IMEのごとく変換文字列を送りつける

というあたりが、誰でも受け付けてくれそうな方法のように思います。
ただ、WM_CHAR 以降は、しゃれにならないような気がしなくもない(^^;
_________________
// とっちゃん(高萩 俊行)@わんくま同盟
// とっちゃん’Blog
// MS-MVP for Developer Tools - Visual C++
// WindowsInstallerの話題はhttp://www.freeml.com/msiまで
鎌田
常連さん
会議室デビュー日: 2003/09/23
投稿数: 45
投稿日時: 2006-04-18 15:23
ACCESS VBAで痛い目にあった経験からSendKeyは除外していましたが、一番手軽なので少し試してみました。

コードはForm1にTimerを配置して、5秒ごとに SendKeys.Send("0.1"); を発行するだけのもの。

Excel,Word,電卓,VBアプリケーションとキー送信を受けるアプリケーションを起動していおて、デバッグ開始。

適当にExcel,Word,電卓,VBアプリケーションを前面に切り替えながら、約5秒間隔で0.1を受け続けたところ、まあなんとか0.1として受けている様子です。
SendKeysなので当然といえば当然ですが、受け側アプリケーションでユーザーがしている動作(WORDの場合、ENTERキーで仮名漢字変換を確定)によっては0.だけで切れたりしますので、エンドユーザーが使い方を制限できるか確認してみます。
1

スキルアップ/キャリアアップ(JOB@IT)