C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[12]: アプリケーションを起動してキーストロークを送りかた


(過去ログ 33 を表示中)

[トピック内 17 記事 (1 - 17 表示)]  << 0 >>

■16066 / inTopicNo.1)  アプリケーションを起動してキーストロークを送りかた
  
□投稿者/ RJ (28回)-(2008/03/27(Thu) 17:18:48)

分類:[C#] 

アプリケーションを起動してキーストロークを送りかたがわかりません・・・
Visual Basic にはあるのですがc#にはないのですか?

Visual Basic コードのコピーDim ProcID As Integer
' Start the Calculator application, and store the process id.
ProcID = Shell("CALC.EXE", AppWinStyle.NormalFocus)
' Activate the Calculator application.
AppActivate(ProcID)
' Send the keystrokes to the Calculator application.
My.Computer.Keyboard.SendKeys("22", True)
My.Computer.Keyboard.SendKeys("*", True)
My.Computer.Keyboard.SendKeys("44", True)
My.Computer.Keyboard.SendKeys("=", True)
' The result is 22 * 44 = 968.

例としてWindowsアプリケーション上のボタンを押すとボタンに登録したキー(F-1などやEnterキー)がメモ帳で動くようにする

過去スレにキーボートの電キーを押すとアプリケーションの電卓のキーが押されるってのがありましたが
ちょいちがうんだよね・・・

僕の場合だとWindowsアプリケーション上のボタンを押すと別アプリケーションの電卓のキーが押されるって形になります
引用返信 編集キー/
■16068 / inTopicNo.2)  Re[1]: アプリケーションを起動してキーストロークを送りかた
□投稿者/ myugaru (60回)-(2008/03/27(Thu) 17:26:29)
myugaru さんの Web サイト
No16066 (RJ さん) に返信
んっとVB.NETで出来ることはC#に100%移植できますけど??

引用返信 編集キー/
■16069 / inTopicNo.3)  Re[2]: アプリケーションを起動してキーストロークを送りかた
□投稿者/ シャノン (346回)-(2008/03/27(Thu) 17:31:16)
No16068 (myugaru さん) に返信
> ■No16066 (RJ さん) に返信
> んっとVB.NETで出来ることはC#に100%移植できますけど??

どこまで踏み込むかにもよりますが(Windows APIにまで手を出せば100%でしょうが)、My クラスなんかは1対1で移植できるとは限りません。
引用返信 編集キー/
■16071 / inTopicNo.4)  Re[1]: アプリケーションを起動してキーストロークを送りかた
□投稿者/ シャノン (347回)-(2008/03/27(Thu) 17:32:23)
No16066 (RJ さん) に返信
> アプリケーションを起動してキーストロークを送りかたがわかりません・・・
> Visual Basic にはあるのですがc#にはないのですか?

Form の SendKeys が代わりに使えるでしょうか。
引用返信 編集キー/
■16073 / inTopicNo.5)  Re[2]: アプリケーションを起動してキーストロークを送りかた
□投稿者/ RJ (29回)-(2008/03/27(Thu) 17:58:29)
No16071 (シャノン さん) に返信
> ■No16066 (RJ さん) に返信
>>アプリケーションを起動してキーストロークを送りかたがわかりません・・・
>>Visual Basic にはあるのですがc#にはないのですか?
>
> Form の SendKeys が代わりに使えるでしょうか。

SendKeys これをつかってやってみます〜
引用返信 編集キー/
■16078 / inTopicNo.6)  Re[2]: アプリケーションを起動してキーストロークを送りかた
□投稿者/ RJ (30回)-(2008/03/27(Thu) 19:43:42)
No16071 (シャノン さん) に返信
> ■No16066 (RJ さん) に返信
>>アプリケーションを起動してキーストロークを送りかたがわかりません・・・
>>Visual Basic にはあるのですがc#にはないのですか?
>
> Form の SendKeys が代わりに使えるでしょうか。

同じアプリケーション上でボタンにキーを登録してデバッグなし開始では動作確認できました
ぼくが作ったコード(ボタンが2つあり1のボタンを押すと2のボタンにタブ移動し2のボタンが押されメモ帳が起動するようにしました)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button2_Click(object sender, EventArgs e)
{
System.Diagnostics.Process.Start("notepad");
}
private void button1_Click(object sender, EventArgs e)
{
// Send the enter key to the button, which raises the click
// event for the button. This works because the tab stop of
// the button is 0.
SendKeys.Send("{Tab}");
SendKeys.Send("{Enter}");
}
}
}

