2017-03-10 23 views
1

私はどのユーザーからでもアプリケーションの終了を制限したいと思います。 どうすればいいですか? 「閉じる」ボタンを無効にするか、「最小化」ボタンにしますか?close close python application(win32gui)

このプログラムは、特定のファイルのコピー貼り付けを監視し、システム上で連続して実行する必要があります。

import wx 
import win32api 
import win32gui 
import win32con 
import win32clipboard 
import filelocationvariable 

class TestFrame (wx.Frame): 
    def __init__ (self): 
     wx.Frame.__init__ (self, None, title="Clipboard viewer", size=(0,0)) 

     self.first = True 
     self.nextWnd = None 

     # Get native window handle of this wxWidget Frame. 
     self.hwnd = self.GetHandle() 

     # Set the WndProc to our function. 
     self.oldWndProc = win32gui.SetWindowLong (self.hwnd, 
                win32con.GWL_WNDPROC, 
                self.MyWndProc) 

     try: 
      self.nextWnd = win32clipboard.SetClipboardViewer (self.hwnd) 
     except win32api.error: 
      if win32api.GetLastError() == 0: 
       # information that there is no other window in chain 
       pass 
      else: 
       raise 


    def MyWndProc (self, hWnd, msg, wParam, lParam): 
     if msg == win32con.WM_CHANGECBCHAIN: 
      self.OnChangeCBChain (msg, wParam, lParam) 
     elif msg == win32con.WM_DRAWCLIPBOARD: 
      self.OnDrawClipboard (msg, wParam, lParam) 

     # Restore the old WndProc. Notice the use of win32api 
     # instead of win32gui here. This is to avoid an error due to 
     # not passing a callable object. 
     if msg == win32con.WM_DESTROY: 
      if self.nextWnd: 
       win32clipboard.ChangeClipboardChain (self.hwnd, self.nextWnd) 
      else: 
       win32clipboard.ChangeClipboardChain (self.hwnd, 0) 

      win32api.SetWindowLong (self.hwnd, 
            win32con.GWL_WNDPROC, 
            self.oldWndProc) 

     # Pass all messages (in this case, yours may be different) on 
     # to the original WndProc 
     return win32gui.CallWindowProc (self.oldWndProc, 
             hWnd, msg, wParam, lParam) 

    def OnChangeCBChain (self, msg, wParam, lParam): 
     if self.nextWnd == wParam: 
      # repair the chain 
      self.nextWnd = lParam 
     if self.nextWnd: 
      # pass the message to the next window in chain 
      win32api.SendMessage (self.nextWnd, msg, wParam, lParam) 

    def OnDrawClipboard (self, msg, wParam, lParam): 
     if self.first: 
      self.first = False 
     else: 
      if win32clipboard.IsClipboardFormatAvailable(win32con.CF_TEXT): 
       try: 
        win32clipboard.OpenClipboard() 
        data = win32clipboard.GetClipboardData() 
        win32clipboard.CloseClipboard() 
        self.comparing(data) 
       except TypeError: 
        pass 

      if win32clipboard.IsClipboardFormatAvailable(win32con.CF_HDROP): 
       try: 
        win32clipboard.OpenClipboard() 
        text = win32clipboard.GetClipboardData(win32con.CF_HDROP) 
        win32clipboard.CloseClipboard() 
        self.comparing(text[0]) 
       except TypeError: 
        pass 

     if self.nextWnd: 
      # pass the message to the next window in chain 
      win32api.SendMessage (self.nextWnd, msg, wParam, lParam) 

    def comparing(self,text): 
     try: 
      fp = open(filelocationvariable.implocationlist,'r') 
      str2 = text 
      for lines in fp: 
       str1 = lines[0:len(lines)-1] 
       if str1 == str2: 
        try: 
         win32clipboard.OpenClipboard() 
         win32clipboard.EmptyClipboard() 
         win32clipboard.CloseClipboard() 

        except: 
         pass      


     except IOError: 
      pass 

     finally: 
      fp.close() 


app = wx.App(False) 
frame = TestFrame() 
frame.Show() 
app.MainLoop() 

答えて

0

はEVT_CLOSEイベント self.Bind(wx.EVT_CLOSE, self.on_close) にフレームを結合した後、あなたが近いイベントを処理する方法を決定、すなわち

def on_close(self, event): 
    if self.should_close: 
     event.Skip() # calling event.Skip() will allow the window to close 
+0

user262863そのworking..thankます@! –