我的日记本

15:16 2012-08-20 周一
返回本地主机的标准主机名。   
#include <Winsock2.h>   
int PASCAL FAR gethostname(char FAR *name, int namelen);  
 name: 一个指向将要存放主机名的缓冲区指针。  
 namelen:缓冲区的长度。
编辑本段注释:  该函数把本地主机名存放入由name参数指定的缓冲区中。
返回的主机名是一个以NULL结束的字符串。主机名的形式取决于
Windows Sockets实现-它多是一个简单的主机名,或者是一个域名。
然而,返回的名字一定能够在gethostbyname()和WSAAsyncGetHostByName()中使用。c++

//-------------------------------------------
TrimLeft  
CString::TrimLeft   
void TrimLeft( );  
 void CString::TrimLeft( TCHAR chTarget );   
void CString::TrimLeft( LPCTSTR lpszTargets );   
参数: chTarget 要被整理的目标字符。   
lpszTargets 指向一个字符串的指针,该字符串包含了要被整理的目标字符。
 说明:   这个成员函数的没有参数的版本用来将字符串最前面的空格修整掉。当在没有参数的状况下调用时,TrimLeft删除换行符,空格和tab字符。   这个成员函数的须要参数的版本用来将一个特定的字符或一群特定的字符从字符串的开始处删除。
//--------------------------------------------
函数GetMessage 是 从调用线程的消息队列里取得一个消息并将其放于指定的结构。此函数可取得与指定窗口联系的消息和由PostThreadMesssge寄送的线程消息。此函数接收必定范围的消息值。GetMessage不接收属于其余线程或应用程序的消息。获取消息成功后,线程将从消息队列中删除该消息。函数会一直等待直到有消息到来才有返回值
//
Win7系统分区限制破解方法(主分区与逻辑分区的建立) 想必安装win7 已经不是什么新鲜的话题了!然而有安装过win7的朋友必定碰到过这样的问题 :win7安装程序建立的都是主分区,并无建立逻辑分区的任何选项,这就形成了建立4个主分区后,剩余的空间没法继续分配的状况。面对这种问题,应该如何解决呢?其实,咱们彻底能够采用win7系统自带的Diskpart命令先进行分区,而后再进行系统的安装,这样作好处有三点:
首先:不用借助第三方工具;其次:不产生100MB的“系统保留”分区;最后:分区操做直接生效,不用重启计算机!Diskpart 是 Windows 环境下的一个命令,正常运行该命令时须要系统服务的支持,因此在纯DOs、XP内核的WinPE环境下都是不能运行的,可是在win7的预安装环境下确实能够运行的。
教程开始:
//------------------------------------------------------------------------------------------------------------------------
当安装程序运行到磁盘分区界面时,按下 “ Shift+F10 ”启动命令窗口;
而后输入 Diskpart 并回车,稍等即可进入 Diskpart的命令环境 (提示符为:DISKPART>),字此提示符下键入相应的命令即可完成磁盘的分区以及格式化操做,具体用到的命令有:List、Clean、 Select、Create、Format、Exit,各命令的使用方法能够经过键入Help查看,这里再也不赘述!
<具体的操做流程看下 依次键入如下命令
List Disk / 显示本机的全部磁盘
Select Disk 0 / 选择0号磁盘(一个硬盘默认为0)
Clean / 清楚磁盘上全部的内容
Create Partition Primary Size=51200/ 建立主分区 容量为50G
Active / 激活主分区
Format Quick/ 快速格式化分区
Create Partition Extended/ 建立逻辑分区
Create Partition Logical Size=51200/ 建立逻辑分区一 容量为50G
Foramt Quick / 快速格式化分区
Create Partition Logical Size=153600 / 建立逻辑分区二 容量为150G
Foramt Quick/ 快速格式化分区
Create Partition Logical Size=153600/ 建立逻辑分区三 容量为150G
Foramt Quick / 快速格式化分区
Create Partition Logical/ 建立逻辑分区四 容量为剩余空间
Foramt Quick/ 快速格式化分区
/Exit/ 退出 Diskpart
/Exit / 退出命令提示符环境 /
--------------------------------------------Note:(右侧的红色文字为注释部分)--------------------------------------------程序员

