Archive for September, 2010

something about svn

linux svn 效果图,这个是我在ubuntu软件中心找的:http://bit.ly/9DjfG5

windows下可以用sliksvn

windows’s Subversion client,SlikSvn 1.6.12
如果出现网络问题,可以考虑代理use freegate start cmd.exe
then svn checkout https://someone.googlecode.com/svn/trunk/ someone-read-only
也可以考虑https加上或去掉

code:

帮助
svn -h
svn help add

删除,添加文件
svn del dir/file
svn add dir/file,svn add *
其他还有mv,mkdir

更新工程
svn update

获得工程
svn checkout url

工程信息
svn ls -v //此目录下的已在工程中的文件
svn st -v //目录中所有文件(包括子文件夹)的状态
svn di //工程文件的更改信息

提交
svn ci -m “comment”

boss key

/////

WORD m_wHotKeyMod = HOTKEYF_ALT;
WORD m_wHotKeyValue = 0x51;
if(m_wHotKeyValue && m_wHotKeyMod)
{
WORD vk_mod,vk_mod2;
vk_mod = m_wHotKeyMod;
vk_mod2 = 0;

if        (vk_mod == HOTKEYF_ALT)
vk_mod2 = MOD_ALT;
else if    (vk_mod == HOTKEYF_CONTROL)
vk_mod2 = MOD_CONTROL;
else if    (vk_mod == HOTKEYF_SHIFT)
vk_mod2 = MOD_SHIFT;
else if    (vk_mod == (HOTKEYF_CONTROL|HOTKEYF_ALT))
vk_mod2 = (MOD_CONTROL|MOD_ALT);
else if    (vk_mod == (HOTKEYF_CONTROL|HOTKEYF_SHIFT))
vk_mod2 = (MOD_CONTROL|MOD_SHIFT);
else if    (vk_mod == (HOTKEYF_ALT|HOTKEYF_SHIFT))
vk_mod2 = (MOD_ALT|MOD_SHIFT);
else if    (vk_mod == (HOTKEYF_CONTROL|HOTKEYF_ALT|HOTKEYF_SHIFT))
vk_mod2 = (MOD_CONTROL|MOD_ALT|MOD_SHIFT);
UnregisterHotKey(GetSafeHwnd(),3079);
if(0 == RegisterHotKey(GetSafeHwnd(),3079,vk_mod2,m_wHotKeyValue))
{
TRACE("%d\n",GetLastError());
}
}

//////////////////

LRESULT CTestBossDlg::OnHotKey(WPARAM/* wParam*/,LPARAM/* lParam*/)
{
m_boss?BossHideWindow():BossShowWindow();
m_boss = !m_boss;
return NULL;
}

list<HWND> lstStoringwnd;//global

bool ReadConfigFile(string szFileName,list<string>& s)
{
try{
string fullPath = szFileName;
TiXmlDocument document;
CXmlUtil::CreateDocumentFromFile(document, szFileName.c_str());  //从文件获取信息

TiXmlElement * rootElement = CXmlUtil::GetRootElement(document);
if (rootElement){
list<TiXmlElement* > lstApp;
if (CXmlUtil::GetChildElementsByTagName(rootElement,"app", lstApp)){
for (list<TiXmlElement * >::iterator p = lstApp.begin( );
p != lstApp.end( ); ++p) {
string curStr;
if (*p){
if (CXmlUtil::GetElementValue(*p,curStr)){
String2Lower(curStr);
s.push_back(curStr);
}
}
}
}
}
}
catch (string& e){
ASSERT(0);
return false;
}
return true;
}

void BossShowWindow()
{
for (list<HWND>::iterator p = lstStoringwnd.begin( );
p != lstStoringwnd.end( ); ++p){
::ShowWindow(*p,SW_SHOW);
}
lstStoringwnd.clear();
}

