顯示具有 C# 標籤的文章。 顯示所有文章
顯示具有 C# 標籤的文章。 顯示所有文章

星期二, 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


簡單範例:

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參數時多了一個中括號
只要把中括號刪掉就好囉

主要是更動下面兩部分

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

[C#] json

在玩 plurk api 看到一個東西,覺得蠻好用的
以後應該有機會用到,先記錄一下

Newtonsoft.Json

星期六, 10月 02, 2010

C#程式以系統管理員的身份執行 (UAC)

在Vista或win7中,執行一些會修改到系統的程式時,系統會向你要求管理權限,否則會執行失敗
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
<?xml version="1.0" encoding="utf-8" ?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0" >
  <assemblyIdentity version="1.0.0.0" processorArchitecture="X86" name="someExecName" type="win32" />
  <description>Program description</description>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="requireAdministrator" />
      </requestedPrivileges>
    </security>
  </trustInfo>
</assembly>


參考:
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字元(如中文字的目錄)
解決方法:
  1. 在Windows系統新增一個環境變數名稱叫TRACKFILEACCESS,值為false。
  2. 把那個有問題的專案按右鍵選[Edit Project File],然後在那個開啟的.csproj檔案中,在所有的編譯配置的<PropertyGroup/>的節點內,新增<TrackFileAccess>false</TrackFileAccess>,存檔後重新載入該專案。
  3. 把專案使用的.net framework升級到.net 4.0。 http://zhidao.baidu.com/question/181188562.html?push=ql




星期日, 9月 19, 2010

找不到System.Management 內的 Class

想在C#內玩一下WMI,卻發現使用

1
using System.Management;

之後,還是沒辦法使用裡面的Class
什麼 ManagementBaseObject 、 ManagementObject 阿..都沒看見

查了一下資料,發現竟然還要另外加參考才可以 (什麼詭異設定)


1
2
3
1. 開啟方案總管
2. 選擇目前方案內的參考案右鍵 -> 加入參考
3. 把 System.Management 和 System.Management.Instrumentation 加進參考內


再次試試看,應該就可以了
仍然沒辦法的話,重開VC#並重複一次以上動作,應該就可以了

參考:http://stackoverflow.com/questions/2075391/managementbaseobject-not-found

ASP.NET AJAX Advance Tips & Tricks (5) UpdatePanel 與 jQuery

http://www.cnblogs.com/blodfox777/archive/2008/12/08/1347805.html
http://www.dotblogs.com.tw/yc421206/archive/2009/04/23/8142.aspx

星期四, 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

出自阿彬

星期五, 7月 02, 2010

XNA 按鍵偵測

KeyboardState kbs;

kbs = Keyboard.GetState();
if (kbs.IsKeyDown(Keys.A) == true)
    move.X -= 1;
if (kbs.IsKeyDown(Keys.D) == true)
    move.X += 1;
if (kbs.IsKeyDown(Keys.S) == true)
    move.Y += 1;
if (kbs.IsKeyDown(Keys.W) == true)
    move.Y -= 1;

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;

星期六, 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; //使用這個應用程式的命名空間
然後用
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大全加自己的一點心得