#pragma data_seg 创建一个新的数据段并定义共享数据,其格式为:
#prama data_seg()通常使用在DLL中,在DLL中定义一个共享的,有名字数据段
最关键的是这个数据段的全局变量能够被多个进程共享,不然 多个进程之间没法共享DLL中的全局变量。
共享数据必须初始化,不然微软编辑器会把没有初始化的数据放到BSS段中从而致使多个进程之间的共享行为失败
--------------------------------------------------------------------------------------------------
ZeroMemory(起始点,内存大小):将内存内部一段区域设置为0。
memset()内存清除,跨平台好。
------------------------------------------------------------
关于SetSystemPowerState(FALSE,TRUE);函数的调用有如下几个注意点
1.函数的功能是让windows系统进入休眠状态shell

2.执行该函数前必须知足系统设置了休眠开启状态 两种方式开启编程

(1)桌面右键/属性/桌面保护程序 选项卡/电源.../休眠 选项卡/休眠windows

(2)控制面板/电源选项/休眠 选项卡/休眠安全

3.能开启睡眠必须知足的条件是 你的系统盘剩余空间大小>物理内存大小服务器

4.要调用AdjustTokenPrivileges函数 获取系统的权限先
---------------------------------------------------------------------------------------------------
HOWTO: InstallShield中如何实现MSI包的权限提高
2010-12-06 10:36 by Kevin.Wan, 2052 阅读, 1 评论, 收藏, 编辑

你们都清楚Vista和Windows 7的UAC问题,安装包中咱们能够经过权限提提高得到系统操做权限。框架

若是是Setup.exe形式的安装包,咱们在InstallShield工程中是经过以下方式实现安装包权限提高的:less

Release视图 -> Setup.exe选项卡 -> 将 Required Execution Level 属性设为Administrator。
若是是单个MSI包,咱们如何实现权限提高呢? socket

Installation Information -> General Information -> Summary Information Stream, 将 Require Administrative Privileges 属性设为Yes
但要注意,上述方法只限于Windows Installer 4.0和更高版本,Windows Vista,Server 2008 R1/R2和Windows 7系统。Windows Installer版本与Windows系统对应关系见Wikipedia中的介绍:http://en.wikipedia.org/wiki/Windows_Installer
版权声明: 转载时请务必以超连接形式标明文章原始出处和做者信息。
--------------------------------------------------------------------------------------------------------
lcfwzq@live.cn lcf32747755wzq

待机是这个命令吧?%windir%\system32\rundll32.exe powrprof.dll,SetSuspendState
system("rundll32.exe powrprof.dll,SetSuspendState");待机命令
-----------------------------------------------------------------------------------------------------------
11:04 2012-09-12
#include <stdio.h>
#include <assert.h>
#include <stdlib.h>
int main( void )
{
FILE *fp;
fp = fopen( "test.txt", "w" );//以可写的方式打开一个文件,若是不存在就建立一个同名文件
assert( fp ); //因此这里不会出错
fclose( fp );

fp = fopen( "noexitfile.txt", "r" );//以只读的方式打开一个文件,若是不存在就打开文件失败
assert( fp ); //因此这里出错
fclose( fp ); //程序永远都执行不到这里来
return 0;
}
使用断言

assert()宏是用于保证知足某个特定条件,用法是:

assert(表达式);

若是表达式的值为假,整个程序将退出,并输出一条错误信息。若是表达式的值为真则继续执行后面的语句。

使用这个宏前须要包含头文件assert.h

例如

#include <stdio.h>
#include <assert.h>

void main()
{
float a,b;
scanf("%f %f",&a,&b);
assert(b!=0);
printf("%f\n",a/b);
}

