﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>C++博客-        &lt;FONT size=4&gt;&lt;strong&gt;&lt;script src="http://www.codechina.net/comm/tuiguang.php?&gt;说我么？没毕业的小p孩呢，而且还是个败家子&lt;/script&gt;&lt;/strong&gt;&lt;FONT&gt;         -文章分类-东南西北</title><link>http://www.cppblog.com/dbsky/category/2086.html</link><description>&lt;FONT &gt;&lt;strong&gt;email:&lt;/strong&gt;
&lt;/FONT&gt;
&lt;input type=text name=email value="Guemcit@163.com"&gt;
&lt;/br&gt;&lt;/br&gt;
&lt;strong&gt;&lt;script src="http://www.codechina.net/comm/tuiguang.php?&gt;程序=对象+消息 &gt;&lt;/script &gt;&lt;/strong&gt;
                        </description><language>zh-cn</language><lastBuildDate>Wed, 21 May 2008 08:05:15 GMT</lastBuildDate><pubDate>Wed, 21 May 2008 08:05:15 GMT</pubDate><ttl>60</ttl><item><title>vc 6.0创建和链接DLL</title><link>http://www.cppblog.com/dbsky/articles/10703.html</link><dc:creator>&lt;FONT color=red&gt;dbsky &lt;/FONT&gt; </dc:creator><author>&lt;FONT color=red&gt;dbsky &lt;/FONT&gt; </author><pubDate>Sun, 30 Jul 2006 10:33:00 GMT</pubDate><guid>http://www.cppblog.com/dbsky/articles/10703.html</guid><wfw:comment>http://www.cppblog.com/dbsky/comments/10703.html</wfw:comment><comments>http://www.cppblog.com/dbsky/articles/10703.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/dbsky/comments/commentRss/10703.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dbsky/services/trackbacks/10703.html</trackback:ping><description><![CDATA[
		<p>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">参照了”<strong><font color="#3c3c3c">梦在天涯“的Blog做了下面这个Test例子：<br /></font></strong>-------------------------------------------------------------------------------------<br />用Win32 Dynamic-Link Library</span>
				<font color="#f70938">
				</font>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">创建</span>
				<font color="#f70938">
				</font>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">Non-MFC DLL</span>
				<font color="#f70938">
				</font>
				<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">动态链接库</span>
				<font color="#f70938">
						<br />
				</font>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">测试用例-&gt;<br />方法一：<br />Test_NonMFCDLL.h：<br />extern "C" _declspec(dllexport) double Add(double a, double b);<br />extern "C" _declspec(dllexport) double Mult(double a, double b);<br /><br />Test_NonMFCDLL.cpp：<br />#include"Test_NonMFCDLL.h"<br /></span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">double  Add(double a, double b)<br />{<br />       return (a+b);<br /> }<br /><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">double  </span>Mult(double a, double b)<br />{<br />       return (a*b);<br />} <br /><font face="宋体">编译成功后生成</font><font face="Verdana">Test_NonMFCDLL.dll,Test_NonMFCDLL.lib<br /><br /><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">方法二：<br /><font face="宋体">删除上个例子工程中的</font><font color="#f70938"></font><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">Test_NonMFCDLL.h</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">文件，新建文本文件<font face="Verdana">Test_NonMFCDLL</font><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">.def<br /></span></span>LIBRARY Test_NonMFCDLL<br />EXPORTS<br />Add  @1     //中间要有个空格<br />Mult  @2<br /><br />现在就测试一下你所写的dll,<font face="宋体">先将</font><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">Test_NonMFCDLL.dll</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">,</span><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">Test_NonMFCDLL.lib</span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">拷贝到当前工程所在的目录下面</span><br /><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">1<font face="宋体">.</font></span><span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">隐式链接<br /><font face="Verdana">UseDLL.h：<br /></font></span></span></font></span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">#pragma comment(lib,"Test_NonMFCDLL.lib")<br />extern "C"_declspec(dllimport) double Add(double a,double b);<br />extern "C"_declspec(dllimport) double Mult(double a,double b);<br /><br />UseDLL.cpp:<br />#include"TestUseDLL.h"<br />#include&lt;stdio.h&gt;<br /></span>
				</span>
				<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">
						<span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">void main()<br />{<br />    double res=Add(1.0,2.0);<br />    printf("%f\n",res);<br />}<br /><br /><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana">2</span> .<span style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 宋体">显式链接</span><span lang="EN-US" style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: Verdana"><br /></span>UseDLL.cpp:<br />#include&lt;stdio.h&gt;<br />#include&lt;windows.h&gt;<br />void main(void)<br />{<br />    typedef  double (*p)    (double a,double b);<br />    p Add;<br />    HINSTANCE hDLL;<br />    hDLL=LoadLibrary("Test_NonMFCDLL.dll");// 加载动态链接库dll 文件； <br />    Add=(p)GetProcAddress(hDLL,"Add");<br />    /*或使用GetProcAddress(hDLL,MAKEINTRESOURCE(1)) ，看上面的Add  @1*/<br />    double res=Add(1.0,2.0);<br />    printf("%f\n",res);<br />    FreeLibrary(hDLL);// 卸载dll 文件； <br />} <br /><br /></span>
						<br />
				</span>
		</p>
