2014年2月7日金曜日

wxPythonで常駐ランチャをつくろう!第一回 多重起動の防止

あいさつ


つかさです。常駐ランチャを作ってみます。

1 多重起動の防止
2 実行中のファイルに引数を投げる
3 アイコン表示

の三回の予定です。今回は多重起動の防止。



説明の簡略化のため、テキストコントロールだけを表示します。
ランチャっぽいものをどう作るか自体は、Pythonでコマンドラインランチャを作ろう!シリーズの記事を参考にしてください。そのあたりの記事と組み合わせたら常駐ランチャにおそらくなります。 

hlnch01.py
# -*- encoding: utf-8 -*-

import wx

class MyTxtCtr(wx.PySimpleApp):
    
    def OnInit(self):
        instance_name = u"%s-%s" % (self.GetAppName(), wx.GetUserId())
        self.instance = wx.SingleInstanceChecker(instance_name)
        if self.instance.IsAnotherRunning():
            wx.MessageBox("Another instance is running", "ERROR")
            return False
        self.Frm = wx.Frame(None, -1, "homuLauncher", size=(400,60),pos=(400,400))
        self.TxtCtr = wx.TextCtrl(self.Frm, -1)
        self.Frm.Show()
        return 1

app = MyTxtCtr()
app.MainLoop()

説明


要は

wx.SingleInstanceChecker

を使えばいい、ということですね。

instance_name = u"%s-%s" % (self.GetAppName(), wx.GetUserId())

でファイル名とユーザーIDからなる文字列を取得。これと同じものが起動中かどうかをIsAnotherRunning()で判別し、既に起動していればエラーメッセージを出して終了するようにしてます。

参考


OneInstanceRunning - wxPyWiki

0 件のコメント:

コメントを投稿