こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

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

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

投稿日時 - 2010-05-21 18:57:36

QNo.5911508

すぐに回答ほしいです

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

・メモ帳で「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を使わないのであれば、汎用的なアプリの作成ではなく、個別の機能として作成される事を勧めます。

投稿日時 - 2010-05-22 02:19:07

ANo.1

このQ&Aは役に立ちましたか?

28人が「このQ&Aが役に立った」と投票しています

回答(2)

ANo.2

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がアクティブになります。

力技すぎて汎用性も何もありませんが・・・ご参考までに

投稿日時 - 2010-05-24 12:12:19

あなたにオススメの質問