以上的程序要计算A/B的值,所以要求b!=0,因此在程序中使用了assert()用于确保b!=0,若是b==0,则程序会退出。
---------------------------------------------------------------------------------------------------------
11:15 2012-09-13:
frame框架结构 capture捕获 epoch时间点 previous先前过早的 reference设计参考证实书 ignore忽略不理睬
// 初始化 MFC 并在失败时显示错误
if (!AfxWinInit(::GetModuleHandle(NULL), NULL, ::GetCommandLine(), 0))
{
//----------------------------------------------------------------------
debug 执行的时候报错:那个变量没有初始化,直接找到那个变量修改就能够了。
//--------------------------------------------------------------------------------------
15:13 2012-11-08
 由于能够把调用者与被调用者分开,因此调用者不关心谁是被调用者。它只需知道存在一个具备特定原型和限制条件的被调用函数。
简而言之,回调函数就是容许用户把须要调用的方法的指针做为参数传递给一个函数,
以便该函数在处理类似事件的时候能够灵活的使用不一样的方法。
//--------------------------------------------------------------------------------
16:11 2012-11-13
CString Mid(int nFirst,int nCount)const;
nCount 表明要提取的字符数,nFirst表明要提取的开始索引位置 例子:
CString s(_T("abcdef"));
ASSERT(s.MID(2,3))==_T("cbe"));从字符串s中获取从2位置开始获取3个字符。
//----------------------------------------------------------------
10:51 2012-11-14
int nselect=m_combobox.GetCurSel(); //获取当前组合框选项的索引
CString szname;
m_combobox.GetLBText(nselect,szname); //获取组合框里的标题内容
或者
CString Str; GetDlgItemText(IDC_COMBOBOX1,Str);//IDC_COMBOBOX1为你控件的ID
//---------------------------------------------------------
15:14 2012-11-20
shellexecute的返回值
若是返回值 <= 32, 表示执行错误
0 内存不足
2 文件名错误
3 路径名错误
11 EXE 文件无效
26 发生共享错误
27 文件名不彻底或无效
28 超时
29 DDE 事务失败
30 正在处理其余 DDE 事务而不能完成该 DDE 事务
31 没有相关联的应用程序

ShellExecute(NULL,"open","c:\\QQ.exe",NULL,NULL,SW_SHOWNORMAL);

//----------------------------------------------
15:51 2012-11-22
ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);
//显示隐藏
WINDOWPLACEMENT wp;
wp.length=sizeof(WINDOWPLACEMENT);
wp.flags=WPF_RESTORETOMAXIMIZED;
wp.showCmd=SW_HIDE;
SetWindowPlacement(&wp);


//--------------------------------------------
c++里面设置控件的函数及方法BOOL CMy54_s1Dlg::OnInitDialog()
{
CDialog::OnInitDialog();
/*添加初始化代码*/
//初始化输入框
((CEdit*)GetDlgItem(IDC_EDIT_TEST))->SetWindowText("this is a edit box");
//初始化列表框
CListBox* pListB=(CListBox*)GetDlgItem(IDC_LIST_TEST);
pListB->AddString("item 1");
pListB->AddString("item 2");
pListB->AddString("item 3");
//初始化组合框
CComboBox* pCB=(CComboBox*)GetDlgItem(IDC_COMBO_TEST);
pCB->AddString("item 1");
pCB->AddString("item 2");
pCB->AddString("item 3");
//初始化Tab Ctrl
CTabCtrl* pTab=(CTabCtrl*)GetDlgItem(IDC_TAB_TEST);
pTab->InsertItem(0,"Tab Page1");
pTab->InsertItem(1,"Tab Page2");
pTab->InsertItem(2,"Tab Page3");
//初始化ListCtrl
CListCtrl* pList=(CListCtrl*)GetDlgItem(IDC_LIST_CTRL);
pList->InsertColumn(0,"Column 1",LVCFMT_LEFT,100);
pList->InsertItem(0,"Item 1");
pList->InsertItem(1,"Item 2");
pList->InsertItem(2,"Item 3");
//初始化TreeCtrl
CTreeCtrl* pTree=(CTreeCtrl*)GetDlgItem(IDC_TREE_TEST);
pTree->InsertItem("Node1",0,0);
HTREEITEM hNode=pTree->InsertItem("Node2",0,0);
pTree->InsertItem("Node2-1",0,0,hNode);
pTree->InsertItem("Node2-2",0,0,hNode);
pTree->Expand(hNode,TVE_EXPAND);

return TRUE; // return TRUE unless you set the focus to a control
}

好,本身来总结一下,总的来讲,每个控件都是用一个指针对象来控制的(什么都是指针,怪不得c++这么容易发生内存泄露)

