- PR -

キーボードの自動入力について[C#]

投稿者投稿内容
シゲル
常連さん
会議室デビュー日: 2004/04/03
投稿数: 27
投稿日時: 2004-04-06 16:33
C#で、フォーム内のボタンをクリックすると、
自動的に(システム的に)[ctrl+c]を押下するという処理をしたいのですが、
どのようにすればよいかわかりません。

もし、ご存知の方がいれば、教えてください。


Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-06 16:49
 プラットフォームSDKの、「SendInput」を参考にしてください。もし、MSDN 2003年2月がインストールされているなら、次の行をコピーして、MSDNの窓にペースト。
ms-help://MS.MSDNQTR.2003FEB.1041/jpwinui/html/_win32_sendinput.htm

 MSDN Onlineでは、VisualStudioの機能としてのSendInputが検索され、プラットフォームSDKからは出てきませんでした?!
todo
ぬし
会議室デビュー日: 2003/07/23
投稿数: 682
投稿日時: 2004-04-06 17:09
クリップボードにコピーしたいのであれば、
System.Windows.Forms.Clipboardクラスはどうでしょう。
シゲル
常連さん
会議室デビュー日: 2004/04/03
投稿数: 27
投稿日時: 2004-04-06 18:20
Jittaさま

>プラットフォームSDKの、「SendInput」を参考にしてください。
>もし、MSDN 2003年2月がインストールされているなら

残念ながらインストールされていません。
今ダウンロードをしていますが、結構時間がかかりそうです。
できれば詳しく教えていただけると助かります。

あと、今、SendKeys.Send("^c");を試してみたのですが、
これだと、[ctrl+c]が効いたり効かなかったりするようです。
なぜでしょう???

-----------------------
todoさま

>クリップボードにコピーしたいのであれば、
>System.Windows.Forms.Clipboardクラスはどうでしょう。

単純にクリップボードにコピーしたいわけではないので・・・






ant
常連さん
会議室デビュー日: 2004/03/24
投稿数: 44
投稿日時: 2004-04-07 00:51
SendInput関数は何も”MSDN 2003年2月”しか載っていない関数ではありません。
少々古いMSDNでも載っているはずです。
ちなみに、英語版なら下記にあります。

http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/winui/windowsuserinterface/userinput/keyboardinput/keyboardinputreference/keyboardinputfunctions/sendinput.asp


> これだと、[ctrl+c]が効いたり効かなかったりするようです。

Sendメソッドは内部的には、SetKeyboardState関数を呼び出していますが、
恐らく、メッセージキューにあるメッセージ処理の進度によって
次の動作に影響しているのでしょう。
一度SendWaitメソッドを使用してみはどうでしょうか?
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2004-04-07 08:39
引用:

シゲルさんの書き込み (2004-04-06 18:20) より:

>プラットフォームSDKの、「SendInput」を参考にしてください。
>もし、MSDN 2003年2月がインストールされているなら

残念ながらインストールされていません。


 え〜っと、その下のURIが、MSDN 2003/4用だっただけで、プラットフォームSDKなので、他のバージョンでも載っています。そのために、『プラットフォームSDKの「SendInput」を参考』と書いているのですが…
シゲル
常連さん
会議室デビュー日: 2004/04/03
投稿数: 27
投稿日時: 2004-04-07 14:26
>> これだと、[ctrl+c]が効いたり効かなかったりするようです。
>
>Sendメソッドは内部的には、SetKeyboardState関数を呼び出していますが、
>恐らく、メッセージキューにあるメッセージ処理の進度によって
>次の動作に影響しているのでしょう。
>一度SendWaitメソッドを使用してみはどうでしょうか?

実はSendでだめだとわかったときに、
すぐにSendWaitも試したのですが、
やはり同じように効いたり、効かなかったりでした。

SendWaitした後で、別のウィンドウにフォーカスが切り替わるような処理なので、
それがいけないのかと、SendWaitの後の処理をすべてなくし、
SendWaitを最後の処理にして試してみたのですが、
やはり同じように[ctrl+c]は効いたり効かなかったりでした。

さっぱり理由がわかりません。

ぼくの使い方が間違っているのでしょうか?
これって単純に
SendKeys.SendWait("^c");
とすればよいのですよね?

それとも他に何か宣言したりする必要や
コツのようなものがあるのでしょうか?

非常に困ってしまいました。

それで、SendInputの方も試してみようと思い、
antさんに教えてもらった英語版を見たのですが、
これがまたよくわかりません・・・
もしご存知でしたら、使い方を詳しくご教授いただけるとたすかります。







シゲル
常連さん
会議室デビュー日: 2004/04/03
投稿数: 27
投稿日時: 2004-04-07 14:43
あと、不思議なことに、
アプリケーションを立ち上げた最初のSendWait("^c")の処理だけは、
必ずきちんと[CTRL+C]がききます。
しかし、その後は、何度か繰り返さないと効かないことが
ほとんどで、時々一度で効いたりすることもあります。

これはなぜでしょう?
起動直後の最初の処理と2回目以降の処理には
何か違いがあるのでしょうか?



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