天天看點

頁面開機自啟動,頁面置頂顯示,頁面持續獲得焦點,滑鼠點選器源碼 - 黑暗童話

頁面開機自啟動,頁面置頂顯示,頁面持續獲得焦點,滑鼠點選器源碼

首先講一下本文的使用背景,現有以下需求:

将一個展示頁面開機後自動全屏顯示,要求運作期間不允許有任何彈窗彈出遮擋住頁面,且頁面應保持焦點以保證鍵盤可以操作頁面。

開機自動啟動我們可以将需要打開的頁面的快捷方式或其他自啟動的軟體放在系統啟動檔案夾中,Windows作業系統中有兩個啟動檔案夾

路徑如下所示:

C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp

C:\Users\WindowsUserName\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup

其中"WindowsUserName"為使用電腦的使用者名。

實作全屏顯示,浏覽器擁有記憶功能,快捷方式打開頁面實作全屏顯示,關閉後再打開浏覽器仍會記住上次打開的全屏顯示。

因為是設定為頁面單一顯示,不能操作其他,是以這也算是一種比較極端的頁面使用方式,下面就介紹一下為實作以上效果而使用的方法以及一些相關的個人感覺比較有用的方法。

 實作預期目标制作了一個滑鼠定時點選器,使用了Winform設計界面如下:

頁面開機自啟動,頁面置頂顯示,頁面持續獲得焦點,滑鼠點選器源碼 - 黑暗童話

代碼及相關解釋如下:

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Runtime.InteropServices;
using System.Threading;
using Microsoft.Win32;
using System.IO;

namespace AutoClick
{
    /// <summary>
    /// 滑鼠按鍵的ASCLL碼
    /// </summary>
    public enum MouseEventFlags
    {
        Move = 0x0001,          //移動
        LeftDown = 0x0002,      //左鍵被按下
        LeftUp = 0x0004,        //左鍵被按放開
        RightDown = 0x0008,     //右鍵被按下
        RightUp = 0x0010,       //右鍵被按放開
        MiddleDown = 0x0020,    //中間鍵被按下
        MiddleUp = 0x0040,      //中間鍵被按放開
        Wheel = 0x0800,         //滑輪轉動
        Absolute = 0x8000
    }
    public partial class AutoClick : Form
    {
        /// <summary>
        /// 滑鼠位置X坐标
        /// </summary>
        private int positionX = 400;
        /// <summary>
        /// 滑鼠位置Y坐标
        /// </summary>
        private int positionY = 300;
        /// <summary>
        /// 定義定期事件
        /// </summary>
        private System.Timers.Timer mTimer;
        /// <summary>
        /// 滑鼠移動事件
        /// </summary>
        /// <param name="dwFlags"></param>
        /// <param name="dx"></param>
        /// <param name="dy"></param>
        /// <param name="dwData"></param>
        /// <param name="dwExtraInfo"></param>
        [DllImport("User32")]
        public extern static void mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo);
        /// <summary>
        /// 設定滑鼠位置
        /// </summary>
        /// <param name="x"></param>
        /// <param name="y"></param>
        /// <returns></returns>
        [DllImport("user32.dll")]
        static extern int SetCursorPos(int x, int y);

        /// <summary>
        /// 構造函數
        /// </summary>
        public AutoClick()
        {
            InitializeComponent();

            //擷取坐标和時間資訊
            string xAndYAndTime = ReadText();
            string[] boxText = xAndYAndTime.Split(\',\');

            //
            mTimer = new System.Timers.Timer();
            mTimer.Interval = int.Parse(boxText[2]);//設定時間間隔
            mTimer.Elapsed += new System.Timers.ElapsedEventHandler(mTimer_Elapsed);//設定達到間隔時發生的事件

            //設定滑鼠坐标值
            positionX = int.Parse(boxText[0]);
            positionY = int.Parse(boxText[1]);

            //設定頁面顯示資訊
            txtX.Text = boxText[0];
            txtY.Text = boxText[1];
            txtTime.Text = boxText[2];

            //
            mTimer.Start();

            //更新頁面控件狀态
            UpdateEnabled();
        }

        /// <summary>
        /// 達到時間間隔時觸發
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void mTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            SetCursorPos(positionX, positionY);
            mouse_event((int)(2 | 32768), positionX, positionY, 0, IntPtr.Zero);
            Thread.Sleep(10);
            mouse_event((int)(4 | 32768), positionX, positionY, 0, IntPtr.Zero);
        }