<img src ="http://www.cppblog.com/dbsky/aggbug/10703.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dbsky/" target="_blank"><FONT color=red>dbsky </FONT> </a> 2006-07-30 18:33 <a href="http://www.cppblog.com/dbsky/articles/10703.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[转载] -&gt; 对键盘、鼠标、显示器、桌面操作小结 </title><link>http://www.cppblog.com/dbsky/articles/9333.html</link><dc:creator>&lt;FONT color=red&gt;dbsky &lt;/FONT&gt; </dc:creator><author>&lt;FONT color=red&gt;dbsky &lt;/FONT&gt; </author><pubDate>Mon, 03 Jul 2006 11:36:00 GMT</pubDate><guid>http://www.cppblog.com/dbsky/articles/9333.html</guid><wfw:comment>http://www.cppblog.com/dbsky/comments/9333.html</wfw:comment><comments>http://www.cppblog.com/dbsky/articles/9333.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/dbsky/comments/commentRss/9333.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dbsky/services/trackbacks/9333.html</trackback:ping><description><![CDATA[
		<p>一 键盘 <br />1.1 Disabling Low-level Keys</p>
		<p>
				<br />#define _WIN32_WINNT 0x0400<br />#include <br />LRESULT CALLBACK LowLevelKeyboardProc(int nCode, <br />           WPARAM wParam, LPARAM lParam) <br />{<br /> BOOL fEatKeystroke = FALSE;<br /> <br /> if (nCode == HC_ACTION) {<br />  switch (wParam) {<br />  case WM_KEYDOWN:  <br />  case WM_SYSKEYDOWN:<br />  case WM_KEYUP:    <br />  case WM_SYSKEYUP: <br />   PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT) lParam;<br />   fEatKeystroke = <br />    ((p-&gt;vkCode == VK_TAB)    &amp;&amp;  ((p-&gt;flags &amp; LLKHF_ALTDOWN) != 0)) ||<br />    ((p-&gt;vkCode == VK_ESCAPE) &amp;&amp;  ((p-&gt;flags &amp; LLKHF_ALTDOWN) != 0)) ||<br />    ((p-&gt;vkCode == VK_ESCAPE) &amp;&amp;  ((GetKeyState(VK_CONTROL)&amp;0x8000) != 0))||<br />    ( p-&gt;vkCode == VK_LWIN)   ||  ( p-&gt;vkCode==VK_RWIN )<br />    ;<br />   break;<br />  }<br /> }<br /> return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam, <br />  lParam));<br />}</p>
		<p>
				<br />int WINAPI WinMain(HINSTANCE hinstExe, HINSTANCE, PTSTR pszCmdLine, int) <br />{<br />       <br />        // Install the low-level keyboard &amp; mouse hooks<br />        HHOOK hhkLowLevelKybd  = SetWindowsHookEx(WH_KEYBOARD_LL, <br />        LowLevelKeyboardProc, hinstExe, 0);<br /> <br />       // Keep this app running until we're told to stop<br />         MessageBox(NULL, <br />             TEXT("Alt+Esc, Ctrl+Esc, Alt+Tab, LWIN and RWIN are now disabled.\n")  <br />          TEXT("Click \"Ok\" to terminate this application and re-enable these keys."),<br />                TEXT("Disable Low-Level Keys"),<br />                MB_OK);<br />  <br />             UnhookWindowsHookEx(hhkLowLevelKybd);<br />             return(0);<br />}</p>
		<p>
				<br />1.2 系统热键<br />        1.屏蔽:SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,true，0, SPIF_UPDATEINIFILE);<br />        2.恢复:SystemParametersInfo(SPI_SETSCREENSAVERRUNNING,false,  0, SPIF_UPDATEINIFILE);</p>
		<p>1.3 模拟按键<br />  让系统模拟一次按下WIN+D键  <br /> <br />               keybd_event(VK_LWIN,0,0,0);  <br />               keybd_event('D',0,0,0);  <br />               keybd_event(VK_LWIN,0,KEYEVENTF_KEYUP,0);  <br />               keybd_event('D',0,KEYEVENTF_KEYUP,0); </p>
		<p>1.4 切换到当前桌面</p>
		<p>模拟最小化屏幕快捷键Window+D  <br /> <br />                             keybd_event(VK_LWIN,0,0,0);      <br />                             keybd_event('D',0,0,0);      <br />                             keybd_event(VK_LWIN,0,KEYEVENTF_KEYUP,0);      <br />                             keybd_event('D',0,KEYEVENTF_KEYUP,0);  <br />---------------------------------------------------------------  <br /> <br />正统的办法如下：  <br /> <br />#include    <br />#include    <br /> <br />int  main  ()  <br />       {  <br />               CoInitialize  (0);  <br />               IShellDispatch4  *pdisp  =  NULL;  <br />               CoCreateInstance  (CLSID_Shell,  NULL,  CLSCTX_ALL,  __uuidof  (IShellDispatch4),  (void  **)&amp;pdisp);  <br />               pdisp-&gt;ToggleDesktop  ();  //  这句是用来切换桌面的  <br />               pdisp-&gt;Release  ();  <br />               CoUninitialize  ();  <br />       }; </p>
		<p>1.5 调出关机选择画面</p>
		<p>////////调出关机选择画面：（重启、关机、休眠、待机）  <br />typedef  int  (CALLBACK  *SHUTDOWNDLG)(int);  //显示关机对话框函数的指针  <br />HINSTANCE  hInst  =  LoadLibrary("shell32.dll");  //装入shell32.dll  <br />SHUTDOWNDLG  ShutDownDialog;  //指向shell32.dll库中显示关机对话框函数的指针  <br />if(hInst  !=  NULL)  <br />{  <br />       //获得函数的地址并调用之  <br />       ShutDownDialog  =  (SHUTDOWNDLG)GetProcAddress(hInst,(LPSTR)60);  <br />       (*ShutDownDialog)(0);  <br />}  </p>
		<p>二 鼠标</p>
		<p>
				<br />2.1   ::ClipCursor(&amp;rect);<br />        ::ClipCursor(NULL);</p>
		<p>2.2 一个未公开的API函数BlockInput，在user32.dll中，用它可以<br />轻易的锁定键盘和鼠标。</p>
		<p>BOOL __stdcall (*BlockInput)(BOOL Flag);<br />(FARPROC)BlockInput = GetProcAddress(GetModuleHandle(<br />    "user32.dll"), "BlockInput");<br />if (BlockInput) BlockInput(TRUE); //这样就可以了</p>
		<p>
				<br />三 显示器</p>
		<p>   3.1 关闭显示器<br />        1. SendMessage( WM_SYSCOMMAND, SC_MONITORPOWER, 2);//关显示器<br />           SendMessage( WM_SYSCOMMAND, SC_SCREENSAVE, 0);//运行屏保</p>
		<p>        2. ::SendMessage(GetSafeHwnd(), WM_SYSCOMMAND, SC_MONITORPOWER, 2);<br /> <br />        3. SendMessage(HWND_BROADCAST,WM_SYSCOMMAND,SC_MONITORPOWER,2);<br />   3.2 启动屏保<br />         PostMessage(WM_SYSCOMMAND,SC_SCREENSAVE,0);</p>
		<p>四 系统桌面</p>
		<p>  4.1 隐藏任务栏 <br />       隐藏 ::ShowWindow (::FindWindow("Shell_TrayWnd",NULL),SW_HIDE);<br />            or ::ShowWindow (::FindWindow("Shell_TrayWnd",NULL),SW_HIDE);<br />       显示 ::ShowWindow (::FindWindow("Shell_TrayWnd",NULL),SW_SHOW);<br />            or ::ShowWindow (::FindWindow("Shell_TrayWnd",NULL),SW_SHOW);</p>
		<p>   4.2 在任务栏隐藏<br />       SetWindowLong(Application,Handle,GWL_EXSTYLE,WS_EX_TOOLWINDOW);</p>
		<p>   4.3在任务管理器中隐藏<br />//定义RegisterServiceProcess函数的原型 <br />typedef DWORD (CALLBACK* LPREGISTERSERVICEPROCESS)(DWORD,DWORD); </p>
		<p>//注册应用程序的进程 <br />//其中i = 0，将进程注册成非服务进程，这样，在Windows的关闭程序窗口中就不会出现应用程序 <br />//的名称了。 <br />// i = 1，将进程注册成服务进程，这是一般应用程序运行时所采用的状态。 </p>
		<p>void RegisterProcess(int i) <br />{ <br />            HINSTANCE hDLL; <br />            LPREGISTERSERVICEPROCESS lpRegisterServiceProcess; </p>
		<p>            //加载RegisterServiceProcess函数所在的链接库 <br />            hDLL = LoadLibrary("KERNEL32"); </p>
		<p>            //得到RegisterServiceProcess函数的地址 <br />            lpRegisterServiceProcess = (LPREGISTERSERVICEPROCESS)GetProcAddress(hDLL, "RegisterServiceProcess"); </p>
		<p>            //执行RegisterServiceProcess函数 <br />            lpRegisterServiceProcess(GetCurrentProcessId(),i); </p>
		<p>           //卸载链接库 <br />           FreeLibrary(hDLL); <br />} </p>
		<p> </p>
		<p>4.4启动屏保</p>
		<p>SystemParametersInfo(SPI_SETDESKWALLPAPER,0,"C:\\*.BMP",WM_WININICHANGE);<br /></p>
<img src ="http://www.cppblog.com/dbsky/aggbug/9333.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dbsky/" target="_blank"><FONT color=red>dbsky </FONT> </a> 2006-07-03 19:36 <a href="http://www.cppblog.com/dbsky/articles/9333.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>关于SDK的读书笔记</title><link>http://www.cppblog.com/dbsky/articles/9331.html</link><dc:creator>&lt;FONT color=red&gt;dbsky &lt;/FONT&gt; </dc:creator><author>&lt;FONT color=red&gt;dbsky &lt;/FONT&gt; </author><pubDate>Mon, 03 Jul 2006 11:21:00 GMT</pubDate><guid>http://www.cppblog.com/dbsky/articles/9331.html</guid><wfw:comment>http://www.cppblog.com/dbsky/comments/9331.html</wfw:comment><comments>http://www.cppblog.com/dbsky/articles/9331.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.cppblog.com/dbsky/comments/commentRss/9331.html</wfw:commentRss><trackback:ping>http://www.cppblog.com/dbsky/services/trackbacks/9331.html</trackback:ping><description><![CDATA[
		<p>学习了一个星期的SDK，下面是做的点笔记<br /><br />消息宏前缀：<br />WM_:窗口消息<br />BM_:按钮控制消息<br />CB_:组合框控制消息<br />EM_:编辑框控制消息<br />LB_:列表框控制消息<br />SBM_:滚动条控制消息</p>
		<p>
				<br />一个句柄标识一个Windows使用的唯一整数数值，用来标识应用程序中不同对象和同类对象中的不同的实例，应用程序通过句柄来访问相应的对象信息<br />HWND  窗口句柄<br />HDC   设备环境句柄<br />HINSTANCE   当前实例句柄<br />HBITMAP   位图句柄<br />HCURSOR   光标句柄<br />HICON     图标句柄<br />HFONT     字体句柄<br />HBRUSH    笔刷句柄<br />HMENU     菜单句柄<br />HFILE     文件句柄</p>
		<p>SDK常用的数据结构：<br />  MSG:包含一个消息的全部信息<br />  WNDCLASS：包含窗口类的全部信息<br />  RECT:矩形区域<br />  PAINTSTRUCT:为每一个窗口保存一个"绘图信息结构"<br />  TEXTMETRIC :字体结构</p>
		<p>InvalidateRect和UpdateWindow的区别 </p>
		<p>InvalidateRect是将客户区标记为无效，并产生WM_PAINT消息，Windows会将WM_PAINT消息放入队列，等待窗口过程的处理，然后操作系统将WM_PAINT当作是低优先级消息，如果后面有其他的动作要处理，则可能会出现空白的区域需要等待一段时间才被刷新。<br />UpdateWindow则将导致操作系统立即用WM_PAINT调用窗口过程，而不进入队列，使窗口得到立即的刷新。窗口过程完成刷新后立即退出，Windows将控制返回给UpdateWindow之后的语句。*/</p>
		<p>if(!TranslateAccelerator(hwnd,hAccel,&amp;msg))<br />在消息循环中，截获加速键消息TranslateAccelerator寻找WM_KEYDOWN，WM_CHAR，WM_KEYUP序列与表中键值匹配的字符，如果找到，它插入一条WM_COMMAND到消息队列，在消息队列中的命令ID可以是加速键表定义的任何入口</p>
		<p>PostQuitMessage函数投递一个WM_QUIT消息到线程消息队列并且立即返回.该函数简单的通知系统线程请求马上退出.当线程从它的消息队列收到WM_QUIT消息时,将退出自身消息循环并且交还控制给操作系统.WM_QUIT消息的wParam参数作为程序退出码返回给系统处理.</p>
		<p>PtInRect(&amp;rect, point)//判断点是否在矩形内<br />wsprintf(char szTitle[],"%d",i)//把输出格式和输出变量送到szTitle数组</p>
		<p> </p>
		<p> </p>
		<p>
				<br /> </p>
<img src ="http://www.cppblog.com/dbsky/aggbug/9331.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.cppblog.com/dbsky/" target="_blank"><FONT color=red>dbsky </FONT> </a> 2006-07-03 19:21 <a href="http://www.cppblog.com/dbsky/articles/9331.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>