国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

一體廣告機實現思路,非常實用(二)

2019-11-17 02:39:26
字體:
來源:轉載
供稿:網友

一體廣告機實現思路,非常實用(二)

繼續昨天未完成的工作,昨天主要介紹了一體機開發的主要功能(一體廣告機實現思路,非常實用(一)),今天主要介紹實現邏輯(代碼層面)。也許有些人會認為實現起來很簡答,也許不會的人可能比登天還難,O(∩_∩)O哈哈~,我就來簡單介紹下。也許我說的方法不是最好的,希望你能提供更好的方法,大家一起學習交流了,共同進步。

我所使用的廣告滾動使用的是Flash來實現,調用了VS的Interop.ShockwaveFlashObjects.dll文件,這個VS自帶的。首先是屏蔽flash右鍵的實現代碼(主要作用是單擊右鍵不會出現其他菜單,否則就會出現點擊右鍵有其他菜單顯示,這肯定不符合廣告的要求的,所以必須要屏蔽flash右鍵,實現邏輯也是調用鉤子去屏蔽右鍵):

 1         #region * 屏蔽FLASH右鍵 2         //此段代碼實現調用系統函數,來實現窗體 3         //加載flash時,可以屏蔽其右鍵 4         PRivate const int GWL_WNDPROC = -4; 5         public delegate IntPtr FlaWndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam); 6  7         private IntPtr OldWndProc = IntPtr.Zero; 8         private FlaWndProc Wpr = null; 9 10         [DllImport("user32.dll", CharSet = CharSet.Auto)]11         public static extern IntPtr SetWindowLong(IntPtr hWnd, int nIndex, FlaWndProc wndProc);12         [DllImport("user32.dll", CharSet = CharSet.Auto)]13         public static extern IntPtr CallWindowProc(IntPtr wndProc, IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam);14         //給此控件一個特定消息值15         private IntPtr FlashWndProc(IntPtr hWnd, int msg, IntPtr wParam, IntPtr lParam)16         {17             if (msg == 516)18                 return (IntPtr)0;19             return CallWindowProc(OldWndProc, hWnd, msg, wParam, lParam);20         }21         #endregion

FormLoad加載flash,并設定程序的分辨率(更加廣告機的分辨率去設定,這樣避免程序顯示不正確,因為要控制廣告機除了播放滾動的圖片之外,就是跳轉相應的網站,而不允許進行桌面,否則別人就會做很多其他操作了,所以這點必須要控制的,而且圖片的分辨率也是這樣的,所以這樣就這樣就固定死程序的分辨率了),并且加載swf文件,并開始play,實現flash滾動,實現代碼如下:

 1             this.Width = 1080; 2             this.Height = 1920; 3             this.Location = new Point(0, 0); 4             //-- 5             this.timer1.Enabled = true; 6             this.timer1.Interval = 100; 7             this.timer1.Start(); 8             //-- 9             //屏蔽右鍵10             this.Wpr = new FlaWndProc(this.FlashWndProc);11             this.OldWndProc = SetWindowLong(axShockwaveFlash1.Handle, GWL_WNDPROC, Wpr);12             //--加載FLASH13             this.axShockwaveFlash1.Movie = application.StartupPath + @"http://Flash//apaperstudio.swf";14             axShockwaveFlash1.Play();     15             //-- 16             ReadUserInfo();//--讀取用戶信息17             //--18             LoadWeb();//--預加載網站

讀取用戶信息是xml文檔,這樣可以進行在現場進行配置,使用起來就比較方便。

 1         /// <summary> 2         /// 讀取用戶信息 3         /// </summary> 4         protected virtual void ReadUserInfo() 5         { 6             //--從autorun.xml文件中讀取配置文件 7             string autPath = ""; 8             autPath = Application.StartupPath + @"http://autorun.xml";//配置文件目錄 9             if (!File.Exists(autPath))//判斷程序目錄是否存在配置文件10             {11                 MessageBox.Show("配置文件不存在,請聯系管理員!");12                 return;13             }14             XmlDocument xmldoc = new XmlDocument();15             xmldoc.Load(autPath);//加載XML文件16             XmlNodeList audList = xmldoc.SelectSingleNode("Root").ChildNodes;//獲取Root節點的所有子節點17             foreach (XmlNode xn in audList)//遍歷所有子節點18             {19                 XmlElement xe = (XmlElement)xn;//將子節點類型轉換為XmlElement類型20                 userIDStr = xe.GetAttribute("UserID");//用戶ID21             }22         }

XML文件如下:

<?xml version="1.0" encoding="UTF-8"?><Root>  <Para TerminalID="1111" AreaID="85" Airport="福田" AirportPlace="A1" UserID="adminUserId" Version="14" /></Root>

預加載網站實現代碼如下,這些數據都是通過升級程序下載到,并保存在本地,再供一體機程序調用:

 1         /// <summary> 2         /// 預加載網站 3         /// </summary> 4         protected virtual void LoadWeb() 5         { 6             //--從ADXml.xml文件中讀取廣告列表 7             string autPath = ""; 8             autPath = Application.StartupPath + @"http://ADXml.xml";//廣告列表目錄 9             if (!File.Exists(autPath))//判斷程序目錄是否存在廣告列表10             {11                 MessageBox.Show("廣告列表不存在,請聯系管理員!");12                 return;13             }14             XmlDocument xmldoc = new XmlDocument();15             xmldoc.Load(autPath);//加載XML文件16             XmlNodeList audList = xmldoc.SelectSingleNode("ADRoot").ChildNodes;//獲取ADRoot節點的所有子節點17             foreach (XmlNode xn in audList)//遍歷所有子節點18             {19                 XmlElement xe = (XmlElement)xn;//將子節點類型轉換為XmlElement類型20                 string url = xe.GetAttribute("url");//預加載的網址21                 webBrowser1.Navigate(url);22                 System.Threading.Thread.Sleep(5000);//--休眠5S23             }24         }

