2006年11月14日
#
大家都做過基于MFC Dialog的應用程序,我更喜歡用CFrameWnd派生類來實現應用程序的主框架,我不太喜歡SDI模板,又是Document又是View的,MFC背著你干了很多事情!
好了,說說問題,大家如果作過基于CFrameWnd的主窗口,可能會發現主窗口會有一個3D的邊框,一開始我用ModifyStyle發現不行,那就在PreCreateWindow里面吧!呵呵,也不管用,跟進MFC的代碼,發現CFrameWnd::PreCreateWindow會重置dwExStyle,好了看代碼吧!
BOOL?CMainFrame::PreCreateWindow(CREATESTRUCT
&
?cs)?
{
??BOOL?bRet
=
CFrameWnd::PreCreateWindow(cs);
??
if
(bRet)
{
???cs.dwExStyle
&=~
WS_EX_CLIENTEDGE;
???
return
?TRUE;
?}
?
return
?FALSE;
}
2006年9月27日
#
好象還是有點不開心,大概搞TMD 軟件每天都有解決不完的問題,尤其象我這種不知道天高地厚的人更是如此!
牢騷要發,也得繼續搞,屏幕捕獲的算法終于優化出來了,下一步是用ASF Container把數據包裝起來,效果應該不錯,我有點搞不明白的是AVI的索引為什么那么慢,數據量大是一方面,關鍵還是數據組織上存在缺陷,不如MPEG4!
如果順利,應該在10月份就可以拿出一個象樣的版本的錄制軟件了,應該可以斃掉一批垃圾錄屏軟件了,這是我希望看到的!
下面的事情還很多,每個都夠啃的,我還得多些耐心,少些焦慮,也希望認識一些朋友大家一塊合作!
2006年9月18日
#
我要開始征途了,也許前面是坦途或荊棘,這已經都不重要了,更多在于我的機會也許只能在此征途體現了,如果失敗,也許就意味著我在IT行業的徹底顛覆,我認了!
我把自己blog定為行勝于言,意義就在這里,我的計劃開始了,從今天開始!
2006年7月24日
#
大家開發網絡程序,經常要連接其他主機,如果在xp上運行,一定會提示你,只有選擇解除阻止才能實現正常的網絡連接.那么有沒有辦法在防火墻的例外列表里面通過編程的方式加入自己的程序呢?
?當然有了,不然就不要介紹了
xp的系統目錄下面有個hnetcfg.dll就是這個編程接口,頭文件是netfw.h,初始化代碼如下:
INetFwProfile* m_pFireWallProfile=NULL;
HRESULT?hr?
=
?S_FALSE;
????INetFwMgr
*
?fwMgr?
=
?NULL;
????INetFwPolicy
*
?fwPolicy?
=
?NULL;

????FW_ERROR_CODE?ret?
=
?FW_NOERROR;
????
try
????
{
????????
if
(?m_pFireWallProfile?)
????????????
throw
?FW_ERR_INITIALIZED;

????????
//
?Create?an?instance?of?the?firewall?settings?manager.
????????hr?
=
?CoCreateInstance(?__uuidof(NetFwMgr),?NULL,?CLSCTX_INPROC_SERVER,?__uuidof(?INetFwMgr),?(
void
**
)
&
fwMgr?);

????????
if
(?FAILED(?hr?))
????????????
throw
?FW_ERR_CREATE_SETTING_MANAGER;

????????
//
?Retrieve?the?local?firewall?policy.
????????hr?
=
?fwMgr
->
get_LocalPolicy(?
&
fwPolicy?);
????????
if
(?FAILED(?hr?))
????????????
throw
?FW_ERR_LOCAL_POLICY;

????????
//
?Retrieve?the?firewall?profile?currently?in?effect
????????hr?
=
?fwPolicy
->
get_CurrentProfile(?
&
m_pFireWallProfile?);
????????
if
(?FAILED(?hr?))
????????????
throw
?FW_ERR_PROFILE;

????}
????
catch
(?FW_ERROR_CODE?nError)

????
{
????????ret?
=
?nError;
????}
????
if
(?fwPolicy?)
????????fwPolicy
->
Release();
????
if
(?fwMgr?)
????????fwMgr
->
Release();

????
return
?ret;
將程序名稱加入例外列表:
WinXPSP2FireWall::AddApplication(?const?wchar_t*?lpszProcessImageFileName,?const?wchar_t*?lpszRegisterName?)


