返回> 网站首页 

一些技巧(1)

yoours2007-04-20 19:53:21 阅读 995

简介一边听听音乐,一边写写文章。

1.添加变量方法
在需要添加变量的控件上右击鼠标,类别选择value,即可
2.实现拖放使用函数
//UINT DragQueryFile(HDROP hDrop,UINT iFile,LPTSTR lpszFile,UINT cch);
//hDrop是指向拖动文件结构的句柄
//iFile是以0开始的被拖动文件的序号,因为一次可能拖动多个文件。当此参数设置为0xFFFFFFFF,则函数返回拖动文件的数量
//lpszFile是指向文件名的缓冲区
//cch是文件名缓冲区的大小,即文件名的字节数
3.超时错误处理
FD_SET fd={1,m_hSocket};
TIMEVAL tv={nSecs,0};
if(Select(0,NULL,&fd,NULL,&tv)==0)
{
//超时错误处理
}
4.添加自定义的消息
//使用消息常量WM_USER加上一个正整数
#define WM_MYMESSAGE WM_USER+1
//在.cpp文件中消息映射的语句
BEGIN_MESSAGE_MAP(CMyWnd,CMyParentWndClass)
 ON_MESSAGE(WM_MYMESSAGE,OnMyMessage)
END_MESSAGE_MAP()
//然后在.h头文件中加入消息映射函数的原型声明如下
afx_msg LRESULT OnMyMessage(WPARAM,LPARAM);
=====================================================
        HC=::GetWindow(hCurWindow,GW_CHILD);//列表框
        EDIT_1=::GetWindow(HC,GW_HWNDNEXT);//编辑框
        EDIT_2=::GetNextWindow(EDIT_1,GW_HWNDNEXT);
        EDIT_3=::GetNextWindow(EDIT_2,GW_HWNDNEXT);//同胞窗口
        EDIT_4=::GetNextWindow(EDIT_3,GW_HWNDNEXT);//同胞窗口
        EDIT_5=::GetNextWindow(EDIT_4,GW_HWNDNEXT);//同胞窗口
============================
         CStdioFile f1;
         testrs rs1;
    CString filename, value1;
    filename = "E:\\tt.txt";
    rs1.Open(CRecordset::snapshot,"select * from table1");
       if(f1.Open(filename,CFile::modeCreate|CFile::modeNoTruncate|CFile::modeWrite))
    {
       while( !rs1.IsEOF() )
       {
           rs1.GetFieldValue("mobile",value1);
           f1.WriteString(value1+"\n");
           rs1.MoveNext();
       }
    }
    else MessageBox("File initializtion error","information",MB_OK);
    rs1.Close;
    f1.Close;
===================================================
使用内存文件
CMemFile MyFile;
MyFile.Open("\temp.txt",CFile::modeCreate|CFile::modeWrite);
MyFile.Attach(pAttach,dwFileLength);
===================================================
屏幕保护和能源保护功能的关闭与开启
1.关闭屏幕保护
SystemParametersInfo(SPI_SETSCREENSAVEACTIVE,FALSE,0,SPIF_SENDWININICHANGE);
2.关闭能源保护
SystemParametersInfo(SPI_SETLOWPOWERACTIVE,FALSE,0,SPIF_SENDWININICHANGE);
SystemParametersInfo(SPI_SETPOWEROFFACTIVE,FALSE,0,SPIF_SENDWININICHANGE);
3.打开
将上面中的FALSE改为TRUE即可
===================================================
用默认程序打开mp3文件
ShellExecute(0,"open","a.mp3",NULL,NULL,0);
===================================================
关机 注销
BOOL ExitWindow***(
     UINT uFlags//关机方式
    ,DWORD dwReservde//保留(直接写0即可)
    };
参数uFlags指定关机方式
EWX_LOGOFF      //终止所有进程,然后注销
EWX_POWEROFF    //关闭系统切断电源。但调用该函数的进程必须要有SE_SHUTDOWN_NAME特权
EWX_REBOOT      //关闭系统并重新启动。必须有SE_SHUTDOWN_NAME特权
EWX_SHUTDOWN    //关闭系统到并提示用户可以安全关机,文件缓冲区内容保存到磁盘,所有进程终止。必须有SE_SHUTDOWN_NAME特权
EWX_FORCE       //强制进程终止,而且系统不会发WM——QUERYENDSESSION和WM_ENDSESSION消息,这种方式会使应用程序丢失数据,应慎重使用
参数dwReservde是保留字,可以随意设置成一个数,比如1
注:
1.Windows 2000下,必须调用AdjustTokenPrivileges函数来使用SE_SHUTDOWN_NAME特权。
2.GetTokenInformation()该函数能显示那些特权是可用的,大部分特权是禁止的
3.在进行特权操作前,必须在存权令牌内使能必要的特权。可先调用OpenThreadToken函数得到存取令牌句柄,然后调用AdjustTokenPrivileges函数来使用该特权。在进行响应的操作之后,再调用一次AdjustTokenPrivileges函数来禁止一个标志的特权。
4.为了获取对应某个字符串的当前LUID,要调用LookupPrivilegeValue函数,函数LookupPrivilegeName把一个LUID值转换为相应的字符串常量。
5.特权是以字符串形式定义在WinNt.h中。当需要显示某个用户的某个特权描述时,可以使用函数LookupPrivilegeDisplayName来获得描述字符串。
=====================================================
连接远程计算机的注册表
MachineName="\\\\"+MachineName;
LPTSTR p=MachineName.GetBuffer(MachineName.GetLength());
LONG lRet=::RegConnectRegistry(p,HKEY_PERFORMANCE_DATA,&key);
==========================================================
让应用程序从IE中获取键入的网址 
HWND hwnd=::FindWindow(_T("IEFrame"),NULL);
if(hwnd)
{
    HWND hwnd2=::FindWindowEx(hwnd,NULL,_T("Edit"),NULL);
   char sz[255];
  ::SendMessage(hwnd2,WM_GETTEXT,255,(LPARAM)sz);
  AfxMessageBox(sz);
}
结果发现不能得到正确的结果,从SPY上看,类名也全部是正确的,为什么不能得到正确的结果呢?看了他的代码后,我进行了如下改动,就可以得到正确的结果了:
HWND hwnd=::FindWindow(_T("IEFrame"),NULL);
 if(hwnd)
 {
  HWND hwnd2=::FindWindowEx(hwnd,NULL,_T("WorkerW"),NULL);
  HWND hwnd3=::FindWindowEx(hwnd2,NULL,_T("ReBarWindow32"),NULL);
  HWND hwnd4=::FindWindowEx(hwnd3,NULL,_T("ComboBoxEx32"),NULL);
  HWND hwnd5=::FindWindowEx(hwnd4,NULL,_T("ComboBox"),NULL);
  HWND hwnd6=::FindWindowEx(hwnd5,NULL,_T("Edit"),NULL);
   char sz[255];
  ::SendMessage(hwnd6,WM_GETTEXT,255,(LPARAM)sz);
  AfxMessageBox(sz);
 }
}
  以上的代码不用我解释了吧,这个问题不是什么大问题,难度也不大,但是可能会让初学者不明白为什么得不到程序某一控件的HANDLE,其实对VC来说,没有什么办不到的事情,只是需要你仔细的分析一下而已  
网络编程
微信小程序扫码登陆

文章评论

995人参与,0条评论