CListBox* pListB=(CListBox*)GetDlgItem(IDC_LIST_TEST);
CComboBox* pCB=(CComboBox*)GetDlgItem(IDC_COMBO_TEST);
CTabCtrl* pTab=(CTabCtrl*)GetDlgItem(IDC_TAB_TEST);
CListCtrl* pList=(CListCtrl*)GetDlgItem(IDC_LIST_CTRL);
CTreeCtrl* pTree=(CTreeCtrl*)GetDlgItem(IDC_TREE_TEST);

不难看出,任何要操做控件的时候都是先实例化一个指向这个控件的指针,其实GetDlgItem这个方法就是指向指针的,可是是指向父类类型CWnd的(我的猜想,尚未来得及去查MSDN),因此每次都须要强制转换成本身类型的指针。

而后用属于这个指针的方法来调用这些函数来实现最基本的mfc控件编程(彻底没有.net的灵活性,不过只要熟悉了应该仍是没有什么大的问题了)呵呵
//---------------------------------------
10:55 2012-11-26
2012-08-16 14:32 226人阅读 评论(0) 收藏 举报
CComboBox使用技巧:
--------------------------------------------------------------------------------

1. CComboBox风格


CBS_AUTOHSCROLL //自动水平滚动条
CBS_DISABLENOSCROLL //选中时始终显示滚动条
CBS_DROPDOWN //下拉式
CBS_DROPDOWNLIST //下拉列表
CBS_HASSTRINGS //为字符串提供GetText()函数
CBS_LOWERCASE //转换为小写
CBS_NOINTEGRALHEIGHT //指定组合框由应用程序来指定大小的
CBS_OEMCONVERT //OEM字符集转换
CBS_OWNERDRAWFIXED //全部项目的高度是同样的
CBS_OWNERDRAWVARIABLE //指定单一项目的高度
CBS_SIMPLE //简单风格
CBS_SORT //排序
CBS_UPPERCASE //转换为大写
CBS_AUTOHSCROLL //自动水平滚动条
CBS_DISABLENOSCROLL //选中时始终显示滚动条
CBS_DROPDOWN //下拉式
CBS_DROPDOWNLIST //下拉列表
CBS_HASSTRINGS //为字符串提供GetText()函数
CBS_LOWERCASE //转换为小写
CBS_NOINTEGRALHEIGHT //指定组合框由应用程序来指定大小的
CBS_OEMCONVERT //OEM字符集转换
CBS_OWNERDRAWFIXED //全部项目的高度是同样的
CBS_OWNERDRAWVARIABLE //指定单一项目的高度
CBS_SIMPLE //简单风格
CBS_SORT //排序
CBS_UPPERCASE //转换为大写
CBS_AUTOHSCROLL //自动水平滚动条
CBS_DISABLENOSCROLL //选中时始终显示滚动条
CBS_DROPDOWN //下拉式
CBS_DROPDOWNLIST //下拉列表
CBS_HASSTRINGS //为字符串提供GetText()函数
CBS_LOWERCASE //转换为小写
CBS_NOINTEGRALHEIGHT //指定组合框由应用程序来指定大小的
CBS_OEMCONVERT //OEM字符集转换
CBS_OWNERDRAWFIXED //全部项目的高度是同样的
CBS_OWNERDRAWVARIABLE //指定单一项目的高度
CBS_SIMPLE //简单风格
CBS_SORT //排序
CBS_UPPERCASE //转换为大写

 

--------------------------------------------------------------------------------

2. 初始化数据

1).在Combo Box控件属性的Data标签里面添加,一行表示Combo Box下拉列表中的一行。换行用ctrl+回车。


2).在程序初始化时动态添加


((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);//strTemp为CString
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);//strTemp为CString
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->AddString(strTemp);//strTemp为CString

 


--------------------------------------------------------------------------------

3. 删除指定行


DeleteString( UINT nIndex ) //删除指定行
DeleteString( UINT nIndex ) //删除指定行
DeleteString( UINT nIndex ) //删除指定行

 


--------------------------------------------------------------------------------


4.插入指定位置