        /// <summary>
        /// 啟動/停止按鈕點選事件
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnDo_Click(object sender, EventArgs e)
        {
            if (btnDo.Text == "啟動")//如果按鈕為啟動時,開啟定時事件,并設定按鈕為停止
            {
                mTimer.Start();
                positionX = int.Parse(txtX.Text.Trim());
                positionY = int.Parse(txtY.Text.Trim()); 
                mTimer.Interval = int.Parse(txtTime.Text.Trim());
                btnDo.Text = "停止";
            }
            else//如果按鈕為停止時,關閉定時事件,并設定按鈕為啟動
            {
                mTimer.Stop();
                btnDo.Text = "啟動";
            }
            UpdateEnabled();
            //将滑鼠坐标和時間資訊寫入txt檔案
            WriteText();
        }

        /// <summary>
        /// 設定開機自啟動  
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAutoStart_Click(object sender, EventArgs e)
        {
            MessageBox.Show("設定開機自啟動,需要修改系統資料庫", "提示");
            string path = Application.ExecutablePath;
            RegistryKey rk = Registry.LocalMachine;
            RegistryKey rk2 = rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
            rk2.SetValue("JcShutdown", path);
            rk2.Close();
            rk.Close();
        }

        /// <summary>
        ///取消開機自啟動 
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void btnAutoClose_Click(object sender, EventArgs e)
        {
            MessageBox.Show("取消開機自啟動,需要修改系統資料庫", "提示");
            string path = Application.ExecutablePath;
            RegistryKey rk = Registry.LocalMachine;
            RegistryKey rk2 = rk.CreateSubKey(@"Software\Microsoft\Windows\CurrentVersion\Run");
            rk2.DeleteValue("JcShutdown", false);
            rk2.Close();
            rk.Close();
        }

        /// <summary>
        /// 禁用/開啟輸入框
        /// </summary>
        private void UpdateEnabled()
        {
            if (btnDo.Text == "啟動")
            {
                txtX.Enabled = true;
                txtY.Enabled = true;
                txtTime.Enabled = true;
            }
            else
            {
                txtX.Enabled = false;
                txtY.Enabled = false;
                txtTime.Enabled = false;
            }
        }

        /// <summary>
        /// 讀取txt文檔
        /// </summary>
        private string ReadText()
        {
            string xAndYAndTime = File.ReadAllText(@".\AutoClick.txt");
            return xAndYAndTime;
        }

        /// <summary>
        /// 寫入txt文檔
        /// </summary>
        private void WriteText()
        {
            string xAndYAndTime = txtX.Text.Trim() + "," + txtY.Text.Trim() + "," + txtTime.Text.Trim();
            File.WriteAllText(@".\AutoClick.txt", xAndYAndTime);
        }
    }
}      

下面介紹一下一些其他方法

一、使用軟體的方法實作頁面置頂和擷取焦點

使用了兩張軟體:AutoHotKey   +    鼠大俠 滑鼠連點器

思路: 鼠大俠 滑鼠連點器可實作滑鼠自動點選,一般彈窗都會是比較小的視窗,是以可以将滑鼠點選位置設定在頁面邊緣區域實作點選我們需要的頁面確定頁面置頂和擷取焦點。

頁面開機自啟動,頁面置頂顯示,頁面持續獲得焦點,滑鼠點選器源碼 - 黑暗童話

    但問題是鼠大俠 滑鼠連點器不能開機自啟動,且必須通過操作熱鍵或滑鼠才能啟動或關閉。熱鍵,就是按鍵盤按鍵或組合鍵。

