一些东西

来源:互联网 发布:1n4001二极管数据手册 编辑:程序博客网 时间:2024/05/17 07:02

由于自己不是专业的程序员,对C、C++、VC等也还基本属于门外汉的水平,更主要的是,自己仅仅是在心血来潮的时候才编写、阅读一些程序,很多时候以前学会的东西,过一段时间后又忘得一干二净了,以前用过的一些现成的代码又不知哪里找了。因此,在这里将这些自己在各个时候用到的一些能简单直接拿来使用的代码做一下记录,方便自己查找。【不定期更新】

【备注】:下面的代码都没有注明需要包含哪些头文件,可能某些代码需要额外包含某些头文件,自己试试看了。

目录:
1、通过PC喇叭演奏音乐    2、向指定窗口发送文本内容    3、锁闭、解锁光驱面板上的按钮

4、设置窗口透明度            5、设置窗口置顶                    6、设置鼠标穿透

7、VC用字符串截取字符串的函数(比AfxExtractSubString更好)    8、读取整型内存数据

9、关机函数, 适用9X和NT   10、将16进制字符串转换为10进制数值    11、在CTreeCtrl中使用32位色的图标

=========================================================================
=========================================================================

1、通过PC喇叭演奏音乐                                                                  返回顶部

//通过PC喇叭演奏音乐
void beep_music(DWORD frequency[], DWORD delay[],int n)
// DWORD frequency[]:所演奏音乐的频率表
// DWORD delay[]:所演奏音乐的延时表
// int n:频率表和延时表数组的长度,两表长度应该一致
{
    
int circle;
    
for(circle=0;circle<n;circle++)
    
{
        Beep(frequency[circle],delay[circle]);
    }

}

C/C++中的音乐频率对应列表

音频/音亮

C(1)

D(2)

E(3)

F(4)

G(5)

A(6)

B(7)

低音

131

147

165

175

196

220

247

中音

262

296

330

349

392

440

494

高音

523

587

659

698

784

880

988

高二度

1047

1175

1319

1397

1568

1760

1976

音乐节拍

一个节拍延时:2400    分为 1/2节拍…………1/8节拍 依次除以2即可

例:
void main()/*用PC喇叭演奏“生日快乐”*/
{
    unsigned frequency[]
={392,392,440,392,523,494,
        
392,392,440,392,587,523,
        
392,392,784,659,523,494,440,
        
698,698,659,523,587,523}
;/*这个是频率表*/
    unsigned delay[]
={375,125,500,500,500,1000,
        
375,125,500,500,500,1000,
        
375,125,500,500,500,500,1000,
        
375,125,500,500,500,1000,}
;/*这个是节拍表*/
    beep_music(frequency, delay,
25);
}


2、向指定窗口发送文本内容                                                                返回顶部
【我将其用于网游的自动喊话中】

//向指定窗口发送文本内容,非Unicode版本
void SendStringA(HWND hWnd,char * str,int len)
{
    
int i;
    BYTE ch;
    
if(hWnd)
    
{
        
for(i=0;i<len;)
        
{
            ch
=(BYTE)str[i];
            
if(IsDBCSLeadByte(ch))
            
{
                i
++;
                SendMessageA(hWnd,WM_IME_CHAR,MAKEWORD((BYTE)str[i],ch),
0);
                i
++;
            }

            
else
            
{
                SendMessageA(hWnd, WM_IME_CHAR, (WORD)ch, 
0);
                i
++;
            }
            
        }

        PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 
0); //发送回车键
    }

}

//向指定窗口发送文本内容,Unicode版本
void SendStringW(HWND hWnd,WCHAR * str,int len)
{
    
int i;
    
if(hWnd)
    
{
        
for(i=0;i<len;i++)
        
{
            SendMessageW(hWnd, WM_IME_CHAR, str[i], 
0);
        }

        PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 
0); //发送回车键
    }

}

