コード例 #1
0
ファイル: TextHook.cs プロジェクト: sader1992/chiitrans
        internal bool addUserHook(UserHook userHook)
        {
            if (!isConnected)
            {
                return(false);
            }
            if (Settings.session.isHookAlreadyInstalled(userHook))
            {
                return(false);
            }
            bool ok;

            if (isCompat)
            {
                ok = TextHookInteropCompat.TextHookAddHook(ref userHook.hookParam, userHook.getName()) == OK;
            }
            else
            {
                ok = TextHookInterop.TextHookAddHook(ref userHook.hookParam, userHook.getName()) == OK;
            }
            if (ok)
            {
                Settings.session.addUserHook(userHook);
            }
            return(ok);
        }
コード例 #2
0
ファイル: TextHook.cs プロジェクト: sader1992/chiitrans
        internal bool removeUserHook(UserHook hook)
        {
            if (!isConnected)
            {
                return(false);
            }
            if (!Settings.session.removeUserHook(hook))
            {
                return(false);
            }
            bool   ok             = true;
            Thread removingThread = new Thread(new ThreadStart(() => {
                if (isCompat)
                {
                    ok = TextHookInteropCompat.TextHookRemoveHook(hook.addr) == OK;
                }
                else
                {
                    ok = TextHookInterop.TextHookRemoveHook(hook.addr) == OK;
                }
            }));

            removingThread.IsBackground = true;
            removingThread.Start();
            if (removingThread.Join(1000))
            {
                return(ok);
            }
            else
            {
                removingThread.Abort();
                Logger.log("Freeze trying to remove hook: " + hook.code);
                return(true);
            }
        }
コード例 #3
0
ファイル: SessionSettings.cs プロジェクト: wareya/chiitrans
 internal bool removeUserHook(UserHook userHook)
 {
     lock (this) {
         bool ok = userHooks.Remove(userHook);
         if (ok) {
             isDirty = true;
         }
     }
     return isDirty;
 }
コード例 #4
0
ファイル: SessionSettings.cs プロジェクト: wareya/chiitrans
 internal bool isHookAlreadyInstalled(UserHook userHook)
 {
     return userHooks.Any((h) => h.addr == userHook.addr);
 }
コード例 #5
0
ファイル: SessionSettings.cs プロジェクト: wareya/chiitrans
 internal void addUserHook(UserHook userHook)
 {
     lock (this) {
         userHooks.Add(userHook);
         isDirty = true;
     }
 }
コード例 #6
0
ファイル: TextHook.cs プロジェクト: wareya/chiitrans
 internal bool removeUserHook(UserHook hook)
 {
     if (!isConnected) {
         return false;
     }
     if (!Settings.session.removeUserHook(hook)) {
         return false;
     }
     bool ok = true;
     Thread removingThread = new Thread(new ThreadStart(() => {
         if (isCompat) {
             ok = TextHookInteropCompat.TextHookRemoveHook(hook.addr) == OK;
         } else {
             ok = TextHookInterop.TextHookRemoveHook(hook.addr) == OK;
         }
     }));
     removingThread.IsBackground = true;
     removingThread.Start();
     if (removingThread.Join(1000)) {
         return ok;
     } else {
         removingThread.Abort();
         Logger.log("Freeze trying to remove hook: " + hook.code);
         return true;
     }
 }
コード例 #7
0
ファイル: TextHook.cs プロジェクト: wareya/chiitrans
 internal bool addUserHook(UserHook userHook)
 {
     if (!isConnected) {
         return false;
     }
     if (Settings.session.isHookAlreadyInstalled(userHook)) {
         return false;
     }
     bool ok;
     if (isCompat) {
         ok = TextHookInteropCompat.TextHookAddHook(ref userHook.hookParam, userHook.getName()) == OK;
     } else {
         ok = TextHookInterop.TextHookAddHook(ref userHook.hookParam, userHook.getName()) == OK;
     }
     if (ok) {
         Settings.session.addUserHook(userHook);
     }
     return ok;
 }