【c++】缺少streams.h的解决方法

这几天在学DirectShow的开发,一个streams.h头文件折腾了好几天才搞定。简单总结一下出现缺少streams.h的解决方法和DirectShow开发环境的搭建。 开发包方面,我用的是Microsoft DirectX 9.0 SDK。 streams.h这个头文件现在在%\DX9 SDK\Samples\C++\DirectShow\BaseClasses路径下,首先要把这个路径添加到VC的Include Directories下面。TOOL–option–directories下面框里添加上streams.h的目录)。 debug版的库 strmbasd.lib在安装包\DX9 SDK\Samples\C++\DirectShow\BaseClasses\Debug_Unicode目录下 retail版的库strmbase.lib在%\Program Files\Microsoft Visual Studio\VC98\Lib目录下 因为库有两个,分别对应Debug和Release,你可以把它拷到SDK的Lib目录下,然后在工程的Debug设置和Release设置里设好库的名字就可以了,当然也可以不拷,怎么用随便你。 安装完directx sdk后,要将directx sdk的include和lib目录配置到vc的系统目录中,并且放到标准的vc目录之前,以保证编译器能拿到最新版本的源文件。 配置方法为,打开vc,选择菜单项tool、options、directories,在弹出的对话框中的show directories for中选择include files,添加配置如下(假设directx sdk安装在D:\dxsdk目录下): D:\dxsdk\include D:\dxsdk\samples\c++\directshow\baseclasses D:\dxsdk\samples\c++\common\include 再在show directories for中选择 library files,添加配置如下: D:\dxsdk\lib D:\dxsdk\samples\c++\directshow\baseclasses\debug D:\dxsdk\samples\c++\directshow\baseclassed\release Jhonse技术博客说明: 来源于:http://blog.sina.com.cn/s/blog_5866e3be0100affd.html

【c++】在DirectX 3D中使用CEGUI

一、CEGUI简介     CEGUI,为Crazy Eddie's GUI的缩写,它是一个用C++开发的面向对象的免费界面库,针对游戏开发者,提供了3D环境中的窗口及其部件的图形API。CEGUI在0.4.1之前(包括0.4.1),使用LGPL授权协议,从0.5版本开始则采用了更为宽松的MIT协议。目前使用CEGUI的项目(摘自http://www.cegui.org.uk): Project Xenocide BlitzMax Plant covered GUI 你可以从下面链接得到更多关于CEGUI的知识: (1)    http://www.cegui.org.uk/wiki/index.php/Main_Page (2)    http://sourceforge.net/projects/crayzedsgui/ (3)    http://www.cegui.org.uk/wiki/index.php/FAQ 二、CEGUI结构概览     从上一小节中给出的链接,你可以下载CEGUI的SDK。该SDK以DLL的形式提供,下面简单介绍一下这些DLL的作用及分类: 三、在DirectX中使用CEGUI     CEGUI是一个跨平台的图形界面库,其平台无关性是通过对平台的封装实现的。在上一节中我们分析了CEGUI的SDK结构,在其渲染子系统中提供了Windows平台上的DirectX8.1/9.0的支持,因此不难推断在自己写的程序中应该可以使用CEGUI。 3.1 CEGUI的资源组织     CEGUI的资源目录为datafiles,其组织情况如下: configs:资源配置文件 fonts:字体资源 imagesets:各种图片资源(如:皮肤图片等) layouts:布局文件(可以利用CEGUILayout得到) lookfeel:皮肤配置文件 lua_scripts:Lua脚本文件 schemes:xml配置文件的scheme     我们主要关注的是layouts中的文件,这些xml文件可以由CEGUI的附带界面设计工具CEGUILayout得到。如下图所示: 3.2 程序中使用CEGUI     在这一小节中,我将使用MFC+DirectX9.0c+CEGUI创建一个DEMO,下面仅列出一些关键代码,在文章最后给出了DEMO的源代码下载链接。如果你对在MFC或者Win32 SDK中使用DirectX 3D还不熟悉,可以参考Direct3D入门之框架的搭建一文。 (1)    创建DirectX 3D设备m_d3dDevice; (2)    创建CEGUI::Render对象:       m_pCEGUIRender = new CEGUI::DirectX9Renderer(m_d3dDevice , 0);    … Continue reading “【c++】在DirectX 3D中使用CEGUI”

