申し訳ありません。またお答えしていただいた方にはご迷惑をおかけしました。代理で書き込んでもらったので、質問の説明が足りませんでした。 もう一度、書かせていただきますと、

 あるEXE(親)が別EXE(子)を起動させ、その間親EXEは裏で生きたままで、子EXEの終了を監視し、終了したら親EXEをShowしています。しかし、子EXEが終了して親EXEに遷移するタイミングで「~EXEによりKernel32.dllに不正な処理が発生しました。問題が解決しなければ再起動してください。」というようなメッセージが出ることがあるのです。毎回出るわけではないし、リソースの不足も影響するようなのですが、はっきりした原因がつかめません。
使用しているAPI関数は
・OpenProcess ・GetExitCodeProcess・CloseHandle の3つです。
 
 次の質問の所に実際のソースを書いてみます。この方法はマイクロソフトのサポート技術情報にも出ていたんですが、VB4のサンプルとして書かれていたのが気になってます。よろしくお願いします。

A 回答 (1件)

管理者より:


同等の質問があるのでそちらをご参照下さい

参考URL:http://www.okweb.ne.jp/kotaeru.php3?q=134818
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aと関連する良く見られている質問

QMDI:親フォームと子フォームを別EXEで実装するには

MDIでアプリケーションを作成したいと思っています。
その時に子フォームを親フォームとは別EXEで作りたいと思っています。
例えば
親フォームのボタンを押すと、子フォームEXEが起動し、親フォーム内に表示される。
このようなことは出来ますか?
出来るのでしたら、どうしたらよろしいでしょうか。
教えてください。

Aベストアンサー

手順的には
http://okweb.jp/kotaeru.php3?q=102408の#2
だと思います。
キーワードは「API関数:SetParent」
このAPIで、別EXEでもなんでも、内部に取り込むだけはできます。

しかしMDIを実現するためには、かなり制御を組み入れないといけません。
参考URLでも述べているように、最大領域だけならず終了時処理など、それ以外にも想像しえない本来のMDIとして用意されている標準制御を、実現しなければなりません。

かな~り手間だと思います。

Qすぐにexeファイルが終了しない。

VB5(SP3)でアプリケーション(exeファイル)を作成したのですが、
終了させても、数秒間アプリケーションが作動しているようなのです。
(「Ctrl」+「Alt」+「Delete」で「アプリケーションの強制終了」を表示させて確認しています)

Win98でこの現象が発生し、Win95だとすぐに終了してくれます。
(どちらとも、同じスペックのPCです)

ちなみに、終了させているプログラムの中身は下記のとおりです。

Private Sub 終了_Click()

  (処理)
  Unload Me
  End

End Sub

すぐに終了させたいのですが、お手上げ状態です。

ご指導のほど、宜しくお願い致します。

Aベストアンサー

どっちかというと、UnloadせずにEndしたほうが、効率的に終了します。

それでも終了しないなら、確認すべきことは、いずれかのフォームのUnloadイベントか、QuerryUnloadイベントにCancel = 1とか入ってないかということです。
これが入ってると、シャットダウンもできません。

同じスペックでOSだけ違うとのことですが、Windowsは使っていると次第にわけのわからんエラーに見舞われるので、OSの違いによる差はないと思ったほうがいいでしょう。
もちろん、OS依存のAPIなどを使っている場合は別ですが。

両方のOSの総起動時間などがわかれば、たいだいで良いから教えてください。

Qexeファイルを終了させない。

vb.netで作成したEXEファイルを終了させないアプリにしたいと考えています。
そのため、タスクマネージャーの”プロセスの終了”でもそのアプリが終了しないようにしたいのですがそれは可能でしょうか?

Aベストアンサー

>そのため、タスクマネージャーの”プロセスの終了”でもそのアプリが終了しないようにしたいのですがそれは可能でしょうか?

不可能。

だけど「終了させようとすると、自分自身をもう一つ起動させてから終了する」って言うアプリは書ける。

書けるけど、それやると「Windowsがシャットダウンできなくなる」ので、やらない方が良い。

Q使用しているEXEファイルから、別のEXEファイルをクローズする方法

今現在簡単なプログラムを作成しておりまして、
TEST1.exeとTEST2.exeの二つのプログラムがあります。

TEST1.exeとTEST2.exeの二つのアプリケーションを起動
し、TEST1.exeが終了したら、TEST2.exeのアプリケー
ションも自動的に終了するようにしたいのですけど、何か
やり方ってありますでしょうか?

作成しているソフトはVB6.0/Win2000Proです。

よろしくお願いします。