InsertString( int nIndex, LPCTSTR lpszItem ) //将行插入到指定位置
InsertString( int nIndex, LPCTSTR lpszItem ) //将行插入到指定位置
InsertString( int nIndex, LPCTSTR lpszItem ) //将行插入到指定位置

 


--------------------------------------------------------------------------------


5.删除全部项


((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent(); //消除ID为IDC_COMBO_CF现有全部内容
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent(); //消除ID为IDC_COMBO_CF现有全部内容
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->ResetContent(); //消除ID为IDC_COMBO_CF现有全部内容

 

--------------------------------------------------------------------------------

6.查找指定字符串


FindString( int nStartAfter, LPCTSTR lpszItem ) //能够在当前全部行中查找指定的字符串的位置,nStartAfter指明从那一行开始进行查找。
SelectString( int nStartAfter, LPCTSTR lpszItem ) //能够选中包含指定字符串的行
FindString( int nStartAfter, LPCTSTR lpszItem ) //能够在当前全部行中查找指定的字符串的位置,nStartAfter指明从那一行开始进行查找。
SelectString( int nStartAfter, LPCTSTR lpszItem ) //能够选中包含指定字符串的行
FindString( int nStartAfter, LPCTSTR lpszItem ) //能够在当前全部行中查找指定的字符串的位置,nStartAfter指明从那一行开始进行查找。
SelectString( int nStartAfter, LPCTSTR lpszItem ) //能够选中包含指定字符串的行

 


--------------------------------------------------------------------------------


7.选择其中某行


//(1)选中:
int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel(); //当前选中的行。
//(2)设置
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->SetCurSel(n) //设置第n行内容为显示的内容。
//(1)选中:
int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel(); //当前选中的行。
//(2)设置
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->SetCurSel(n) //设置第n行内容为显示的内容。
//(1)选中:
int iPos=((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetCurSel(); //当前选中的行。
//(2)设置
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->SetCurSel(n) //设置第n行内容为显示的内容。

 


--------------------------------------------------------------------------------


8.获取总行数


int GetCount()//获得当前列表框中行的数量
int GetCount()//获得当前列表框中行的数量
int GetCount()//获得当前列表框中行的数量

 

--------------------------------------------------------------------------------


9.取得Combo Box框内容


/*(1)取当前内容*/
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetWindowText(strTemp); //将获取的值存放到CString类型变量strTemp中。
//若是定义了关联的变量,例如m_combo,能够直接获取:m_combo->GetWindowText(strTemp);
/*(2)取其余行内容*/
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetLBText(n,strTemp); //其中n为从0开始的索引值 /*(1)取当前内容*/
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetWindowText(strTemp); //将获取的值存放到CString类型变量strTemp中。

//若是定义了关联的变量,例如m_combo,能够直接获取:m_combo->GetWindowText(strTemp);
/*(2)取其余行内容*/
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetLBText(n,strTemp); //其中n为从0开始的索引值
/*(1)取当前内容*/
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetWindowText(strTemp); //将获取的值存放到CString类型变量strTemp中。

//若是定义了关联的变量,例如m_combo,能够直接获取:m_combo->GetWindowText(strTemp);
/*(2)取其余行内容*/
((CComboBox*)GetDlgItem(IDC_COMBO_CF))->GetLBText(n,strTemp); //其中n为从0开始的索引值

 


--------------------------------------------------------------------------------


10.得到焦点

一般要判断控件是否得到了焦点,能够用GetFocus()函数
例如:if(GetFocus()==GetDlgItem(IDC_EDIT_VALUE2))//判断焦点是否在编辑框IDC_EDIT_VALUE2内。
可是combobox 的焦点不一样,由于它是由edit和listbox两部分组成的,因此得到焦点要用GetParent():


if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))
if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))
if ((GetFocus()->GetParent())==GetDlgItem(IDC_COMBO_CF))

 


--------------------------------------------------------------------------------


11.改变下拉框大小

在设计界面里,点击一下Combo Box的下拉箭头,此时出现的调整框就是Combo Box的下拉调整框


--------------------------------------------------------------------------------

12.经常使用消息映射宏