【c++】fatal error C1083: Cannot open include file: ‘dxerr9.h’ 解决方法

fatal error C1083: Cannot open include file: 'dxerr9.h': No such file or directory 这个问题主要是头文件中“dxerr9.h”是D3DX9的版本,而你有可能用了比它更新的版本,比如D10或者D11。因为在后续版本汇总把err头文件改成了“DxErr.h”这个可以到DirectX的安装目录/Include下去确认。所以需要改的是将相应的头文件和附加项改掉。 1、将头文件include<dxerr9.h>改成include<DxErr.h> 无关大小写. 2、将附加项中的DxErr9.lib改成DxErr.lib

【c++】无法打开包括文件:“d3dx9.h”: No such file or directory 解决办法

今天用vc6.0试学DirectX知识,于是在官网下载最新的DirectX  SDK,然后解压之后,就开始调用sdk库,结果一编译就出现d3dx9.h找不到:【无法打开包括文件:“d3dx9.h”: No such file or directory】 ,于是只能上百度查查。解决方法如下: 1.  首先搜索:“d3dx9.h”所在的路径; 本文该文件在:D:\Program Files\Microsoft DirectX SDK (August 2007)\Include 2. 设置include路径:    工程–属性—c/c++—常规—附加头文件(第一行就是)在这里输入你哪文件所在的目录,多个目录用分 号分割,即输入:D:\Program Files\Microsoft DirectX SDK (August 2007)\Include 3. 设置lib的路径:工程–属性—链接—常规—附加库目录(中间部分),在这里输入lib文件的目录,即:D:\Program Files\Microsoft DirectX SDK (August 2007)\Lib\x86

【c++】webBrowser强制在本窗口打开,禁止在新窗口打开

