• ベストアンサー
  • すぐに回答を!

VB2008でほかのアプリケーションを操作したい

  • 質問No.5911508
  • 閲覧数1747
  • ありがとう数28
  • 気になる数0
  • 回答数2
  • コメント数0

お礼率 23% (7/30)

VB2008でほかのアプリケーションを操作したい
VBでButton1を押したらメモ帳で「ABC」と入力し新規保存させたり
プリンタドライバーの設定を変更したりという操作をボタン一発でできるプログラムを作ろうと思ったのですが、どの様なコードの記述をしたらいいのでしょうか?

質問者が選んだベストアンサー

  • 回答No.1
  • ベストアンサー

ベストアンサー率 69% (477/687)

・メモ帳で「ABC」と入力し新規保存
・プリンタドライバーの設定を変更

この操作は全く別物です。


SendKeysでキーストローク
http://dobon.net/vb/dotnet/vb6/sendkeys.html

この方法は、プログラム実行中にユーザが途中でキーボードを操作すると、思わぬ動きになってしまいます。

でもマルチに対応するなら、このようなキーストロークの送信しかありません。



思わぬ動きを嫌うのであれば、画面でオペレーションをしたように見せるには、キーボードの操作を直接アプリケーション内部のハンドルに送る必要があります。
それにはSendMessageというAPIを使用します。

そのSendMessageはどこにメッセージを送るのかを指定する引数があるのですが、汎用的な操作を行えるようにするのが目的となると、現実的な話では無くなります。

[特定のアプリにファイルを渡す方法]
http://okwave.jp/qa/q5877792.html
という質問でも答えたのですが、そちらを一読してください。

最近、探し方の質問もありました。、
[VB.NETで、Windows Vistaのスタートボタンを消すプログラム]
http://okwave.jp/qa/q5901553.html

一つのアプリケーションに、ハンドルは多数存在しています。


sendkeysを使わないのであれば、汎用的なアプリの作成ではなく、個別の機能として作成される事を勧めます。

その他の回答 (全1件)

  • 回答No.2

ベストアンサー率 63% (23/36)

SendKeyでの方法だけ補足しておきます。


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.windows.forms.sendkeys(VS.80).aspx
*
*
***/


break;
}
}
hwnd = GetWindow(hwnd, GW_HWNDNEXT);
}


この例ではTextBox1に別アプリケーションの名前の一部を入れることでアクティブにしています。
Ex)GoogleChrome → Google を入力し、Button1をクリックでGoogleChromeがアクティブになります。

力技すぎて汎用性も何もありませんが・・・ご参考までに
結果を報告する
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,600万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