ON_CBN_DBLCLK 鼠标双击
ON_CBN_DROPDOWN 列表框被弹出
ON_CBN_KILLFOCUS / ON_CBN_SETFOCUS 在输入框失去/获得输入焦点时产生
ON_CBN_SELCHANGE 列表框中选择的行发生改变
ON_CBN_EDITUPDATE 输入框中内容被更新
使用以上几种消息映射的方法为定义原型如:afx_msg void memberFxn( );的函数,而且定义形式如ON_Notification( id, memberFxn )的消息映射。
若是在对话框中使用组合框,Class Wizard会自动列出相关的消息,并能自动产生消息映射代码。
//-------------------------------------------
if ((int nIndex=m_cbo.FindStringExact(-1, "Roy Chou")) != CB_ERR)
{
m_cbo.SetCurSel( nIndex );
} //用FindString会出现问题。它只是查找前面匹配的字符,而不是彻底相同的字符。
SendMessage(
(HWND) hWnd, // handle to destination window
CB_GETLBTEXT, // message to send
(WPARAM) wParam, // item index
(LPARAM) lParam // receives string (LPCSTR)
);
///---------------------------
9:20 2012-12-19
在子窗口添加初始化函数
在vc对话框的操做中,不少资料上都讲到可使用虚函数OnInitDialog()对其进行初始化。可是在类的添加虚函数的列表中,并无这个函数。这是怎么回事呢?事实上,在消息框里面有一个 WM_INITDIALOG 消息,添加这个消息,则自动添加了一个OnInitDialog()函数。这样就能够对对画框进行初始化了
//------------------------------------
在菜单[(视图)view]里有(类视图)和(属性管理器)两个命令,点选他们主窗口就显示这两个视图了,类视图上选中对话框那个类,属性视图跟着改变了,属性视图上有六个按钮,点第六个按钮就显示了全部该类能够重载的函数,找到对应的消息便可添加函数。选择重写,里面就有须要重写的初始化函数。搞定
//--------------------------------------------------------------------------------
2010-01-05 19:28 regini设置注册表权限 Regini是一个设置注册表权限的安全工具,经常使用于命令行方式批量更改注册表权限来达到提升系统安全性,下面咱们先看看regnin所对应的格式和权限数值。
命令格式 renini.ini的格式:

注册表键数值 [更改的权限]

注册表中对应的权限代码:

1 - Administrators 彻底访问
2 - Administrators 只读访问
3 - Administrators 读和写入访问
4 - Administrators 读、写入、删除访问
5 - Creator 彻底访问
6 - Creator 读和写入访问
7 - everyone 彻底访问
8 - everyone 只读访问
9 - everyone 读和写入访问
10 - everyone 读、写入、删除访问
11 - Power Users 彻底访问
12 - Power Users 读和写入访问
13 - Power Users 读、写入、删除访问
14 - System Operators 彻底访问
15 - System Operators 读和写入访问
16 - System Operators 读、写入、删除访问
17 - System 彻底访问
18 - System 读和写入访问
19 - System 只读访问
20 - Administrators 读、写、执行访问
21 - Interactive User 彻底访问
22 - Interactive User 读和写入访问
23 - Interactive User 读、写入、删除访问

例子:咱们要设置常见的3个组的用户为只读权限.那么先新建一个文件名为regini.ini而后编辑regini.ini的内容以下:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run [2 8 19]
而后保存regini.ini 在命令行下导入regini.ini的命令是:regini regini.ini
//17:38 2013-01-04----------------------------
2011-06-16 15:12 用API使计算机休眠或待机Private Declare Function SetSuspendState Lib "Powrprof" (ByVal Hibernate As Boolean, ByVal ForceCritical As Boolean, ByVal DisableWakeEvent As Boolean) As Boolean

示例:
SetSuspendState True, True,True

'参数Hibernate: =False:待机; =True:休眠
'参数ForceCritical: =False:不强行停止运行中的进程; =True:强行停止运行中的进程
'参数DisableWakeEvent =False:容许系统事件唤醒计算机; =True:系统不能唤醒计算机