#include <Shlwapi.h>
void BossHideWindow()
{
list<string> s;
ReadConfigFile("test.xml",s);

typedef void (__stdcall *fun)(HWND,char*);
fun fun1 = NULL;
TCHAR* _dllname = _T("hwnd2name.dll");
ASSERT(PathFileExists(_dllname));
HMODULE _ = LoadLibrary(_dllname);
if(_)
fun1 = (fun)GetProcAddress(_,"GetProcessNameFromWnd");
else{
int n = GetLastError();
TRACE("%d",n);
ASSERT(0);
}

list<HWND> lstwnd;

FindFromHwnd(lstwnd);
for (list<HWND>::iterator p = lstwnd.begin( );
p != lstwnd.end( ); ++p) {
if(fun1){
char path[_MAX_PATH + 1];
fun1(*p,path);
string strpath(path);

//strpath = CStringUtil::CString2String(EraseSqual(CStringUtil::Std2CString(strpath)));
strpath = EraseSqual(strpath);
String2Lower(strpath);
if(IsInList(strpath,s)){
if(!IsInList(*p,lstStoringwnd)){
lstStoringwnd.push_back(*p);
::ShowWindow(*p,SW_HIDE);
}
}
}
}
}

CString  GetAppPath()
{
TCHAR _1[MAX_PATH];
GetCurrentDirectory(MAX_PATH,_1);
return (CString)_1;
}

BOOL CALLBACK EnumChildProc(HWND hwnd,LPARAM lParam)
{
//TCHAR szClassName[100];
list<HWND>* _ = (list<HWND>*)lParam;
if (::IsWindowVisible(hwnd)){
(*_).push_back(hwnd);
}
return TRUE;        // 继续枚举子窗口
}

void FindFromHwnd(list<HWND>& _)
{
::EnumWindows(EnumChildProc, (LPARAM)&_ );
}

///download

http://cid-cb7a152ebdc9f64e.office.live.com/embedicon.aspx/.Public/newTestBoss.zip

Get Process Name From HWnd

procedure GetProcessNameFromWnd(Wnd: HWND;path: PAnsiChar)stdcall;
var
List: TStringList;
PID: DWORD;
I: Integer;
Result1:String;
begin
Result1 := '';
//path := PAnsiChar(AnsiString(Result1)) ;
StrPCopy(path, PAnsiChar(AnsiString(Result1)));
//MessageBoxA(0,'1','ok',1);
if IsWindow(Wnd) then
begin
PID := INVALID_HANDLE_VALUE;
GetWindowThreadProcessId(Wnd, @PID);
List := TStringList.Create;
try
if RunningProcessesList(List, True) then
begin
I := List.IndexOfObject(Pointer(PID));
if I > -1 then
Result1 := List[I];
StrPCopy(path, PAnsiChar(AnsiString(Result1)));
end;
finally
List.Free;
end;
end;
end;
typedef void (__stdcall *fun)(HWND,char*);
TCHAR* _dllname = _T("hwnd2name.dll");
ASSERT(PathFileExists(_dllname));
HMODULE _ = LoadLibrary(_dllname);
if(_){
char path[1024];
fun fun1 = (fun)GetProcAddress(_,"GetProcessNameFromWnd");
if(!fun1)
{
return TRUE;
}
if(HWND _3 = m_hWnd){
fun1(_3,path);
CString str(path);
AfxMessageBox(str);
}
}
else{
int n = GetLastError();
TRACE("%d",n);
ASSERT(0);
}

testdll

hwnddll

vs2005调试时”没有找到mfc80d.dll”错误

vs2005后的版本调试时经常出现"没有找到mfc80d.dll,因为这个应用程序未能启动,…"的错误。
据说这个跟磁盘是fat32格式的有关。
当出现这种情况时,打开项目-属性-配置属性-连接器-清单工具-生成清单,将【是】改为【否】,再按下f5,依然报同样错,这时将【否】再改回【是】,这时按f5可以正常调试。

停止调试后,用ctrl+O打开文件菜单打开生成的exe查看资源,找到RT_MANIFEST一项,将其中内容用右键导出,重命名为example.exe.manifest(example.exe为生成的exe名称)放在exe同目录下。这样手动设置mainfest后,exe总能顺利的执行。

正常的mainfest类似于
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
      </requestedPrivileges>
    </security>
  </trustInfo>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugCRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
  <dependency>
    <dependentAssembly>
      <assemblyIdentity type="win32" name="Microsoft.VC90.DebugMFC" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></assemblyIdentity>
    </dependentAssembly>
  </dependency>
</assembly>

报错时,exe内嵌的manifest里面的内容是不全的。