しかし
別のアプリケーション上では動作するまえにエラーでます・・・
サンプルコード(電卓を別アプリケーションとしてる)
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
[DllImport("USER32.DLL")]
public static extern IntPtr FindWindow(string lpClassName,string lpWindowName);
[DllImport("USER32.DLL")]
public static extern bool SetForegroundWindow(IntPtr hWnd);
private void button1_Click(object sender, EventArgs e)
{
IntPtr Handle = FindWindow("SciCalc", "Calculator");
if (Handle == IntPtr.Zero)
{
MessageBox.Show("Calculator is not running.");
return;
}
SetForegroundWindow(Handle);
SendKeys.SendWait("111");
SendKeys.SendWait("*");
SendKeys.SendWait("11");
SendKeys.SendWait("=");

どこかまちがっていますか?おしえてください。

引用返信 編集キー/
■16080 / inTopicNo.7)  Re[3]: アプリケーションを起動してキーストロークを送りかた
□投稿者/ 組込系の人 (6回)-(2008/03/27(Thu) 20:21:07)
No16078 (RJ さん) に返信
> ■No16071 (シャノン さん) に返信
>>■No16066 (RJ さん) に返信
> >>アプリケーションを起動してキーストロークを送りかたがわかりません・・・
> >>Visual Basic にはあるのですがc#にはないのですか?
>>
>>Form の SendKeys が代わりに使えるでしょうか。
>
> 同じアプリケーション上でボタンにキーを登録してデバッグなし開始では動作確認できました
> ぼくが作ったコード(ボタンが2つあり1のボタンを押すと2のボタンにタブ移動し2のボタンが押されメモ帳が起動するようにしました)
/************* 略 ********************/

申し訳ないですが中身見て無い状態で返信させてもらいます。
デバッグなし開始はこだわりでしょうか?





>
> しかし
> 別のアプリケーション上では動作するまえにエラーでます・・・
> サンプルコード(電卓を別アプリケーションとしてる)
/************* 省略 ********************/

コンパイルエラーでしょうか?実行時の何かの例外でしょうか?
もし実行中にクラッシュするのであれば、動くところまでで
一旦ブレークポイントを設定し、デバッグ実行してみることをお薦めします。
その後ステップ実行をして、問題の箇所を探りましょう。

>
> どこかまちがっていますか?おしえてください。
>


わからないところがある度にここで質問し、エラーが出るたびに他人に
デバッグをしてもらっていては、何時までたっても自分のためになりませんよ





引用返信 編集キー/
■16082 / inTopicNo.8)  Re[4]: アプリケーションを起動してキーストロークを送りかた
□投稿者/ RJ (31回)-(2008/03/27(Thu) 20:47:37)
No16080 (組込系の人 さん) に返信
> ■No16078 (RJ さん) に返信
>>■No16071 (シャノン さん) に返信
> >>■No16066 (RJ さん) に返信
>>>>アプリケーションを起動してキーストロークを送りかたがわかりません・・・
>>>>Visual Basic にはあるのですがc#にはないのですか?
> >>
> >>Form の SendKeys が代わりに使えるでしょうか。
>>
>>同じアプリケーション上でボタンにキーを登録してデバッグなし開始では動作確認できました
>>ぼくが作ったコード(ボタンが2つあり1のボタンを押すと2のボタンにタブ移動し2のボタンが押されメモ帳が起動するようにしました)
> /************* 略 ********************/
>
> 申し訳ないですが中身見て無い状態で返信させてもらいます。
> デバッグなし開始はこだわりでしょうか?
>
>
>
>
>
>>
>>しかし
>>別のアプリケーション上では動作するまえにエラーでます・・・
>>サンプルコード(電卓を別アプリケーションとしてる)
> /************* 省略 ********************/
>
> コンパイルエラーでしょうか?実行時の何かの例外でしょうか?
> もし実行中にクラッシュするのであれば、動くところまでで
> 一旦ブレークポイントを設定し、デバッグ実行してみることをお薦めします。
> その後ステップ実行をして、問題の箇所を探りましょう。
>
>>
>>どこかまちがっていますか?おしえてください。
>>
>
>
> わからないところがある度にここで質問し、エラーが出るたびに他人に
> デバッグをしてもらっていては、何時までたっても自分のためになりませんよ
>

同じアプリケーション上でボタンにキーを登録してデバッグありデバッグなし開始両方とも動作確認できました
ぼくが作ったコード(ボタンが2つあり1のボタンを押すと2のボタンにタブ移動し2のボタンが押されメモ帳が起動するようにしました)
しかし
サンプルコード(電卓を別アプリケーションとしてる)でデバッグありデバッグなし開始両方ともメッセージボックスにCalculator is not runningと表示されます
電卓を起動させてからやってもCalculator is not runningとでます
FindWindow("SciCalc", "Calculator");のSciCalcをcalcに変えてもダメでしたnotepadに変えても同じです

僕の電卓はcalc.exeですメモ帳はnotepad.exeです



引用返信 編集キー/
■16086 / inTopicNo.9)  Re[5]: アプリケーションを起動してキーストロークを送りかた
□投稿者/ 組込系の人 (7回)-(2008/03/27(Thu) 21:08:13)
No16082 (RJ さん) に返信