若是函数成功,返回值为非零。
若是函数失败,返回值为零。为了得到更多的错误信息,调用GetLastError。
备注
//-------13:25 2013-01-31\
原文地址《MFC程序隐藏任务栏图标的三种方法 》
  在VC编程中,有时候咱们须要将咱们的程序在任务栏上的显示隐藏起来,我试过几种方法,下面我介绍一下我知道的三种方法。

  第一种方法是设置窗口WS_EX_TOOLWINDOW扩展样式,经过在OnInitDialog函数中添加以下代码:

  ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW);

  ModifyStyleEx函数原型以下:

    BOOL ModifyStyleEx(
     DWORD dwRemove,
     DWORD dwAdd,
     UINT nFlags = 0 );

  第一个参数是要被去掉的扩展样式,若是设为0或NULL,则不去除任何样式;第二个参数相似,设置要添加的扩展样式;第三个参数默认为0,表示不调用SetWindowPos函数,若是设为true或非0,表示以后会调用SetWindowPos函数。上述代码为窗口添加了WS_EX_TOOLWINDOW样式,同时去掉了WS_EX_APPWINDOW样式,你可理解为这个窗口被设置成工具窗口,相似工具条。运行后效果以下//------------------------------------10:23 2013-03-20 你们知道,MFC框架没有提供任何现成的类应用于系统托盘UI,那么如何将表示应用程序的图标添加到任务栏中呢?方法很简单,只用到一个API函数,它就是Shell_NotifyIcon。这个函数自己也至关容易理解和使用。看看它的原型就知道了:BOOL Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA pnid ); 第一个参数dwMessage类型为DWORD,表示要进行的动做,它能够是下面的值之一: NIM_ADD: 添加一个图标到任务栏。 NIM_MODIFY: 修改状态栏区域的图标。 NIM_DELETE: 删除状态栏区域的图标。 NIM_SETFOCUS: 将焦点返回到任务栏通知区域。 当完成用户界面操做时,任务栏图标必须用此消息。例如,若是任务栏图标正显示上下文菜单,但用户按下"ESCAPE"键取消操做,这时就必须用此消息将焦点返回到任务栏通知区域。 NIM_SETVERSION:指示任务栏按照相应的动态库版本工做。 第二个参数pnid是NOTIFYICONDATA结构的地址,其内容视dwMessage的值而定。这个结构在SHELLAPI.H文件中定义以下:typedef struct _NOTIFYICONDATA { DWORD cbSize; // 结构大小(sizeof struct),必须设置 HWND hWnd; // 发送通知消息的窗口句柄 UINT uID; // 图标ID ( 由回调函数的WPARAM 指定) UINT uFlags; UINT uCallbackMessage; // 消息被发送到此窗口过程 HICON hIcon; // 图标句柄 CHAR szTip[64]; // 提示文本 } NOTIFYICONDATA; uFlags的值: #define NIF_MESSAGE 0x1 // 表示uCallbackMessage 有效 #define NIF_ICON 0x2 // 表示hIcon 有效 #define NIF_TIP 0x4 // 表示szTip 有效 有关Shell_NotifyIcon函数的详细使用细节请参考MSDN。 NOTIFYICONDATA结构中的 hWnd 是"拥有" 图标的窗口句柄。uID能够是任何标示托盘图标的ID(若是有多个图标),通常使用资源ID。HIcon能够是任何图标的句柄,包括预约义的系统图标,如IDI_HAND、IDI_QUESTION、IDI_EXCLAMATION、或者Windows的徽标IDI_WINLOGO。 图标的显示并不难,关键是事件的处理。 当用户将鼠标移到图标上或者在图标上单击鼠标时,为了获得通知消息,你能够将本身的消息ID赋给uCallbackMessage,并设置NIF_MESSAGE标志。当用户在图标上移动或单击鼠标时,Windows将用hWnd指定的窗口句柄调用你创建的窗口过程;消息ID在uCallbackMessage中指定,uID的值即为wParam,lParam为鼠标事件,如WM_LBUTTONDOWN等。 尽管Shell_NotifyIcon函数简单实用。但它毕竟是个Win32 API,为此我将它封装在了一个C++类中,这个类叫作CTrayIcon,有了它,托盘编程会更加轻松自如,由于它隐藏了NOTIFYICONDATA、消息代码、标志以及全部那些你必需要看MSDN才能搞掂的繁琐细节。CTrayIcon的定义以及实现细节请下载源代码参考。CTrayIcon为程序员提供了一个更加友好的托盘编程接口,它除了对Shell_NotifyIcon函数进行打包以外,它仍是一个迷你框架呢!之因此这么说,是由于按照Windows系统应用软件界面指南所提倡的原则(这个指南能够在MSDN中找到),这个类加强了托盘图标的用户界面行为。如下即是CTrayIcon最终实现的UI特性:一、 托盘图标应该有信息提示,也就是ToolTips。二、 单击右键应该弹出上下文菜单,这个菜单中应包含打开属性页的命令或者打开与图标相关的其它窗口的命令。三、 单击左键应该显示进一步的信息或者控制图标所表明的对象,例如,当左键单击声音图标时进行音量控制。若是没有进一步的信息或控制,则不要有任何动做。 CTrayIcon对上面的特性进行了全面的封装。为了示范CTrayIcon的工做原理,本文提供一个例子程序TrayTest1,图一是运行程序后显示的一个对话框//----------------------------------------------------10:41 2013-03-20GetSafeHwnd当咱们想获得一个窗口对象(CWnd的派生对象)指针的句柄(HWND)时,最安全的方法是使用GetSafeHwnd()函数,经过下面的例子来看其理由:CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //但愿找到资源管理器HWND hwnd = pwnd->m_hwnd; //获得它的HWND这样的代码当开始获得的pwnd为空的时候就会出现一个“General protection error”,并关闭应用程序,由于通常不能对一个NULL指针访问其成员,若是用下面的代码:CWnd *pwnd = FindWindow(“ExploreWClass”,NULL); //但愿找到资源管理器HWND hwnd = pwnd->GetSafeHwnd(); //获得它的HWND就不会出现问题,由于尽管当pwnd是NULL时,GetSafeHwnd仍然能够用,只是返回NULL,经过GetSafeHwnd()的实现代码就更清楚了:_AFXWIN_INLINE HWND CWnd::GetSafeHwnd() const{return this == NULL?NULL:m_hWnd;}你看有不少函数的参数要求HWND,它就能够派上用场了.HWND hwnd;CWnd* pWnd;pWnd=((CFrameWnd*)(AfxGetApp()->m_pMainWnd))->GetActiveView();hwnd=pWnd->GetDlgItem(IDC_EDIT2)->GetSafeHwnd();::SetWindowText(hwnd,m_strResult); //----------------------------------------------------10:20 2013-03-21FlashWindow函数原型:Declare Function FlashWindow Lib "user32" Alias "FlashWindow" (ByVal hwnd As Long, ByVal bInvert As Long) As Long函数说明:闪烁显示指定窗口。这意味着窗口的标题和说明文字会发生变化,彷佛从活动切换到非活动状态、或反向切换。一般对不活动的窗口应用这个函数,引发用户的注意返回值:Long,如窗口在调用前处于活动状态,则返回TRUE(非零)。参数,类型及说明:hwnd:Long,要闪烁显示的窗口的句柄。bInvert:Long,TRUE(非零)表示切换窗口标题;FALSE返回最初状态。注解:该函数一般与一个计数器组合使用,生成连续的闪烁效果。在windows nt及windows for workgroup中,bInvert参数会被忽略。但在windows 95中不会忽略。//-----------------------------------------------------------//获取联网状态 int check_net(void) { int fd; int in_len=0; struct sockaddr_in servaddr; //char buf[128]; in_len = sizeof(struct sockaddr_in); fd = socket(AF_INET,SOCK_STREAM,0); if(fd < 0) { perror("socket"); return -1; } /*设置默认服务器的信息*/ servaddr.sin_family = AF_INET; servaddr.sin_port = htons(NET_PORT); servaddr.sin_addr.s_addr = inet_addr(NET_IP); memset(servaddr.sin_zero,0,sizeof(servaddr.sin_zero)); /*connect 函数*/ if(connect(fd,(struct sockaddr* )&servaddr,in_len) < 0 ) { printf("not connect to internet!\n "); close(fd); return 0; //没有联网成功 } else { printf("=====connect ok!=====\n"); close(fd); return 1; } }

相关文章
相关标签/搜索