| 分類:[.NET 全般]
お世話になります。 一度送信したと思ったのですが、反映されていなかったので、もし二重に投稿していたら大変すみません。 表題の件について質問させて下さい。
開発環境 OS:2000 Pro VB.Net:2003 Office Access:2003
日中Office Accessでユーザーが作業している後ろで、コンソールファイルを動かします。 コンソールファイルは atコマンドでスケジュール登録しております。
コンソール部分の作業が終わると、終了メッセージボックスを上げたいのですが 以下の方法で挫折し続けています。 改良点や他の方法などのアドバイス、もしくは引導を渡して頂けると、大変ありがたいです。
Module Module1 Declare Auto Sub MessageBoxW Lib "user32.dll" ( _ ByVal hWnd As Long, _ <MarshalAs(UnmanagedType.LPWStr)> ByVal lpText As String, _ <MarshalAs(UnmanagedType.LPWStr)> ByVal lpCaption As String, _ ByVal uType As Integer)
Public Declare Function FindWindowA Lib "user32" (ByVal cnm As String, ByVal cap As String) As Long
Sub Main() '<API MessageBoxW> MessageBoxW(0, "終わりました", "タイトルです", 0) '----■方法1
'<API FindWinow + MessageBoxW> Dim hWnd As Long hWnd = FindWindowA(vbNullString, "Microsoft Access") MessageBoxW(hWnd, "終わりました", "タイトルです", 0) '----■方法2
'<Dos窓> Console.WriteLine("終了しました。閉じてください")'----■方法3
'<WindowForm> Dim frm As frmMsg = New frmMsg frm.Show() '----■方法4 frm.ShowDialog() '----■方法5 frm = Nothing End Sub End Module
■1 API MessageBoxW 結果:何も起こりませんでした。
■2 API FindWinow + MessageBoxW 結果:デバッガが立ち上がり、エラーメッセージが表示されます
「System.NullreferenceExceptionのハンドルされていない例外が ○○.exeで発生しました。 追加情報:オブジェクト参照がオブジェクト インスタンスに設定されていません。」 となります。hWndには17桁の数字が入っていました。
すみません、APIに無知なのですが、MessageBoxWの ByVal hWnd As Long(オーナーウィンドウのハンドルを指定します。0 (NULL) を指定した場合、 メッセージボックスはオーナーウィンドウを持ちません)
は、この場合、 コンソールファイルはウィンドウを持たないので、そのままメッセージを出せないが、開いている画面(Access) のWindowの番号をFindWindowで指定すると、Accessからメッセージが上がったように見える、という理解は 間違っておりますでしょうか。
■3 DOS窓 結果:何も起こっていないように見えます。
一瞬書き込まれているのかもしれませんが、ユーザー操作で窓を閉じる事ができる方法がありましたら どうぞご指導お願い致します。
■4 WindowFormを作成して、Show 結果:何も起こりません。
■5 WindowFormを作成して、ShowDialog 結果:デバッガが立ち上がり、エラーメッセージが表示されます。
System.InvalidOperationException' のハンドルされていない例外がsystem.windows.forms.dllで発生しました。 追加情報:アプリケーションが UserInteractive モードで実行されていないときに、モーダル ダイアログまたは フォームを表示することは有効な操作ではありません。サービス アプリケーションからの通知を表示するには、 ServiceNotification または DefaultDesktopOnly スタイルを指定してください。
どうぞよろしくお願い致します。 長文失礼致しました。 |