2017-07-13 12 views
1

おはよう、 自動ログオフ機能を備えたvb6プログラムを作成しました。私はAPIを使用し、それは正常に動作しますが、mdiChildフォームのみで動作します。フォームがモーダルフォームで読み込まれると、タイマーは停止します。私は自分のコードを1行ずつシミュレートしようとしました。そして、 "Form1.show vbmodal"でコードが停止することがわかりました。 vbmodalとしてロードされたフォームでもタイマーを続けるにはどうすればよいですか?どんな助けもありがとう。前もって感謝します。 ところで、ここに私のコードは次のとおりです。あなたはモーダルダイアログとして期待しているものをVBModalフォームのロード時にAPIタイマーが停止する

Private Declare Function GetQueueStatus Lib "user32.dll" (ByVal fuFlags As Long) As Long 
'API For Inactivity Monitoring SMQ 
Private Const QS_KEY = &H1 
Private Const QS_MOUSEMOVE = &H2 
Private Const QS_MOUSEBUTTON = &H4 
Private Const QS_TIMER = &H10 
Private Const QS_MOUSE = (QS_MOUSEMOVE Or QS_MOUSEBUTTON) 
Private Const QS_INPUT = (QS_MOUSE Or QS_KEY) 
Private Const QS_ALLEVENTS = (QS_MOUSE Or QS_KEY Or QS_TIMER) 

Public Sub CheckInputIdle(ByVal TimeOut As Long) 

Dim lTimer As Long 

lTimer=Timer 

Do While gCancelAutoLogOff = False 
    DoEvents 

    If GetQueueStatus(QS_INPUT) Then 
     lTimer = Timer 
    End If 

    If Timer - lTimer >= TimeOut Then Exit Do 
Loop 
If gCancelAutoLogOff = False Then 
    gCancelAutoLogOff = True 
    MainForm.Logoff 
End If 
End Sub 

答えて

2

かなりわからない、それがクローズされるまでVisual Basic Concepts: Modal and Modeless Dialog Boxesから...実行しているから任意のコードをブロックします:

Aモーダル をアプリケーションの残りの部分と続けて使用するには、ダイアログボックスを閉じて(非表示または非表示に)する必要があります。

フォームがモーダルとして表示される場合、ダイアログボックスが閉じられるまで、表示する方法次のコードは 実行されません。

タイマーを発動するには、モーダルフォームを削除して、別の解決策を選択する必要があります。

+0

ありがとうC-Pound Guru – codesdozer

+0

モーダルフォームが読み込まれるたびにAPI Timer関数を再度呼び出す必要があると思います。 – codesdozer

0

実際には「タイマー」はありません。あなたは、ある一定の期間実行され、ループ内でAPI呼び出しを行っているCPU集中ループを持っています。 DoEventsステートメントは、ループが実行されている間にUIが(ほとんど)ユーザーに反応することを意味します。

ボタンをクリックするなどの別のイベントによってトリガされる別のコードパスを使用してモーダルフォームの表示を呼び出すと、そのモーダルフォームの表示によって、フォームがモーダル表示されている間にCPUループが停止します。彼らの答えはC-Pound Guruが述べているように。

タイマーコントロール(https://msdn.microsoft.com/en-us/library/aa231154(v=vs.60).aspxおよびhttps://msdn.microsoft.com/en-us/library/aa267243(v=vs.60).aspx)を使用して調査する必要があります。

timer elapsedイベント内で、キューステータスapi呼び出しを行います。メインフォームにタイマーコントロールを配置すると、別のフォームをモーダルに表示してもタイマー経過イベントが発生し続けることを意味します。

+0

ありがとうMarkL、リンクが役立ちます。 – codesdozer

関連する問題