|
分類:[.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 スタイルを指定してください。
どうぞよろしくお願い致します。
長文失礼致しました。
|