有时需要用WebBrowser加载URL,来实现某些功能。而这时,我们就不希望所打开的页面中的链接,在新窗口中打开,因为这样的话,实际上是用系统默认的浏览器打开了,从而脱离了你的WebBrowser,也就不能被你所控制了。 要解决这个问题,可以使用下面的方法: 假设WebBrowser的Name是 webBrowser 简单方法-利用加载完成事件将所有的链接和form的target值改为”_seft”: private void webBrowser_DocumentCompleted(object sender, WebBrowserDocumentCompletedEventArgs e) {     //将所有的链接的目标,指向本窗体     foreach (HtmlElement archor in this.webBrowser.Document.Links)     {         archor.SetAttribute(“target”, “_self”);     }     //将所有的FORM的提交目标,指向本窗体     foreach (HtmlElement form in this.webBrowser.Document.Forms)     {         form.SetAttribute(“target”, “_self”);     } } 取消新窗口事件 private void webBrowser1_NewWindow(object sender, CancelEventArgs e) {      e.Cancel = true; } 将 WebBrowser 的 AllowWebBrowserDrop 设为 false(禁止拖放) 将 WebBrowser 的 WebBrowserShortcutsEnabled 设为 false(禁止使用快捷键) 将 WebBrowser 的 IsWebBrowserContextMenuEnabled 设为 false(禁止右键上下文菜单)

【c++】CHtmlView链接在本窗口中打开(类似于在另一个标签中打开)

代码实现: void C*****View::OnNewWindow2(LPDISPATCH* ppDisp, BOOL* Cancel) {  // TODO: Add your specialized code here and/or call the base class  CWinApp*   pApp   =   AfxGetApp();       //   Get   the   correct   document   template.     POSITION   pos   =   pApp-> GetFirstDocTemplatePosition();      CDocTemplate*   pDocTemplate   =   pApp-> GetNextDocTemplate(   pos   );       //   Create   a   new   frame.     CFrameWnd*   pFrame   =   pDocTemplate-> … Continue reading “【c++】CHtmlView链接在本窗口中打开(类似于在另一个标签中打开)”

【c++】CHtmlView屏蔽js脚本

实现代码: void C******View::OnNavigateComplete2(LPCTSTR strURL) {  // TODO: Add your specialized code here and/or call the base class    CComPtr<IDispatch>   spDisp   =   GetHtmlDocument();     if(spDisp!=NULL)      {         CComPtr<IHTMLDocument2> doc;         spDisp->QueryInterface(IID_IHTMLDocument2, reinterpret_cast<void**>(&doc));         if(doc != NULL)         {               IHTMLWindow2 * pIhtmlwindow2 = NULL;             doc->get_parentWindow(&pIhtmlwindow2);             if(pIhtmlwindow2 != NULL)             {//”function fnOnError(msg,url,lineno){alert(‘script error:\\n\\nURL:’+url+’\\n\\nMSG:’+msg +’\\n\\nLine:’+lineno);return … Continue reading “【c++】CHtmlView屏蔽js脚本”

【C++】CHtmlView屏蔽右键菜单以及选择功能实现

如下代码实现: int nVirtKey;  //屏蔽右键菜单  if ((pMsg->message == WM_RBUTTONDOWN) || (pMsg->message == WM_RBUTTONDBLCLK))              return TRUE;  //禁止招标标显示I型指针  HCURSOR curIbeam = LoadCursor( NULL, IDC_IBEAM );  if ( GetCursor() == curIbeam )  {  HCURSOR curArrow = LoadCursor( NULL, IDC_ARROW );    SetCursor( curArrow );  }  //禁止选择  if ( pMsg->message == WM_MOUSEMOVE )  {  nVirtKey = GetKeyState( VK_LBUTTON ); … Continue reading “【C++】CHtmlView屏蔽右键菜单以及选择功能实现”

【c++】全局钩子技术 – 监视打开的程序

注: dll文件 第一步: 定义全局钩子 HHOOK g_hHookShell; 第二步: LRESULT CALLBACK ShellHookProc(int nCode,WPARAM wParam,LPARAM lParam) { if (nCode == HSHELL_WINDOWCREATED)// Windows Created { //针对WH_SHELL的HSHELL_WINDOWCREATED,wParam传递的是打开创建的窗口名称,而lParam无效(0). //PostMessage(g_hWndMain,WM_SHELLHOOK,wParam,lParam); HWND m_hWnd = (HWND)wParam; char strTitle[256]; ::GetWindowText(m_hWnd,strTitle,1024); MessageBox(m_hWnd,strTitle,”提示:”,MB_OK); } return CallNextHookEx(g_hHookShell,nCode,wParam,lParam); } BOOL SetHook() { g_hHookShell = SetWindowsHookEx(WH_SHELL, ShellHookProc,GetModuleHandle(“QJHook”),0); return g_hHookShell ? TRUE : FALSE; } BOOL DestroyHook() { if (g_hHookShell == … Continue reading “【c++】全局钩子技术 – 监视打开的程序”

【c++】线程注入技术

代码如下: DWORD ProcID = (DWORD)GetDlgItemInt(IDC_EDIT_PID); //获得进程句柄 HANDLE ProcHandle = OpenProcess(PROCESS_ALL_ACCESS,FALSE,ProcID); //DLL路径 CString str=”E:\\项目\\插件制作\\软件\\hookdll\\test\\Debug\\test.dll”; //以可执行,可写,可读方式创建虚拟空间 LPVOID VirAddress = VirtualAllocEx(ProcHandle,NULL,strlen(str)+1,MEM_COMMIT,PAGE_EXECUTE_READWRITE); //写入空间 WriteProcessMemory(ProcHandle,VirAddress,(LPVOID)str.LockBuffer(),strlen(str)+1,NULL); HMODULE KHandle = LoadLibrary(“Kernel32.dll”); LPTHREAD_START_ROUTINE LBAddress = (LPTHREAD_START_ROUTINE)GetProcAddress(KHandle,”LoadLibraryA”); HANDLE remoteHandle = CreateRemoteThread(ProcHandle,NULL,NULL,LBAddress,VirAddress,NULL,NULL); WaitForSingleObject(remoteHandle,INFINITE); CloseHandle(remoteHandle); CloseHandle(ProcHandle); 取消注入: 取消的方法: FreeLibrary  以上一样