Aベストアンサー

 CreateProcessプロセスというAPIで起動し
 TerminateProcessプロセスというAPIで終了させます

 以下に例を上げておきます。


'CreateProcess
'新しいプロセスを作り、実行ファイルを実行する。
'
'BOOL CreateProcess( LPCTSTR lpApplicationName,
' // pointer to name of executable module
'
' LPTSTR lpCommandLine,
' // pointer to command line string
'
' LPSECURITY_ATTRIBUTES lpProcessAttributes,
' // pointer to process security attributes
'
' LPSECURITY_ATTRIBUTES lpThreadAttributes,
' // pointer to thread security attributes
'
' BOOL bInheritHandles,
' // handle inheritance flag
'
' DWORD dwCreationFlags,
' // creation flags
'
' LPVOID lpEnvironment,
' // pointer to new environment block
'
' LPCTSTR lpCurrentDirectory,
' // pointer to current directory name
'
' LPSTARTUPINFO lpStartupInfo,
' // pointer to STARTUPINFO
'
' LPPROCESS_INFORMATION lpProcessInformation
' // pointer to PROCESS_INFORMATION
'
' );
'

Private Type PROCESS_INFORMATION

hProcess As Long
hThread As Long
dwProcessId As Long
dwThreadId As Long

End Type

Private Type STARTUPINFO

cb As Long
lpReserved As String
lpDesktop As String
lpTitle As String
dwX As Long
dwY As Long
dwXSize As Long
dwYSize As Long
dwXCountChars As Long
dwYCountChars As Long
dwFillAttribute As Long
dwFlags As Long
wShowWindow As Integer
cbReserved2 As Integer
lpReserved2 As Long
hStdInput As Long
hStdOutput As Long
hStdError As Long

End Type

Private Declare Function CreateProcess Lib "kernel32" Alias "CreateProcessA" (ByVal lpApplicationName As String, ByVal _
lpCommandLine As String, lpProcessAttributes As Any, lpThreadAttributes As Any, ByVal bInheritHandles As Long, _
ByVal dwCreationFlags As Long, lpEnvironment As Any, ByVal lpCurrentDriectory As String, lpStartupInfo As STARTUPINFO, _
lpProcessInformation As PROCESS_INFORMATION) As Long


Private Declare Function OpenProcess Lib "kernel32.dll" (ByVal dwAccess As Long, ByVal fInherit As Integer, ByVal hObject _
As Long) As Long

Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long


Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long


Const SYNCHRONIZE = 1048576
Const NORMAL_PRIORITY_CLASS = &H20&

Dim pInfo As PROCESS_INFORMATION
Dim sInfo As STARTUPINFO
Dim sNull As String


Private Sub Command1_Click()
Dim success&
success& = CreateProcess(sNull, "Calc.exe", ByVal 0&, ByVal 0&, 1&, NORMAL_PRIORITY_CLASS, ByVal 0&, sNull, sInfo, pInfo)

End Sub

Private Sub Command2_Click()
Dim ret&
ret& = TerminateProcess(pInfo.hProcess, 0&)
ret& = CloseHandle(pInfo.hThread)
ret& = CloseHandle(pInfo.hProcess)

End Sub

 CreateProcessプロセスというAPIで起動し
 TerminateProcessプロセスというAPIで終了させます

 以下に例を上げておきます。


'CreateProcess
'新しいプロセスを作り、実行ファイルを実行する。
'
'BOOL CreateProcess( LPCTSTR lpApplicationName,
' // pointer to name of executable module
'
' LPTSTR lpCommandLine,
' // pointer to command line string
'
' LPSECURITY_ATTRIBUTES lpProcessAttributes,
' // pointer to process security attributes
'
' LPSEC...続きを読む

QShellコマンドで別のexeを起動するとフォーカスが別exeにいかない

2本のEXE(AとB)があって、

AからBを呼び出して、Bの終了ボタンを
押すとAに戻るようなプログラムがあります。

Bを最前面にして起動しているのですが、
Bにフォーカスがいってくれません。
(Aに残ったままになっている?)

ちなみにAもBもウィンドウスタイルは、
青いバーが出ている状態(動かせる状態)です。

Bが起動している間、Aはその後ろでまっている
ようなイメージです。

どうやったらフォーカスを渡すことが
できるでしょうか?

<条件>
Bのプログラムは修正することができません。
Aのプログラムは自由に修正できます。

どなたか教えて下さい。

Aベストアンサー

http://www.ops.dti.ne.jp/~allergy/vb/vbvba.html#exec

こちらを参考にしてみて下さい。


このカテゴリの人気Q&Aランキング

おすすめ情報