MSN Messenger会話ウィンドウをすべて前面に

ああ、最近はWindows Live Messengerと呼ぶのか。
今日初めて知った。


一遍にアクティブにしようとすると、1/2くらいの確率で失敗する。
0.3秒のSleepを入れることで成功。
このsleepのおかげで、窓が多いとき、なんとなくサイバーな気分に浸れる。

activate_imwindows.py

# -*- coding: Shift-JIS -*-
import clr
import re
import CommandPlugin
import time
from CommandPlugin import *

clr.AddReferenceByPartialName("System")
from System import IntPtr
from _restore_window import RestoreWindow
clr.AddReferenceByPartialName("System.Windows.Forms")
from System.Windows.Forms import MessageBox

class activate_imwindows(CommandPlugin.PythonCommand):
  def __init__(self):
    self.restore_win = RestoreWindow()

  def run(self, arg_list):
    # argumentで指定したデフォルトの引数は無視する
    arg_list.RemoveAt(0)

    # すべての会話ウィンドウを前面化
    if WinAPI.FindWindow(None, " - 会話") != None:
      hit = self.FindWindow(" - 会話")
      for bhit in hit:
        self.restore_win.add(bhit.hwnd)
        WinAPI.WakeupWindow(bhit.hwnd)
        WinAPI.SetForegroundWindow(bhit.hwnd)
        time.sleep(0.3)

  def undo(self):
    self.restore_win.restore()
    return True

  def FindWindow(self, wintitle):
    hit = [0]
    del hit[0]
    regexp = re.compile(wintitle)
    for win in info.window_list:
      if regexp.search(win.windowTitle):
        hit.append(win)
    return hit