« 自動クリックツールの作成 | メイン | 祇園祭2014 宵山 »

Outlookセキュリティダイアログ自動はい選択ツール

Outlookでマクロや自動処理を実行する際、以下のメッセージのセキュリティ警告のダイアログが表示された時に、「はい」ボタンの場所を自動でクリックするツールを作成しました。
本ツールはオープンソースにします。自由に改造して使うことができます。


【ダイアログのメッセージ】
「プログラムが、Outlook内に保存されている電子メール アドレスにアクセスしようとしています。よろしいですか?
これが予期しない動作である場合は、[いいえ]をクリックしてください。このプログラムがウイルスである可能性があります」



Outlookでマクロ等を用いてメール転送処理を自動化したいときに、上記のようなセキュリティ警告が出て自動処理が停止してしまいます。これはクライアント側の設定ではどうにもなりません。

類似のアプリとして「Express ClickYes」というソフトがありますが、海外のソフトであり不安なので、今回作成しました。

https://github.com/mfright/AutoYes/releases

ソースコードとソフト本体を上記GitHubに置いておきます。






【機能の実装】

本ツールは、2つの機能から構成されます。

1. 定期的に、Microsoft Office Outlookのダイアログが出ていないか確認する。
もし出ていたらOutlookをアクティブにし、「はい」ボタンの位置をクリックする。

2. 画面ロック(Windowsパスワード入力画面)までの残り時間を定期的にリセットし、画面ロックされてしまわないようにする。


private void timerAutoClick_Tick(object sender, EventArgs e)
{

// セキュリティダイアログの座標を取得
IntPtr dialog = FindWindow("#32770", "Microsoft Office Outlook");
Rect dialogRect = new Rect();
GetWindowRect(dialog, ref dialogRect);
toolStripStatusLabel1.Text = "LEFT:" + dialogRect.Left + " TOP:" + dialogRect.Top + " RIGHT:"+dialogRect.Right + " BOTTOM:"+dialogRect.Bottom;


// 座標が0,0であれば、ダイアログは出ていないと考えられるので、処理を終了。
if (dialogRect.Right == 0 && dialogRect.Bottom == 0)
{
if (lblStatus.Text != messageKanshichu)
{
lblStatus.Text = messageKanshichu;
this.BackColor = Color.White;
}
return;
}


lblStatus.Text = "ダイアログ発見\r\nクリック中!";
this.BackColor = Color.Yellow;


// Outlookをアクティブにする
activateOutlook();

dialogLeft = dialogRect.Left;
dialogTop = dialogRect.Top;
timerDelayClick.Start();
}

void activateOutlook()
{


try
{
/*
// VisualBasic.dll
System.Diagnostics.Process[] ps = System.Diagnostics.Process.GetProcessesByName("Outlook");
if (0 < ps.Length)
{
Microsoft.VisualBasic.Interaction.AppActivate(ps[0].Id);
}
*/


//user32.dll
foreach (System.Diagnostics.Process p
in System.Diagnostics.Process.GetProcesses())
{
//"Outlook"がメインウィンドウのタイトルに含まれているか調べる
if (0 <= p.MainWindowTitle.IndexOf("Outlook"))
{
//ウィンドウをアクティブにする
SetForegroundWindow(p.MainWindowHandle);
break;
}
}


}
catch (Exception ex)
{


}
}


//クリックする処理
void doClick()
{

int MOUSEEVENTF_LEFTDOWN = 0x2;
int MOUSEEVENTF_LEFTUP = 0x4;
mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0);
mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0);
}


//カーソルを移動させる処理
void setPoint(int newX, int newY)
{
System.Windows.Forms.Cursor.Position = new System.Drawing.Point(newX, newY);
}


private void timerDelayClick_Tick(object sender, EventArgs e)
{
setPoint(dialogLeft + 116, dialogTop + 156);
doClick();
doClick();


timerDelayClick.Stop();
}




// 画面ロックを50秒ごとに抑止する
private void timerAutolockCancel_Tick(object sender, EventArgs e)
{
// DisplayRequiredをSetThreadExecutionStateへ送信.(スクリーンロックを抑止)
ExecutionState es = new ExecutionState();
es = ExecutionState.DisplayRequired;
SetThreadExecutionState(es);
}

トラックバック

このエントリーのトラックバックURL:
http://www.ddhost.jp/mt/mt-tb.cgi/910

About

2014年07月12日 16:05に投稿されたエントリーのページです。

ひとつ前の投稿は「自動クリックツールの作成」です。

次の投稿は「祇園祭2014 宵山」です。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。