> 同じアプリケーション上でボタンにキーを登録してデバッグありデバッグなし開始両方とも動作確認できました
> ぼくが作ったコード(ボタンが2つあり1のボタンを押すと2のボタンにタブ移動し2のボタンが押されメモ帳が起動するようにしました)
> しかし
> サンプルコード(電卓を別アプリケーションとしてる)でデバッグありデバッグなし開始両方ともメッセージボックスにCalculator is not runningと表示されます
> 電卓を起動させてからやってもCalculator is not runningとでます
> FindWindow("SciCalc", "Calculator");のSciCalcをcalcに変えてもダメでしたnotepadに変えても同じです
>
> 僕の電卓はcalc.exeですメモ帳はnotepad.exeです
>
>

FindWindowをどの程度調べましたか?
1つ目の引数を自分の環境に合わせたのなら、2つ目の引数の意味はなんですか?


ちなみに、デバッグあり実行すること自体にはあまり意味は有りません。

引用返信 編集キー/
■16088 / inTopicNo.10)  Re[6]: アプリケーションを起動してキーストロークを送りかた
□投稿者/ RJ (32回)-(2008/03/27(Thu) 21:28:05)
No16086 (組込系の人 さん) に返信
> ■No16082 (RJ さん) に返信
>
>>同じアプリケーション上でボタンにキーを登録してデバッグありデバッグなし開始両方とも動作確認できました
>>ぼくが作ったコード(ボタンが2つあり1のボタンを押すと2のボタンにタブ移動し2のボタンが押されメモ帳が起動するようにしました)
>>しかし
>>サンプルコード(電卓を別アプリケーションとしてる)でデバッグありデバッグなし開始両方ともメッセージボックスにCalculator is not runningと表示されます
>>電卓を起動させてからやってもCalculator is not runningとでます
>>FindWindow("SciCalc", "Calculator");のSciCalcをcalcに変えてもダメでしたnotepadに変えても同じです
>>
>>僕の電卓はcalc.exeですメモ帳はnotepad.exeです
>>
>>
>
> FindWindowをどの程度調べましたか?
> 1つ目の引数を自分の環境に合わせたのなら、2つ目の引数の意味はなんですか?
>
>
> ちなみに、デバッグあり実行すること自体にはあまり意味は有りません。
>

FindWindow("class name", "window name");
ですか?
それとも
FindWindow("ファイル名(.exeがついてるやつ)", "ソフト名");
ですか?
引用返信 編集キー/
■16089 / inTopicNo.11)  Re[7]: アプリケーションを起動してキーストロークを送りかた
□投稿者/ RJ (33回)-(2008/03/27(Thu) 21:43:07)
No16088 (RJ さん) に返信
> ■No16086 (組込系の人 さん) に返信
>>■No16082 (RJ さん) に返信
>>
> >>同じアプリケーション上でボタンにキーを登録してデバッグありデバッグなし開始両方とも動作確認できました
> >>ぼくが作ったコード(ボタンが2つあり1のボタンを押すと2のボタンにタブ移動し2のボタンが押されメモ帳が起動するようにしました)
> >>しかし
> >>サンプルコード(電卓を別アプリケーションとしてる)でデバッグありデバッグなし開始両方ともメッセージボックスにCalculator is not runningと表示されます
> >>電卓を起動させてからやってもCalculator is not runningとでます
> >>FindWindow("SciCalc", "Calculator");のSciCalcをcalcに変えてもダメでしたnotepadに変えても同じです
> >>
> >>僕の電卓はcalc.exeですメモ帳はnotepad.exeです
> >>
> >>
>>
>>FindWindowをどの程度調べましたか?
>>1つ目の引数を自分の環境に合わせたのなら、2つ目の引数の意味はなんですか?
>>
>>
>>ちなみに、デバッグあり実行すること自体にはあまり意味は有りません。
>>
>
> FindWindow("class name", "window name");
> ですか?
> それとも
> FindWindow("ファイル名(.exeがついてるやつ)", "ソフト名");
> ですか?

正解は
FindWindow("class name", "window name");
        ↑       ↑
クラスに所属するウィンドウ ウィンドウに表示されてるタイトル
の方でした

FindWindow("SciCalc", "電卓");
で動作しました
でもなぜCalcじゃなくSciCalcなのかわかりません僕の電卓はcalc.exeなのに