廣告XML文件:

<?xml version="1.0" encoding="UTF-8"?><ADRoot>  <AD name="終端7" imgLink="attachments/imgs/ad/201111/016965953952723834xorg.jpg" url="www.darenbang.com/taoletao/front/activity/activityIndex.do" area="85" place="福田" />  <AD name="終10" imgLink="attachments/imgs/ad/201111/066067356307548920xorg.jpg" url="www.darenbang.com/taoletao/front/bbase/productSearch.do?type=2&amp;Q_newProduct_SN_EQ=1" area="85" place="福田" />  <AD name="終端9" imgLink="attachments/imgs/ad/201111/012278613580213338xorg.jpg" url="www.darenbang.com/taoletao/front/index/channelsPage.do?categoryId=7" area="85" place="福田" />  <AD name="終端4" imgLink="attachments/imgs/ad/201111/052606357223467712xorg.jpg" url="www.darenbang.com" area="85" place="福田" />  <AD name="終端5" imgLink="attachments/imgs/ad/201111/023391954847731068xorg.jpg" url="www.darenbang.com/taoletao/front/activity/activityBuyer.do" area="85" place="福田" />  <AD name="終端6" imgLink="attachments/imgs/ad/201111/007393856959106082xorg.jpg" url="www.darenbang.com/taoletao/front/activity/activityFront.do" area="85" place="福田" /></ADRoot>

點擊FLASH圖片跳轉網站,再通過連接打開相應的網站,這個在flash代碼進行了定義,所以使用cmd命令就可以打開相應的網站,再根據鏈接跳轉到相應的網站,打開的網站也之前在我們的程序中進行打開,使用的是webBrowser控件,這樣就控制只能打開我們所指定的網站。

 1         #region * 點擊FLASH圖片跳轉網站 2         private void axShockwaveFlash1_FSCommand(object sender, AxShockwaveFlashObjects._IShockwaveFlashEvents_FSCommandEvent e) 3         { 4             if (e.command == "cmd") 5             { 6                 WebForm xForm = new WebForm(e.args.ToString() + "?id=" + userIDStr);//設定跳轉的網站+用戶ID 7                 xForm.Show(); 8             } 9         }10         #endregion

程序啟動時會調用Timer事件,啟動程序升級,在相應的時間節點(可以設定多個時間檢測是否需要升級)進行升級。

 1         #region * 啟動升級程序 2         ArrayList AutoTask = new ArrayList(); 3         private void timer1_Tick(object sender, EventArgs e) 4         { 5             System.DateTime dtAuto = DateTime.Now; 6             AutoTask.Add("00:00:00"); 7  8             for (int n = 0; n < AutoTask.Count; n++) 9             {10                 if (dtAuto.ToLongTimeString().Equals(AutoTask[n]))11                 {12                     System.Diagnostics.Process.Start(Application.StartupPath + @"http://AutoUpdater.exe");         //啟動程序13                     this.Close();//--關閉升級程序14                     this.Dispose();15                 }16             }17         }18         #endregion

升級程序會做幾件事情:

1. 通過Webservice下載一體機的程序,根據版本號比較決定是否需要升級。

2. 通過Webservice下載一體機的廣告圖片,這樣在相應的網站后臺對圖片進行維護,將廣告數據保存在本地的XML文件中,供程序讀取XML文件。

通過WebService下載數據,程序或廣告圖片,實現邏輯如下:

        #region * 通過WebService下載數據        public virtual void DownloadWebServiceData()        {            //--綁定Webservice            ws = new AutoUpdater.WebService.AdvertisWebServicesService();            ws.Url = "http://www.fmafia.com/taoletao/AdvertisWebServices.jws?wsdl";            //--            //--從autorun.xml文件中讀取配置文件            string autPath = "";            autPath = Application.StartupPath + @"http://autorun.xml";//配置文件目錄            if (!File.Exists(autPath))//判斷程序目錄是否存在配置文件            {                MessageBox.Show("配置文件不存在,請聯系管理員!");                return;            }            xmldoc.Load(autPath);//加載XML文件            XmlNodeList audList = xmldoc.SelectSingleNode("Root").ChildNodes;//獲取Root節點的所有子節點            foreach (XmlNode xn in audList)//遍歷所有子節點            {                XmlElement xe = (XmlElement)xn;//將子節點類型轉換為XmlElement類型                idStr = Convert.ToInt32(xe.GetAttribute("TerminalID"));//終端機ID                areaStr = Convert.ToInt32(xe.GetAttribute("AreaID
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 林芝县| 高邮市| 安徽省| 宝鸡市| 甘肃省| 麻阳| 遵义市| SHOW| 长顺县| 桂东县| 浮山县| 全椒县| 绍兴县| 蕲春县| 奉节县| 乐业县| 清新县| 西畴县| 巧家县| 营山县| 孝义市| 临沂市| 泉州市| 容城县| 陆川县| 徐汇区| 巍山| 社旗县| 同仁县| 通河县| 郸城县| 泰州市| 新疆| 永定县| 清新县| 泸西县| 唐河县| 余庆县| 正镶白旗| 东乡县| 牡丹江市|