3、锁闭、解锁光驱面板上的按钮                                                        返回顶部
//锁闭、解锁光驱面板上的按钮
BOOL LockCD(char *DriveLetter,BOOL Lock)
// char *DriveLetter:待锁闭、解锁的光驱盘符
// BOOL Lock:TURE表示锁闭,FALSE表示解锁
{
    
char szDevice[10];
    ::sprintf_s( szDevice,
"//./%c:", DriveLetter[0] );
    HANDLE m_handle;
    m_handle
=CreateFileA(szDevice,GENERIC_READ|GENERIC_WRITE,
        FILE_SHARE_READ
|FILE_SHARE_WRITE,NULL,OPEN_EXISTING,NULL,NULL);
    DWORD   dw;
    PREVENT_MEDIA_REMOVAL   rPMR;
    rPMR.PreventMediaRemoval
=Lock;
    
if(m_handle==NULL)
        
return FALSE;
    BOOL fResult
=DeviceIoControl(m_handle,IOCTL_STORAGE_MEDIA_REMOVAL,&rPMR,sizeof(rPMR),NULL,0,&dw,NULL);
    
//IOCTL_STORAGE_MEDIA_REMOVAL:Enables or disables the media eject mechanism. 
    CloseHandle(m_handle);
    
return fResult;
}

4、设置窗口透明度                                                                   返回顶部
//设置窗口透明度
void SetTransparence(HWND hWnd,BYTE Pos)
{
    SetWindowLong(hWnd,GWL_EXSTYLE,GetWindowLong(hWnd,GWL_EXSTYLE) 
| WS_EX_LAYERED);
    SetLayeredWindowAttributes(hWnd,
0,Pos,LWA_ALPHA);
}

5、设置窗口置顶                                                                        返回顶部
//设置窗口置顶
BOOL SetWindowTopmost(HWND hWnd,BOOL top)
{
    
if(top)
        
return SetWindowPos(hWnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE);
    
else
        
return SetWindowPos(hWnd,HWND_NOTOPMOST,0,0,0,0,SWP_NOMOVE | SWP_NOSIZE);
}

6、设置鼠标穿透                                                                         返回顶部
//设置鼠标穿透
void SetShuBiaoChuanTou(HWND hWnd,BOOL Status)
{
    
if(Status)
    
{
        
//鼠标穿透
        LONG dwNewLong = GetWindowLong(hWnd, GWL_EXSTYLE);
        dwNewLong 
|= WS_EX_TRANSPARENT | WS_EX_LAYERED;
        SetWindowLong(hWnd, GWL_EXSTYLE, dwNewLong);
    }

    
else
    
{    //取消穿透
        LONG dwNewLong = GetWindowLong(hWnd, GWL_EXSTYLE);
        dwNewLong 
&= ~WS_EX_TRANSPARENT;
        SetWindowLong(hWnd, GWL_EXSTYLE, dwNewLong);
    }

}

7、VC用字符串截取字符串的函数(比AfxExtractSubString更好)

8、读取整型内存数据                                                                      返回顶部
//读取整型内存数据
int ReadIntMemory(HWND hWnd,DWORD offset)
{
    
int *lpBuffer=NULL;
    SIZE_T nSize
=sizeof(int);
    DWORD IdThread;
    MEMORY_BASIC_INFORMATION mbi;
    BYTE baseAddress 
= 0;
    
int IntValue=0;
    ::GetWindowThreadProcessId(hWnd,
&IdThread);
    HANDLE hProcess 
= OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ,FALSE,IdThread);
    ::VirtualQueryEx(hProcess,
&baseAddress, &mbi, sizeof(mbi));
    ::ReadProcessMemory(hProcess,(LPCVOID)(baseAddress
+offset),(PVOID)&IntValue,nSize,NULL);
    
if(lpBuffer)
        
*lpBuffer=IntValue;
    ::CloseHandle(hProcess);
    
return IntValue;
}

