我的日記本

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; } }

相關文章
相關標籤/搜索