星期二, 8月 09, 2011
C#內嵌WMP用法
右擊工具箱->選擇項(I)... -> 顯示"選擇工具箱項" -> COM組件 -> Windows Media Player wmp.dll 添加
axWindowsMediaPlayer1.windowlessVideo = false; //設為false後雙擊屏幕可以全屏
axWindowsMediaPlayer1.fullScreen = true; //設播放器全屏播放
axWindowsMediaPlayer1.URL = @"mms://192.168.0.102/vod/jingwei.wma";
axWindowsMediaPlayer1.Ctlcontrols.play(); //播放
axWindowsMediaPlayer1.Ctlcontrols.stop(); //停止
axWindowsMediaPlayer1.Ctlcontrols.pause(); //暫停
axWindowsMediaPlayer1.settings.autoStart = true; //自動播放
axWindowsMediaPlayer1.settings.mute = false; //靜音
axWindowsMediaPlayer1.settings.volume = 100; //音量 int 0 ~ 100 100 是最大音量
axWindowsMediaPlayer1.currentMedia.duration.ToString();//影片長度
axWindowsMediaPlayer1.Ctlcontrols.currentPosition = 30; //當前的播放位置 double
axWindowsMediaPlayer1.currentMedia.getItemInfo("Title");//標題
axWindowsMediaPlayer1.currentMedia.getItemInfo("Author");//作者
//*****************************************************************************//
MediaPlay 以前版本
右擊工具箱->選擇項(I)... -> 顯示"選擇工具箱項" -> COM組件 -> 瀏覽(B)... -> C:WINDOWS\system32\msdxm.ocx -> 打開
Windows Media Player msdxm.dll 添加
label4.Text = axMediaPlayer1.Volume.ToString(); //音量
axMediaPlayer1.FileName = @"mms://218.98.101.164/vod/jingwei.wma";//文件路徑
axMediaPlayer1.Play(); //開始播放
//******************************************************************************//
//****************************************************************************//
右擊工具箱->選擇項(I)... -> 顯示"選擇工具箱項" -> COM組件 -> RealPlayer G2 Control rmoc3260.dll 添加
axRealAudio1.Source = @"F:\mp3\hh.mp3"; //播放路徑
axRealAudio1.CanPlayPause(); //Bool 型是否能暫停
axRealAudio1.CanPause(); //暫停
axRealAudio1.DoPlayPause(); //正在播放的影片暫停播放
axRealAudio1.CanPlay(); //Bool是否能播放
axRealAudio1.DoPlay(); //播放
axRealAudio1.CanStop() //播放是否可以停止
axRealAudio1.DoStop(); //播放停止
axRealAudio1.SetCenter(true); //按影片原大小播放
axRealAudio1.SetFullScreen();//播放器全屏播放影片
int place = axRealAudioP.GetPosition();
axRealAudio1.DoStop();
axRealAudio1.SetCente*(**lse); //拉伸播放 axRealAudio1.SetCenter(true); 按影片原始大小播放
axRealAudio1.DoPlay();
axRealAudio1.SetPosition(place);
nResL = axRealAudio1.GetPosition(); //獲得當前影片 的播放進度
label1.Text = axRealAudio1.GetTitle(); //獲得影片的標題
label2.Text = "當前的帶寬: " + axRealAudio1.GetBandwidthCurrent() / 1024 + "KB";//當前影片的當前的帶寬
label3.Text = "連接的帶寬: " + axRealAudio1.GetConnectionBandwidth() / 1024 + "KB"; //當前的連接的帶寬
參考 http://www.csharpwin.com/csharpspace/9028r9970.shtml
星期日, 3月 20, 2011
C# RichTextBox 文字分段改變顏色的方法
因為RichTextBox 的 SelectionColor 指的是選中的文字顏色,所以也包含之後加入的文字
如果需求只是簡單的改變下一行文字的顏色的話,可以這麼用
如果需求只是簡單的改變下一行文字的顏色的話,可以這麼用
private void writeMsg(string msg, Color color = new Color()) { processBox.SelectionColor = color; processBox.AppendText(msg + Environment.NewLine); } /* writeMsg("黑色文字"); writeMsg("紅色文字", Color.Red); */
HtmlAgilityPack C#的一個很方便的html paser
比較詳細的介紹可在這邊看
http://msdn.microsoft.com/zh-tw/ee787055
簡單範例:
不過不知道為甚麼.. 它用XPath分析出來的的東西跟我想的有點差距
因為這樣我還用了Firefox的xpath checker去看,出來的東西果然不一樣
分享一個我的解決辦法~
先設定中斷點在 SelectNodes 方法* 後,然後直接下需要的XPath的Html tag (EX: //input)
之後在每個 HtmlNode 都會有它的絕對XPath路徑,直接去看那邊吧
* SelectSingleNode 是取單一個tag,傳回HtmlNodeCollection
SelectNodes 是取多個符合的,傳回HtmlNode
http://msdn.microsoft.com/zh-tw/ee787055
簡單範例:
HtmlAgilityPack.HtmlDocument doc = new HtmlAgilityPack.HtmlDocument(); doc.LoadHtml(targetHTML); HtmlNode n = doc.DocumentNode.SelectSingleNode("/html[1]/body[1]/table[1]/tr[1]/td[2]/font[1]"); string activity = HtmlEntity.DeEntitize(n.InnerHtml).Trim(); HtmlNode node; if (key == "sex") node = doc.DocumentNode.SelectSingleNode("//input[@name='" + key + "' and @checked]"); else node = doc.DocumentNode.SelectSingleNode("//input[@name='" + key + "' ]"); if (node != null) signData.Add(key, node.Attributes["value"].Value); else if ((signData.ContainsKey("chkmeal") && signData["chkmeal"] == "1") && key == "meal") { if (foodDic.ContainsKey(food)) signData.Add(key, foodDic[food]); else signData.Add(key, foodDic["不用餐"]); }
不過不知道為甚麼.. 它用XPath分析出來的的東西跟我想的有點差距
因為這樣我還用了Firefox的xpath checker去看,出來的東西果然不一樣
分享一個我的解決辦法~
先設定中斷點在 SelectNodes 方法* 後,然後直接下需要的XPath的Html tag (EX: //input)
之後在每個 HtmlNode 都會有它的絕對XPath路徑,直接去看那邊吧
* SelectSingleNode 是取單一個tag,傳回HtmlNodeCollection
SelectNodes 是取多個符合的,傳回HtmlNode
星期四, 3月 03, 2011
dotplurk 的 getplurks bug
會出這麼嚴重的錯也太誇張了
這個 bug 會導致在 getPlurks 時,怎麼設 offset 都沒用
總覺得這應該是頗常用到的 function ,卻 google 不到甚麼資料
還是用 .net 開發 plurk bot 的人太少了XD
要不是有去翻 source code 我現在應該還是怎麼做都做不出來...
言歸正傳
這個bug是因為作者不知道為甚麼在傳offset參數時多了一個中括號
只要把中括號刪掉就好囉
主要是更動下面兩部分
這樣就OK了
懶惰的人也可以下載我改過的檔案 PlurkApi.dll [載點不保證永久有效]
另外我也將這個bug回報了,希望能快點修好囉
這個 bug 會導致在 getPlurks 時,怎麼設 offset 都沒用
總覺得這應該是頗常用到的 function ,卻 google 不到甚麼資料
還是用 .net 開發 plurk bot 的人太少了XD
要不是有去翻 source code 我現在應該還是怎麼做都做不出來...
言歸正傳
這個bug是因為作者不知道為甚麼在傳offset參數時多了一個中括號
只要把中括號刪掉就好囉
主要是更動下面兩部分
public plurks getPlurks(DateTime offset, int limit, string filter) { ... var url = string.Format("{0}/{1}?api_key={2}&offset={3}&limit={4}&filter={5}", apiUrl, apiAction, apiKey, offset.ToUniversalTime().ToString("s"), limit, filter); ... } public plurks getPlurks(DateTime offset, int limit) { ... var url = string.Format("{0}/{1}?api_key={2}&offset={3}&limit={4}", apiUrl, apiAction, apiKey, offset.ToUniversalTime().ToString("s"), limit); ... }
這樣就OK了
懶惰的人也可以下載我改過的檔案 PlurkApi.dll [載點不保證永久有效]
另外我也將這個bug回報了,希望能快點修好囉
星期六, 2月 26, 2011
星期二, 10月 05, 2010
星期六, 10月 02, 2010
C#程式以系統管理員的身份執行 (UAC)
在Vista或win7中,執行一些會修改到系統的程式時,系統會向你要求管理權限,否則會執行失敗
C#預設則是使用目前的標準權限,所以執行一些指令就會因為權限不足失敗
參考一下MSDN上的說明:
在 Windows Vista 中,使用者的權限是由使用者帳戶控制項 (UAC) 決定。如果您是內建 Administrators 群組的成員,系統會將兩個執行階段存取語彙基元 (Token) 指派給您:標準使用者存取語彙基元及管理員存取語彙基元。根據預設,您會屬於標準使用者角色。若要執行會存取效能計數器的程式碼,您必須先將您的權限從標準使用者提高為系統管理員。您可以在啟動應用程式時進行這項處理,其方式是以滑鼠右鍵按一下應用程式圖示,並指出您想要以系統管理員的身份執行。
解決:
1.在應用程式中,加入一個【應用程式資訊清單檔案 / app.manifest】。
2.修改新加入的app.manifest內容,在requestedExecutionLevel中,把level 的值改為requireAdministrator。
參考:
http://www.dotblogs.com.tw/jjnnykimo/archive/2009/05/08/8346.aspx
http://www.dotblogs.com.tw/dotnetfactory/archive/2008/12/01/6152.aspx
C#預設則是使用目前的標準權限,所以執行一些指令就會因為權限不足失敗
參考一下MSDN上的說明:
在 Windows Vista 中,使用者的權限是由使用者帳戶控制項 (UAC) 決定。如果您是內建 Administrators 群組的成員,系統會將兩個執行階段存取語彙基元 (Token) 指派給您:標準使用者存取語彙基元及管理員存取語彙基元。根據預設,您會屬於標準使用者角色。若要執行會存取效能計數器的程式碼,您必須先將您的權限從標準使用者提高為系統管理員。您可以在啟動應用程式時進行這項處理,其方式是以滑鼠右鍵按一下應用程式圖示,並指出您想要以系統管理員的身份執行。
解決:
1.在應用程式中,加入一個【應用程式資訊清單檔案 / app.manifest】。
2.修改新加入的app.manifest內容,在requestedExecutionLevel中,把level 的值改為requireAdministrator。
1 2 3 4 5 6 7 8 9 10 11 12 |
|
參考:
http://www.dotblogs.com.tw/jjnnykimo/archive/2009/05/08/8346.aspx
http://www.dotblogs.com.tw/dotnetfactory/archive/2008/12/01/6152.aspx
星期二, 9月 21, 2010
Visual Studio 2010 C# bug :FileTracker : error FTK1011
這個bug在Project使用到Visual Studio裡面提供的資源resource功能(也就是專案中含有圖形介面的元件,例如windows form之類),而且該project實際路徑有包含非ASCII字元(如中文字的目錄)
解決方法:
- 在Windows系統新增一個環境變數名稱叫TRACKFILEACCESS,值為false。
- 把那個有問題的專案按右鍵選[Edit Project File],然後在那個開啟的.csproj檔案中,在所有的編譯配置的<PropertyGroup/>的節點內,新增<TrackFileAccess>false</TrackFileAccess>,存檔後重新載入該專案。
- 把專案使用的.net framework升級到.net 4.0。 http://zhidao.baidu.com/question/181188562.html?push=ql
星期日, 9月 19, 2010
找不到System.Management 內的 Class
想在C#內玩一下WMI,卻發現使用
之後,還是沒辦法使用裡面的Class
什麼 ManagementBaseObject 、 ManagementObject 阿..都沒看見
查了一下資料,發現竟然還要另外加參考才可以 (什麼詭異設定)
再次試試看,應該就可以了
仍然沒辦法的話,重開VC#並重複一次以上動作,應該就可以了
參考:http://stackoverflow.com/questions/2075391/managementbaseobject-not-found
1
|
|
之後,還是沒辦法使用裡面的Class
什麼 ManagementBaseObject 、 ManagementObject 阿..都沒看見
查了一下資料,發現竟然還要另外加參考才可以 (什麼詭異設定)
1 2 3 |
|
再次試試看,應該就可以了
仍然沒辦法的話,重開VC#並重複一次以上動作,應該就可以了
參考:http://stackoverflow.com/questions/2075391/managementbaseobject-not-found
星期三, 9月 15, 2010
星期一, 8月 16, 2010
星期四, 8月 12, 2010
Microsoft.Jet.OLEDB.4.0 提供者並未登錄於本機電腦上
因為Microsoft Jet 沒有支援 64 位元的版本的Driver 所以才會發生錯誤
解決辦法:
1. 請點選標準工具中的「方案組態」下拉方塊,然後選擇「組態管理員」。如下圖:
http://img818.imageshack.us/img818/9089/3e56b726a8784cfeada0a1e.png
2. 點選「使用中的方案平台」下拉方塊,然後選擇「新增」,如下圖:
http://img829.imageshack.us/img829/1417/47eecc1abebf4baaaf165b6.png
3. 當出現「新增方案平台」對話方塊時,請在上方的「輸入或選擇新平台」下拉方塊選擇「x64」,然後按確定,再按「關閉」即可。如下圖:
http://img251.imageshack.us/img251/4138/6f30363a9dde47aa855a0f5.png
出自阿彬
解決辦法:
1. 請點選標準工具中的「方案組態」下拉方塊,然後選擇「組態管理員」。如下圖:
http://img818.imageshack.us/img818/9089/3e56b726a8784cfeada0a1e.png
2. 點選「使用中的方案平台」下拉方塊,然後選擇「新增」,如下圖:
http://img829.imageshack.us/img829/1417/47eecc1abebf4baaaf165b6.png
3. 當出現「新增方案平台」對話方塊時,請在上方的「輸入或選擇新平台」下拉方塊選擇「x64」,然後按確定,再按「關閉」即可。如下圖:
http://img251.imageshack.us/img251/4138/6f30363a9dde47aa855a0f5.png
出自阿彬
星期五, 7月 02, 2010
XNA 碰撞偵測、反彈
延續上一篇
if (squRect.Intersects(boardRectTop))
{
move.Y *= -1; ;
}
if (squRect.Intersects(boardRectBottom))
{
move.Y *= -1;
}
if (squRect.Intersects(boardRectLeft))
{
move.X *= -1;
}
if (squRect.Intersects(boardRectRight))
{
move.X *= -1;
}
可以做個class比較方便
XNA 滑鼠拉動投擲
UPDATA:
MouseState preMouseState, mouseState;
bool flag = false;
Vector2 move;
mouseState = Mouse.GetState();
Rectangle squRect = new Rectangle((int)position.X, (int)position.Y, square.Width, square.Height);
Rectangle mouseRect = new Rectangle(mouseState.X, mouseState.Y, 0, 0);
if (squRect.Intersects(mouseRect) && mouseState.LeftButton == ButtonState.Pressed && flag == false) //squRect.Intersects(mouseRect) : //滑鼠點擊的地方是否在方框內
{
preMouseState = mouseState;
flag = true;
}
if (mouseState.LeftButton == ButtonState.Released && flag == true) //已放開且上個狀態是按下
{
move.X = (mouseState.X - preMouseState.X) * 0.3F;
move.Y = (mouseState.Y - preMouseState.Y) * 0.3F;
flag = false;
}
//move是加速度, position是square的座標
position.X += move.X;
position.Y += move.Y;
//漸變阻尼
if (position.Y >= height - square.Height)
moveX *= 0.95;
else
moveX *= 0.995; //碰到地板阻尼較大
moveY *= 0.98;
MouseState preMouseState, mouseState;
bool flag = false;
Vector2 move;
mouseState = Mouse.GetState();
Rectangle squRect = new Rectangle((int)position.X, (int)position.Y, square.Width, square.Height);
Rectangle mouseRect = new Rectangle(mouseState.X, mouseState.Y, 0, 0);
if (squRect.Intersects(mouseRect) && mouseState.LeftButton == ButtonState.Pressed && flag == false) //squRect.Intersects(mouseRect) : //滑鼠點擊的地方是否在方框內
{
preMouseState = mouseState;
flag = true;
}
if (mouseState.LeftButton == ButtonState.Released && flag == true) //已放開且上個狀態是按下
{
move.X = (mouseState.X - preMouseState.X) * 0.3F;
move.Y = (mouseState.Y - preMouseState.Y) * 0.3F;
flag = false;
}
//move是加速度, position是square的座標
position.X += move.X;
position.Y += move.Y;
//漸變阻尼
if (position.Y >= height - square.Height)
moveX *= 0.95;
else
moveX *= 0.995; //碰到地板阻尼較大
moveY *= 0.98;
星期六, 5月 01, 2010
C# 應用程式設定檔(app.config) & 縮小到右下(NotifyIcon) & Timer
using System.Configuration
讀取設定檔需要的
不過可以用app.config就好
http://www.dotblogs.com.tw/yc421206/archive/2009/04/14/8000.aspx
EX:
using getFlowForm.Properties; //使用這個應用程式的命名空間
然後用
直接讀寫
--
System.Timers.timer 和System.Windows.Forms.Timer不同
前者提供較多選項,而後者則較簡易
前者原本就預設會重複執行,要關閉則用Enable = false;
後者則否,需要AutoReset = true;
--
將程式置於右下角的工具列
NotifyIcon
http://www.dotblogs.com.tw/chou/archive/2009/02/25/7284.aspx
讀取設定檔需要的
不過可以用app.config就好
http://www.dotblogs.com.tw/yc421206/archive/2009/04/14/8000.aspx
EX:
using getFlowForm.Properties; //使用這個應用程式的命名空間
然後用
myIP = Settings.Default.IP;
Settings.Default.IP = "0.0.0.0";
直接讀寫
--
System.Timers.timer 和System.Windows.Forms.Timer不同
前者提供較多選項,而後者則較簡易
前者原本就預設會重複執行,要關閉則用Enable = false;
後者則否,需要AutoReset = true;
--
將程式置於右下角的工具列
NotifyIcon
http://www.dotblogs.com.tw/chou/archive/2009/02/25/7284.aspx
星期六, 2月 27, 2010
用C#操作Xml
Xml的操作應該是非常常用的技巧
前陣子做的抓學校流量的程式
也就是把網頁上的東西撈下來分析而已XD
以下是一些在學的時候參考的網頁
NaCl- C# xml的操作
非常推薦先看完這篇,主要是講較常用的Class: XmlDocument的用法
基本上的東西都可以在這邊了解
接下來不懂的就慢慢翻MSDN了吧XDD
其他參考
yilinliu - [c#]Regular Expression抓取/取代特定資料的說明
KKcat ^_^ - xml大全加自己的一點心得
前陣子做的抓學校流量的程式
也就是把網頁上的東西撈下來分析而已XD
以下是一些在學的時候參考的網頁
NaCl- C# xml的操作
非常推薦先看完這篇,主要是講較常用的Class: XmlDocument的用法
基本上的東西都可以在這邊了解
接下來不懂的就慢慢翻MSDN了吧XDD
其他參考
yilinliu - [c#]Regular Expression抓取/取代特定資料的說明
KKcat ^_^ - xml大全加自己的一點心得
星期五, 2月 19, 2010
Read a Web Page in C#
查了一下資料,用法大概有以下三種,稍微記錄一下
WebClient: Thinking more... - 讀取網頁
WebClient: 利用 WebClient 類別模擬 HTTP POST 表單送出的注意事項
webclient&HttpWebRequest: httpgreenerycn的專欄 - 用C#讀取網頁
WebBrowser: 軟體世界 - [C#] WebBrowser 元件
WebBrowser: 式門遁甲 - (C#)用WebBrowser控制項寫網頁抓取程式之一些心得
HttpWebRequest: 狼翔天地 - C#,從網頁上下載檔案範例
HttpWebRequest: 狼翔天地 - C#, 使用 HttpWebRequest 向網站提交資料
WebBrowser&webclient&HttpWebRequest: 水煮.net - C#三種模擬自動登錄和提交POST信息的實現方法
WebClient: Thinking more... - 讀取網頁
WebClient: 利用 WebClient 類別模擬 HTTP POST 表單送出的注意事項
webclient&HttpWebRequest: httpgreenerycn的專欄 - 用C#讀取網頁
WebBrowser: 軟體世界 - [C#] WebBrowser 元件
WebBrowser: 式門遁甲 - (C#)用WebBrowser控制項寫網頁抓取程式之一些心得
HttpWebRequest: 狼翔天地 - C#,從網頁上下載檔案範例
HttpWebRequest: 狼翔天地 - C#, 使用 HttpWebRequest 向網站提交資料
WebBrowser&webclient&HttpWebRequest: 水煮.net - C#三種模擬自動登錄和提交POST信息的實現方法
訂閱:
文章 (Atom)