9、关机函数, 适用9X和NT                                                                   返回顶部
//提升进程权限以便可以使用ExitWindowsEx函数进行关机操作
void EnableDebugPriv()
{
    HANDLE   hToken;
    LUID   sedebugnameValue;
    TOKEN_PRIVILEGES   tkp;  


    
if   (   !   OpenProcessToken(   GetCurrentProcess(),   
        TOKEN_ADJUST_PRIVILEGES   
|   TOKEN_QUERY,   &hToken   )   )   
        
return;   
    
if   (   !   LookupPrivilegeValue(   NULL,   SE_DEBUG_NAME,   &sedebugnameValue   )   )   
    
{   
        CloseHandle(   hToken   );   
        
return;   
    }
   
    tkp.PrivilegeCount   
=   1;   
    tkp.Privileges[
0].Luid   =   sedebugnameValue;   
    tkp.Privileges[
0].Attributes   =   SE_PRIVILEGE_ENABLED;   
    
if   (   !   AdjustTokenPrivileges(   hToken,   FALSE,   &tkp,   sizeof   tkp,   NULL,   NULL   )   )   
        CloseHandle(   hToken   );   
}

//判断当前操作系统是否为NT系统,是则返回真,否(即是win9x系统)则返回否
BOOL IsWin2000()
{
    OSVERSIONINFO winInfo;
    winInfo.dwOSVersionInfoSize 
= sizeof(OSVERSIONINFO);
    GetVersionEx(
&winInfo);

    
if (winInfo.dwMajorVersion == 5)    //win2000 or winXP
        return TRUE;
    
else 
        
return FALSE;
}

//关机函数, 适用9X和NT
void ShutDownSys()
{
    EnableDebugPriv();
    
    
if (IsWin2000())
        WinExec(
"ShutDown -s -f -t 0 -c "    WINDOWS将在上面的时间内关机,请做好保存工作!"", SW_SHOW);
    
else
        ExitWindowsEx(EWX_SHUTDOWN 
| EWX_FORCE | EWX_POWEROFF,NULL); 
    
//ExitWindowsEx(EWX_SHUTDOWN   |   EWX_FORCE,   0);
}

10、将16进制字符串转换为10进制数值                                            返回顶部
//将16进制字符串转换为10进制数值
long int String16ToInt10( CString str16 )
{
    
long int temp=0;
    
//CString strKeyValue = chKey;
    
//str16[1];
    for(int i = 0;  i< str16.GetLength();  i++)
    
{
        
int nDecNum;
        
switch(str16[i])
        
{
        
case 'a':
        
case 'A':    nDecNum = 10;    break;
        
case 'b':
        
case 'B':    nDecNum = 11;    break;
        
case 'c':
        
case 'C':   nDecNum = 12;   break;
        
case 'd':
        
case 'D':   nDecNum = 13;   break;
        
case 'e':
        
case 'E':   nDecNum = 14;   break;
        
case 'f':
        
case 'F':   nDecNum = 15;   break;
        
case '0':
        
case '1':
        
case '2':
        
case '3':
        
case '4':
        
case '5':
        
case '6':
        
case '7':
        
case '8':
        
case '9':    nDecNum = str16[i] - '0';     break;
        
default:     return temp;            
        }

        temp 
+= nDecNum * (int)pow((double)16,str16.GetLength()--1);
    }

    
return temp;
}

 

11、在CTreeCtrl中使用32位色的图标                                            返回顶部

原文见http://www.codeproject.com/KB/tree/TreeHighIcon.aspx

In your dialog class header, just add two attributes:
CImageList m_imageList; //image list used by the tree
CBitmap m_bitmap; //bitmap witch loads 32bits bitmap

At the end of InitDialog
// Create a 32bits ImageList
m_imageList.Create (16, 16, ILC_COLOR32 , 1,1);

//Add the bitmap to the ImageList
m_bitmap.LoadBitmap(IDB_BITMAP_HIGHCOLOR);
m_imageList.Add(&m_bitmap, RGB(255,0,255));

//Manage your tree items......
m_tree.SetImageList (&m_imageList, TVSIL_NORMAL);
m_tree.InsertItem("RootItem",0,0,TVI_ROOT);

原创粉丝点击