*針對鼠大俠 滑鼠連點器不能開機自啟動的問題我們可以将該軟體放在上面所述的啟動檔案夾中實作開機自啟。

*對于必須通過操作熱鍵或滑鼠才能啟動或關閉則需要我們的另一款軟體“AutoHotKey”。

AutoHotKey是WINDOWS出得一個類似按鍵精靈的軟體,下載下傳好之後安裝上,然後在D盤下面建一個文本檔案,在裡面寫上

Send,{a}

Return      

a那個地方就是你要按的鍵,然後儲存,把文檔的名字改為1.ahk 這個一定要儲存在d盤下,

然後再建立一個文本檔案在裡面寫上

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run]

"1.ahk"="D:\\1.ahk"      

儲存,随便取個名字,但是要以.reg結尾。

 輕按兩下那個.reg的檔案,會提示你是否添加系統資料庫項,選擇是

然後防毒軟體會報有軟體想修改你得系統資料庫鍵值,選擇允許,完成!

最後将1.ahk檔案建立個快捷方式放到啟動檔案夾中即可,為了實作我們的效果,檔案啟動需要相應的順序,分别是 頁面,滑鼠點選器,熱鍵操作。排好相應的順序,例如通過名字,我們的任務算完成了!重新開機電腦後發現實作了想要的效果。

*********************************對于滑鼠點選器網上有很多種,如需要的話可以自行挑選,大都是使用熱鍵的方式實作開啟與關閉*************************************

二、使用代碼的方法實作頁面置頂和擷取焦點

使用代碼的方法很簡單,隻需要在前台頁面中設定定時擷取頁面焦點即可

<script>
        setInterval(function () {
            window.focus();
        }, 5000);
    </script>      

這樣可以實作無論操作什麼其他界面,頁面都會自動跳回我們需要的界面并擷取到焦點,但是在使用過程中發現ie浏覽器全屏後再操作其他界面就無法跳轉回目标界面,原因尚未找到,希望有了解知曉的前輩可以指導解惑一下。

三、間接打開界面

該方法隻是想出的一個感覺可行的方法并未親自去實作檢視效果,在此也記錄一下,那就是開機自啟一個頁面,該頁面使用window.showModalDialog方法自動跳轉到我們需要的目标界面,也可實作畫面前置不可操作其他頁面。

四、單純實作頁面置頂的軟體方法

單純實作頁面置頂的話可以使用軟體“DeskPins”.

頁面開機自啟動,頁面置頂顯示,頁面持續獲得焦點,滑鼠點選器源碼 - 黑暗童話
頁面開機自啟動,頁面置頂顯示,頁面持續獲得焦點,滑鼠點選器源碼 - 黑暗童話
頁面開機自啟動,頁面置頂顯示,頁面持續獲得焦點,滑鼠點選器源碼 - 黑暗童話

DeskPins可以自動設定規則,将某些或某類視窗置頂顯示,可以實作開機自啟動設定。

*************還有許多其他視窗置頂顯示的軟體有需要的可以了自行再解一下*****************

 五、Windows.Topmost屬性

Gets or sets a value that indicates whether a window appears in the topmost z-order.

(擷取或設定一個值,該值訓示是否視窗顯示在最頂層。)

命名空間:   System.Windows

程式集:  PresentationFramework(位于 PresentationFramework.dll)

文法:C#

public bool Topmost { get; set; }
      

屬性值

Type: System.Boolean

true 如果視窗為最頂層元素否則為 false。

備注

 一個視窗,其 Topmost 屬性設定為 true 所有視窗的上面顯示其 Topmost 屬性設定為 false。

具有 windows 組中 Topmost 屬性設定為 true, ,目前處于激活狀态的視窗是最頂層視窗。 同樣為具有 windows 組 Topmost 屬性設定為 false。

說明
當視窗承載在浏覽器中時,不能設定或擷取該屬性。

依賴項屬性資訊

辨別符字段, TopmostProperty
中繼資料屬性設定為 true