引用返信 編集キー/
■16090 / inTopicNo.12)  Re[8]: アプリケーションを起動してキーストロークを送りかた
□投稿者/ RJ (34回)-(2008/03/27(Thu) 22:01:59)
No16089 (RJ さん) に返信
> ■No16088 (RJ さん) に返信
>>■No16086 (組込系の人 さん) に返信
> >>■No16082 (RJ さん) に返信
> >>
>>>>同じアプリケーション上でボタンにキーを登録してデバッグありデバッグなし開始両方とも動作確認できました
>>>>ぼくが作ったコード(ボタンが2つあり1のボタンを押すと2のボタンにタブ移動し2のボタンが押されメモ帳が起動するようにしました)
>>>>しかし
>>>>サンプルコード(電卓を別アプリケーションとしてる)でデバッグありデバッグなし開始両方ともメッセージボックスにCalculator is not runningと表示されます
>>>>電卓を起動させてからやってもCalculator is not runningとでます
>>>>FindWindow("SciCalc", "Calculator");のSciCalcをcalcに変えてもダメでしたnotepadに変えても同じです
>>>>
>>>>僕の電卓はcalc.exeですメモ帳はnotepad.exeです
>>>>
>>>>
> >>
> >>FindWindowをどの程度調べましたか?
> >>1つ目の引数を自分の環境に合わせたのなら、2つ目の引数の意味はなんですか?
> >>
> >>
> >>ちなみに、デバッグあり実行すること自体にはあまり意味は有りません。
> >>
>>
>>FindWindow("class name", "window name");
>>ですか?
>>それとも
>>FindWindow("ファイル名(.exeがついてるやつ)", "ソフト名");
>>ですか?
>
> 正解は
> FindWindow("class name", "window name");
>         ↑       ↑
> クラスに所属するウィンドウ ウィンドウに表示されてるタイトル
> の方でした
>
> FindWindow("SciCalc", "電卓");
> で動作しました
> でもなぜCalcじゃなくSciCalcなのかわかりません僕の電卓はcalc.exeなのに
>
メモ帳の方は
FindWindow("Notepad", "無題 - メモ帳");
でできました
解決済み
引用返信 編集キー/
■16094 / inTopicNo.13)  Re[8]: アプリケーションを起動してキーストロークを送りかた
□投稿者/ 組込系の人 (8回)-(2008/03/27(Thu) 22:46:14)
No16089 (RJ さん) に返信

> 正解は
> FindWindow("class name", "window name");
>         ↑       ↑
> クラスに所属するウィンドウ ウィンドウに表示されてるタイトル
> の方でした
>
> FindWindow("SciCalc", "電卓");
> で動作しました
> でもなぜCalcじゃなくSciCalcなのかわかりません僕の電卓はcalc.exeなのに
>

1つ目の引数にはクラスの名前を入れます。
calc.exeは実行ファイル名です。

というか、自分でclass nameと書いているじゃないですか^^;


解決済み
引用返信 編集キー/
■16097 / inTopicNo.14)  Re[9]: アプリケーションを起動してキーストロークを送りかた
□投稿者/ RJ (35回)-(2008/03/27(Thu) 23:34:27)
No16094 (組込系の人 さん) に返信
> ■No16089 (RJ さん) に返信
>
>>正解は
>>FindWindow("class name", "window name");
>>        ↑       ↑
>>クラスに所属するウィンドウ ウィンドウに表示されてるタイトル
>>の方でした
>>
>>FindWindow("SciCalc", "電卓");
>>で動作しました
>>でもなぜCalcじゃなくSciCalcなのかわかりません僕の電卓はcalc.exeなのに
>>
>
> 1つ目の引数にはクラスの名前を入れます。
> calc.exeは実行ファイル名です。
>
> というか、自分でclass nameと書いているじゃないですか^^;
>
>

実行ファイル名を入れるとクラスネームがわかるソフトまたはコードないかな?
引用返信 編集キー/
■16098 / inTopicNo.15)  Re[10]: アプリケーションを起動してキーストロークを送りかた
□投稿者/ RJ (36回)-(2008/03/27(Thu) 23:44:28)
 
解決済み
引用返信 編集キー/
■16099 / inTopicNo.16)  Re[11]: アプリケーションを起動してキーストロークを送りかた
□投稿者/ 通りすがっちゃった (7回)-(2008/03/28(Fri) 00:09:52)
No16098 (RJ さん) に返信
>実行ファイル名を入れるとクラスネームがわかるソフトまたはコードないかな?

Spy++
引用返信 編集キー/
■16105 / inTopicNo.17)  Re[12]: アプリケーションを起動してキーストロークを送りかた
□投稿者/ RJ (37回)-(2008/03/28(Fri) 01:20:10)
No16099 (通りすがっちゃった さん) に返信
> ■No16098 (RJ さん) に返信
> >実行ファイル名を入れるとクラスネームがわかるソフトまたはコードないかな?
>
> Spy++

visual studio.net 2003 プロフェッショナルの中にSpy++ソフトが入っていたので
visual c# 2008 express editionの外部ツールに登録しました

便利なツールおしえてくれてありがとう\(*´▽`*)/
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -