2017-09-04 3 views
-1

のWindows 7上のOutlook 2013を使用して、私はちょうどそれをテストするために、このマクロを作成しましたが:どうすれば簡単にフォーカスを盗むことができますか?

Private Sub Application_Reminder(ByVal Item As Object) 
     Activeexplorer.Activate 
End Sub 

私は別のアプリケーションとOutlookのリマインダー火災に取り組んでいますたびに、Outlookはアプリケーションからフォーカスを盗むアクティブウィンドウになり私は働いています。

どうすれば可能ですか?

「Activeexplorer.Activate」メソッドは、「SetForegroundWindow」や「SetActiveWindow」などのWindows APIを使用すると考えられます。

これらのAPIはすべてフォーカスを奪うことを禁じています。だから私の質問は、Outlookのvbaメソッドが簡単に恐ろしくフォーカスを奪うことができるのですか?

アラームが「(てSystemParametersInfoでSPI_GETFOREGROUNDLOCKTIMEOUTを参照)フォアグラウンドロックのタイムアウトが満了している。」場合https://msdn.microsoft.com/it-it/library/windows/desktop/ms633539(v=vs.85).aspxで述べたように、SetForegroundWindowはフォアグラウンドで他のプロセスではないで使用することができますよう、部分的に解除され

私が変更'HKCU:\ Control Panel \ Desktop'のレジストリキー 'ForegroundLockTimeout'の値を0から20000に変更すると、今の場合、Outlookはフォーカスを奪いません。

「ForegroundLockTimeout」レジストリキーの最大値は何か、つまり、フォアグラウンドでアクティブなアプリケーションからフォーカスを奪っていない他のプロセスを完全に無効にすることができるかどうかは疑問です。

答えて

0

はい、SetForegroundWindowはフォアグラウンドウィンドウを尊重し、バックグラウンドアプリケーションのためにタスクバーを点滅させるだけですが、various hacks人がWindowsを騙してフォーカスを奪うのに使用します。

重要なことをユーザーに通知する私の好ましい方法は、キーボードのフォーカスを奪うことなくウィンドウを一番上に持っていくことです。ちょっとした問題は、どのHWNDを渡すかを理解することです。MSDNを調べるだけでActiveExplorerフォームのHWNDプロパティを実際に見つけることができませんでした。

Const HWND_TOP = 0 
Const SWP_NOSIZE = &H1 
Const SWP_NOMOVE = &H2 
Const SWP_NOACTIVATE = &H10 
Const SWP_SHOWWINDOW = &H40 
Private Declare Sub SetWindowPos Lib "User32" (ByVal hWnd As Long, ByVal hWndInsertAfter As Long, ByVal X As Long, ByVal Y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) 

... 

SetWindowPos ??.hWnd, HWND_TOP, 0, 0, 0, 0, SWP_NOACTIVATE Or SWP_SHOWWINDOW Or SWP_NOMOVE Or SWP_NOSIZE 

別の方法は、あなたがフォーカスをつかむために権利を持っていない場合SetForegroundWindowはどうなるのかであるタスクバーボタンを点滅さFlashWindowを呼び出すことです。ここで

+0

私は "ハッキング"に興味がありません、私のポストのものはハックではなく、私の視点では標準的なvbaメソッドです。これは可能ではありません。マイクロソフトはフォーカスを盗むことを許可してはいけません。簡単に。 –

+0

Outlookがハッキングを使用するかどうかを調べる唯一の方法は、Activateメソッドをデバッグすることです。 – Anders

+0

活性化せずにzリストの一番上にウィンドウを持っていくというハックは、それを起動せずに一番上にすること以外は機能していません。その後、起動せずに一番上にしません。それを活性化せずに非最上位ウィンドウの上にウィンドウ: SetWindowPos hWndは、HWND_TOPMOST、0、0、0、0、SWP_NOSIZEまたはSWP_NOMOVEそれともSWP_NOACTIVATE SetWindowPos hWndは、HWND_NOTOPMOST、0、0、0、0、SWP_NOSIZEかSWP_NOMOVEまたはSWP_NOACTIVATE –

1

は、予想通り、Windowsが動作していなかった理由です。

私は、レジストリキーの値を変更し「ForegroundLockTimeout」「HKCU:\コントロールパネル\デスクトップ」でゼロから20000

最初はゼロであってはなりません。あなたのシステム上の何か、おそらく長い時間前に、フォアグラウンドロックを無効にするために、この設定を明示的に変更しておく必要があります。これはOutlook自体とは関係ありません。

デフォルトであるwhich is 200,000、つまり200秒に戻すことをお勧めします。

最大でも、それはDWORDに適合しなければならないので、おそらく約49日間です。それが内部で署名された値として扱われた場合、約24日間。おそらくそれを1日よりも長く設定することには少しのポイントがあります。

関連する問題