{
????FW_ERROR_CODE?ret?=?FW_NOERROR;
????HRESULT?hr;
????BOOL?bAppEnable;
????BSTR?bstrProcessImageFileName?=?NULL;
????BSTR?bstrRegisterName?=?NULL;
????INetFwAuthorizedApplication*?pFWApp?=?NULL;
????INetFwAuthorizedApplications*?pFWApps?=?NULL;

????try

????
{
????????if(?m_pFireWallProfile?==?NULL?)
????????????throw?FW_ERR_INITIALIZED;
????????if(?lpszProcessImageFileName?==?NULL?||?lpszRegisterName??==?NULL?)
????????????throw?FW_ERR_INVALID_ARG;

????????//?First?of?all,?check?the?application?is?already?authorized;
????????FW_ERROR_CODE??nError?=?this->IsAppEnabled(?lpszProcessImageFileName,?bAppEnable?);
????????if(?nError?!=?FW_NOERROR?)
????????????throw?nError;

????????//?Only?add?the?application?if?it?isn't?authorized
????????if(?bAppEnable?==?FALSE?)

????????
{
????????????//?Retrieve?the?authorized?application?collection
????????????hr?=?m_pFireWallProfile->get_AuthorizedApplications(?&pFWApps?);
????????????if(?FAILED(?hr?))
????????????????throw?FW_ERR_AUTH_APPLICATIONS;

????????????//?Create?an?instance?of?an?authorized?application
????????????hr?=?CoCreateInstance(?__uuidof(NetFwAuthorizedApplication),?NULL,?CLSCTX_INPROC_SERVER,?__uuidof(INetFwAuthorizedApplication),?(void**)&pFWApp);
????????????if(?FAILED(?hr?))
????????????????throw?FW_ERR_CREATE_APP_INSTANCE;

????????????//?Allocate?a?BSTR?for?the?Process?Image?FileName
????????????bstrProcessImageFileName?=?SysAllocString(?lpszProcessImageFileName?);
????????????if(?SysStringLen(?bstrProcessImageFileName?)?==?0)
????????????????throw?FW_ERR_SYS_ALLOC_STRING;

????????????//?Set?the?process?image?file?name
????????????hr?=?pFWApp->put_ProcessImageFileName(?bstrProcessImageFileName?);
????????????if(?FAILED(?hr?)?)
????????????????throw?FW_ERR_PUT_PROCESS_IMAGE_NAME;

????????????//?Allocate?a?BSTR?for?register?name
????????????bstrRegisterName?=?SysAllocString(?lpszRegisterName?);
????????????if(?SysStringLen(?bstrRegisterName?)?==?0)
????????????????throw?FW_ERR_SYS_ALLOC_STRING;
????????????//?Set?a?registered?name?of?the?process
????????????hr?=?pFWApp->put_Name(?bstrRegisterName?);
????????????if(?FAILED(?hr?))
????????????????throw?FW_ERR_PUT_REGISTER_NAME;
????????????
????????????//?Add?the?application?to?the?collection
????????????hr?=?pFWApps->Add(?pFWApp?);
????????????if(?FAILED(?hr?))
????????????????throw?FW_ERR_ADD_TO_COLLECTION;
????????}
????}
????catch(?FW_ERROR_CODE?nError?)

????
{
????????ret?=?nError;
????}

????SysFreeString(?bstrProcessImageFileName?);
????SysFreeString(?bstrRegisterName?);

????if(?pFWApp?)
????????pFWApp->Release();
????if(?pFWApps?)
????????pFWApps->Release();

????return?ret;
}
2006年7月22日
#
現今的即時通信軟件都實現了音頻、視頻互通的功能,這得益于視頻編碼技術的應用,目前市面上Microsoft 有MPEG4 v3,DIVX,XVID等等不一而足,但目前市場上好象對用戶桌面錄制技術關注不夠,因為大家知道桌面圖象和運動圖象是不一樣的,這也造成優秀的桌面錄制軟件非常缺乏。
為什么要討論桌面壓縮呢?因為起應用領域非常廣泛,第一他用在課件制作技術方面,可以完整還原教師的培訓過程,尤其是操作類培訓的課程更有實際意義。第二桌面共享依賴于桌面壓縮技術,更好的壓縮效率和質量將使得低帶寬下的高質量桌面共享成為可能?
大家都知道桌面壓縮技術的實現可以基于RLE或HUFFMAN或其他更高級的算法進行實現,如何實現更為優秀的回放效果和質量,是目前這些方法所不能解決的。
同時,為了兼容應用需求,錄制的輸出格式也有很多要求,比如實現網上點播、錄制成ASF格式等。
在最近一段時間的開發過程和實現過程中,我嘗試了一些新的方法,取得了一些突破,但離自己最終的想法還有一定距離,如果大家感興趣的話,可以到我的網站下載:屏蹤幻影,由于目前軟件還不是非常完善,所以目前還無法公開代碼,在后續的時間里我會公開程序結構和內部代碼實現。
希望大家對我的軟件實現提出建議和修改意見。
2006年7月6日
#
?音量調節是實現互聯網語音通信的重要環節,很多公司自行實現了有關音量調節的向導,無奈水平各異,千差萬別.微軟公司也給出了解決方案,不過是在RTC實現,需要安裝RTC運行時.
?? 今天給大家介紹的使用DirectX中有關DirectVoice中的實現來解決我們的問題:
//http://www.handytech.cn
#include <dvoice.h>
#pragma? comment(lib,"dxguid.lib")
void CTestDlg::OnButton1()
{
?// TODO: Add your control notification handler code here
?IDirectPlayVoiceTest* pTest;
?HRESULT hr=CoCreateInstance(CLSID_DirectPlayVoiceTest,NULL,CLSCTX_INPROC_SERVER,IID_IDirectPlayVoiceTest,(void**)&pTest);
?if(SUCCEEDED(hr))
?{
??pTest->CheckAudioSetup(&DSDEVID_DefaultVoicePlayback,&DSDEVID_DefaultCapture,NULL,DVFLAGS_ALLOWBACK);
??pTest->Release();
?}
? OK上面的代碼就調用了DirectVoice中的實現,大家看看效果!?
?